Oracle入门学习笔记

Oracle 3年前 (2021) admin
0
Oracle入门学习笔记

Oracle学习笔记

一:基本查询

​ 1.查询1981-1-1到1981-12-31号入职的雇员

select * from emp where to_date('1981-1-1','yyyy-MM-dd') and to_date('1981-12-31','yyyy-MM-dd');

​ 2.查询员工编号是9527,1997,1314的员工 查询雇员姓名是'JAMES','SMITH','ALLEN'的雇员的信息

​ 2.1 or方式

select * from emp where empno = 9527 or empno = 1997 or empno = 1314;

select * from emp where ename = 'JAMES' or ename = 'SMITH' or ename = 'ALLEN';

​ 2.2 in方式

select * from emp where empno in (9527,1997,1314);  

select * from emp where ename in('JAMES','SMITH','ALLEN');        

​ 3.查询所有雇员姓名中第二个字符有'M'的雇员

select * from emp where ename like '_M%';

​ 查询名字中带有'M'的雇员

select * from emp where ename like '%M%';

4.查询雇员编号不是9527的雇员信息

-- !=方式
select * from emp where empno != 9527;
-- <>方式
select * from emp where empno <> 9527;

5.查询雇员的工资进行降序排列(默认的是升序)

select ename,sal from emp oder by sal desc;

6.查询雇员的奖金并做降序排列(关于 nulls first/nulls last)

SELECT  ename, comm FROM emp ORDER BY comm DESC nulls last;

二:字符函数

-- 1.把'smith'转成大写   关键字:upper
    SELECT UPPER('smith') from daul;
-- 2.把ename转成小写  关键字lower
    SELECT LOWER(ename) from emp;
-- 3.将'smith'首字母大写   关键字:initcap
    SELECT initcap(ename) FROM emp;
-- 4.将'helloworld'截取字符串成'hello'  关键字:substr
    SELECT SUBSTR('helloword',0,5) from daul;     
-- 5.获取'hello'字符串的长度  关键字:length
    SELECT LENGTH('hello') from daul;
-- 6.将'hello'中的'l'用'x'替换  关键字 :repalce
    SELECT REPLACE('hello','l','x') from daul;

三:数值函数

-- 1.将15.66进行四舍五入(从-2到2)   关键字:round
        SELECT ROUND(15.66,-2) FROM daul;  -- 0
        SELECT ROUND(15.66,-1) FROM daul;  -- 20
        SELECT ROUND(15.66,0) FROM daul;  -- 16
        SELECT ROUND(15.66,1) FROM daul;  -- 15.7
        SELECT ROUND(15.66,2) FROM daul;  -- 15.66 

 -- 2.将15.66进行截断(从-2到2)   关键字:tranc
        SELECT trunc(15.66,-2) FROM daul; -- 0   在mysql中相当于truncate
        SELECT trunc(15.66,-1) FROM daul; -- 10
        SELECT trunc(15.66,0) FROM daul; -- 15
        SELECT trunc(15.66,1) FROM daul; -- 15.6
        SELECT trunc(15.66,2) FROM daul; -- 15.66
 -- 3.对15/4取余数  关键字 mod
        SELECT MOD(15,4) FROM daul;

四:日期函数

-- 1.查询系统时间  sysdate
    SELECT SYSDATE from daul;
-- 2.查询雇员进入公司的周数
    SELECT ename , (SYSDATE-hiredate)/7 FROM emp;
-- 3.查询员工进入公司的月数 month_between
    SELECT ename,month_between(SYSDATE,hiredate) from emp;

五:转换函数

-- 将系统日期显示为yyyy-mm-dd hh:mi:ss(去掉补零和24小时显示时间) 关键字  to_char
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from daul;
-- 显示成年月日
    select to_char(sysdate,'yyyy')||'年'||to_char(sysdate,'MM')||'月'||to_char(sysdate,'dd')||'日';

-- 将字符串'1981-1-1'转换成日期类型  关键字:to_date
    select to_date('1981-1-1','yyyy-MM-dd') from daul;

六:通用函数

-- 1.空值的处理函数
     SELECT nvl(comm,0) from emp;
-- 2.nvl2(判断值,空返回值,非空返回值)
     SELECT mvl('xxxx','1','0') from daul;

/*空值函数是与空值null相关的一些函数,完成对空值null的一些操作,从而对空值进行处理。主要包括:nvl,nvl2,nullif,coalesce函数。
a).nvl(expr1,expr2):如果expr1是空值,则返回expr2。
b).nvl2(expr1,expr2,expr3):如果expr1不是空值,返回expr2,否则返回expr3。
c).nullif(expr1,expr2):比较两个表达式,如果相等,返回null,否则,返回第一个表达式。
d).coalesce (表达式1, 表达式2, ... 表达式n)函数是对NVL函数的扩展。COALESCE 函数的功能是返回第一个不为空的参数,参数个数不受限制。*/
例1:select ename,sal+nvl(comm,0) totalsal from emp;
例2:select nvl2(null,'8','fd') from dual;
例3:select nullif(28,28),nullif(3,2) from dual;
例4:select coalesce(null,'5','f') from dual;

七:条件表达式

-- 查询员工的job内容并转成中文显示
   -- decode 方式
   select ename,decode(job,'CLERK','柜员','SALESMAN','销售','MANAGER','管理','其他') from emp;
   -- case when the end方式
   select ename,case job when 'CLERK' then '柜员'
                         when 'SALESMAN' then '销售'
                         when 'MANAGER' then '管理'
                         else '其他'
                         end from emp;

八:多行函数(聚合函数)

-- 1.查询所有员工的记录数  关键字:conut()
SELECT COUNT(*) from emp;
-- 2.查询佣金的总数 -- (如何查询某个字段的总数量)
SELECT SUM(comm) from emp;
-- 3.查询最低工资  关键字  min
SELECT min(sal) FROM emp;
-- 4.查询最高工资  关键字 max
SELECT max(sal) FROM emp;
-- 5.查询平均工资 关键字  max
select AVG(sal) from emp;
-- 6.查询20号部门的员工工资总和
SELECT SUM(sal) FROM emp WHERE deptno = 20;

九:分组函数

-- 1.查询部分编号及人数  分组查询关键字 GROUP BY
SELECT deptno,COUNT(*) from emp GROUP BY deptno;
-- 2.查询每个部门的编号及平均工资
SELECT deptno,AVG(sal) FROM emp GROUP BY deptno;
-- 3.查询部门名称,部门编号,平均工资
SELECT dname,emp.deptno,avg(sal) FROM emp,dept WHERE emp.deptno = dept.deptno GROUP BY emp.deptno,dname;
-- 4.查询部门人数超过5的部门
SELECT  deptno,COUNT(*) FROM emp GROUP BY deptno having COUNT(*) > 5;
-- 5.查询部门编号,部门名称,平均工资且平均工资大于2000的
SELECT emp.deptno,dname,AVG(sal) from emp,dept where emp.deptno = dept.deptno   
GROUP BY emp.deptno,dname having AVG(sal) > 2000;

Day02

十:连接查询

-- 1.查询员工编号,姓名,领导编号,姓名,包括没有领导的
SELECT e1.empno,e1.ename,e2.empno,e2.ename FROM emp e1 LEFT JOIN    emp e2 ON e1.mgr = e2.empno;
-- oracle的(+)方式
SELECT e1.empno,e1.ename,e2.empno,e2.ename FROM emp e1 ,emp e2 where e1.mgr = e2.empno(+);
-- 2.查询出所有部门的信息(包括没员工的部门)及部门以下的员工信息
SELECT * FROM emp,dept WHERE emp.deptno(+) = dept.deptno;

十一:子查询

-- 1.查询比雇员7654工资高,同时从事和7788的工作一样的员工
SELECT * from emp where sal > (SELECT sal FROM emp WHERE empno = 7654) AND job = (SELECT job FROM emp WHERE empno = 7788); 
-- 2.查询每个部门的最低工资及最低工资的部门名称和雇员名称(多表联查建议画图)
SELECT e1.deptno,dept.dname,e1.minsal,emp.ename FROM (SELECT deptno,MIN(sal) minsal FROM emp GROUP BY deptno) e1 ,emp , dept WHERE e1.minsal=emp.sal and e1.deptno = emp.deptno and e1.deptno = dept.deptno;
-- 练习一.找到员工表中工资最高的前三名
SELECT rownum,e.* FROM (SELECT emp.* from emp ORDER BY sal DESC) e WHERE rownum <= 3;

十二:分页查询

分页公式:
pageNo = 1
pageSize = 3
SELECT * FROM (SELECT rownum r,e.* from (SELECT * FROM 表名 ORDER BY 列名 DESC)e) e1 WHERE r>(pageNo - 1)*pageSize and r<pageNo*pageSize;

-- 1.查询员工表,将员工工资进行降序查询,并进行分页取出第一页,一页三条记录
SELECT * FROM (SELECT rownum r,e.* from (SELECT * FROM emp ORDER BY sal DESC)e) e1 WHERE r>0 and r<3;

十二:集合运算交并差(了解)

-- 1.查询工资大于1300并且job是SALESMAN(intersect)
SELECT * from emp WHERE sal > 1300
intersect
SELECT * FROM emp WHERE job ='SALESMAN';
-- 2.查询工资大于1300或者job是'SALESMAN'(union)
SELECT * from emp WHERE sal > 1300
UNION
SELECT * FROM emp WHERE job ='SALESMAN';
-- 3.查询工资大于1200和job是'SALESMAN'的差集(minus)
SELECT * from emp WHERE sal > 1300
minus
SELECT * FROM emp WHERE job ='SALESMAN';

十三:exists / not exists关键字

/*
SELECT...WHERE exists(查询语句)
exist:当查询结果不为null的时候,返回true
当查询结果为null的时候,返回false
*/
-- 1.查询出有员工的部门
SELECT * from dept WHERE EXISTS(SELECT * FROM emp WHERE dept.deptno = emp.deptno);
-- 2.查询出没有员工的部门
SELECT * from dept WHERE not EXISTS(SELECT * FROM emp WHERE dept.deptno = emp.deptno);
版权声明:admin 发表于 2021-03-21 20:15:59。
转载请注明:Oracle入门学习笔记 | 小贝比

暂无评论

暂无评论...