为了账号安全,请及时绑定邮箱和手机立即绑定

Oracle高级查询

  • count(*) *代表所有的列
    查看全部
    0 采集 收起 来源:使用分组函数1

    2017-03-12

  • wm_concat行转列
    查看全部
  • count表示求个数
    查看全部
  • wm_concat字符串的拼接
    查看全部
  • WM_CONCAT函数表示行转列。
    查看全部
  • 按部门统计员工的人数 函数查询: select count(*) Total, sum(decode(to_char(hiredate,'YYYY'),'1980','1','0')) "1980", sum(decode(to_char(hiredate,'YYYY'),'1981','1','0'))"1981", sum(decode(to_char(hiredate,'YYYY'),'1982','1','0'))"1982", sum(decode(to_char(hiredate,'YYYY'),'1987','1','0')) "1987" from emp; 子查询: select (select count(*) from emp) total, (select count(*) from emp where to_char(hiredate,'YYYY')='1980') "1980", (select count(*) from emp where to_char(hiredate,'YYYY')='1981') "1981", (select count(*) from emp where to_char(hiredate,'YYYY')='1982') "1982", (select count(*) from emp where to_char(hiredate,'YYYY')='1987') "1987" from dual;
    查看全部
    3 采集 收起 来源:案例3

    2018-03-22

  • 案例二: --查询本部门薪水大于平均工资的员工;(使用表连接查询) 相关子查询: select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) avgsal from emp e where sal>(select avg(sal) from emp where deptno=e.deptno) 多表查询: select e.empno,e.ename,e.sal,d.avgsal from emp e,(select deptno,avg(sal) avgsal from emp group by deptno) d where e.deptno=d.deptno and e.sal>d.avgsal 相关子查询比多表查询占用cpu少 两个方法的结果一样,如何比较优劣 通过比较select语句的执行计划: explain plan for,一般放在开头,执行结束之后如何查看explain生成的执行计划: select * from table(dbms_xplan.display);可以打印查看执行计划,一般放在末尾 然后看耗费了多少CPU的执行资源,结果发现使用相关子查询比多表查询耗费的CPU资源要少
    查看全部
    2 采集 收起 来源:案例2

    2018-03-22

  • 分页查询显示员工信息:显示员工号,姓名,月薪 要求:(1)每页显示四条记录 (2)显示第二页的员工 (3)按照月薪降序排列 注意:rownum只能使用<,<=,不能使用>,>= Oracle 通过拼接子查询方式实现分页操作 select r,empno,ename,sal from (select rownum r,empno,ename,sal from (select rownum,empno,ename,sal from emp order by sal desc) e1 where rownum<=8) e2 where r>=5; 查看伪列的行号 select rownum,r,empno,ename,sal from (select rownum r,empno,ename,sal from (select rownum,empno,ename,sal from emp order by sal desc) e1 where rownum<=8) e2 where r>=5;
    查看全部
    1 采集 收起 来源:案例1

    2018-03-22

  • IN和not in 操作符允许我们在 WHERE 子句中规定多个值。 语句中不能有null值,否则返回空集。 所以要排除空值,判断是否是null值,只能用is or is not而不能用= 或者!=。 Eg: a not in(10,null)相当于a!=10 and a!=null,然而a!=null永远为假, [ 查看全文 ]
    查看全部
  • 子查询的类型 (1)单行子查询:只返回一条记录 操作符:=,>,>=,<,<=,<>不等于 例子:查询员工信息,要求:职位与7566员工一样,薪水大于7782的 select * from emp where job= (select job from emp where empno=7566) and sal>(select sal from emp where empno=7782); (2)多行子查询:返回多条记录 操作符:in 等于列表中的任何一个 any 和子查询返回的任意一个值作比较 all 和子查询返回的所有值比较 例子:(1)in 查询部门名称是sales 和accounting 的员工信息 select *from emp where deptno in (select deptno from dept where dname='SALES' or dname='ACCOUNTING'); select e.* from emp e, dept d where e.deptno=d.deptno and (d.dname='SALES' or d.dname='ACCOUNTING'); (2)any 查询工资比30号部门任意一个员工高的员工信息 select * from emp where sal> any ( select sal from emp where deptno=30); select * from emp where sal>(select min(sal) from emp where deptno=30); (3)all 查询工资比30号部门所有一个员工高的员工信息 select * from emp where sal> all( select sal from emp where deptno=30); select * from emp where sal>(select max(sal) from emp where deptno=30);
    查看全部
  • 相关子查询: select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) avgsal from emp e where sal > (select avg(sal) from emp where deptno=e.deptno); 找出员工薪水大于本部门的平均薪水的员工
    查看全部
  • Top—N分析问题:按某个规律排序取出前几项。 rownum 行号 伪列 注意:(1)行号永远按照默认的顺序生成(2)行号只能使用<,<=,不能使用>,>=. select rownum,empno,ename,sal from emp where rownum<=3 order by sal desc;(错这个只是在emp原表中添加的行号 取出了其中的前三个) select rownum,empno,ename,sal from (select * from emp order by sal desc) where rownum<=3;
    查看全部
  • 子查询语法中的小括号 select * from emp where sal>(select sal from emp where ename='SCOTT');
    查看全部
  • 子查询注意的10个问题: (1)子查询语法中的小括号 (2)子查询的书写风格(方便阅读) (3)可以使用子查询的位置:where,select,having,from (4)不可以使用子查询的位置:group by (5)强调:from 后面的子查询 (6)子查询和主查询可以不是同一张表 (7)一般不在子查询中使用排序;但在Top-N分析问题中必须对子查询排序 (8)一般先执行子查询再执行主查询;但是相关子查询例外 (9)单行子查询只能使用单行操作符;多行使用多行 (10)注意:子查询中是null的问题
    查看全部
  • 自连接存在的问题:不适合操作大表 解决方法:层次查询 缺点:不存在多表查询,查询结果没有自查询直观 select level, empno,ename,sal,mgr from emp connect by prior empno=mgr start with mgr is null;(根结点) start with mgr='7566'(任意一点) connect by 上一层的员工号=老板号
    查看全部

举报

0/150
提交
取消
课程须知
小伙伴们,学习本课程前需要掌握Oracle的语法基础,并且对Oracle的函数有所了解。如不了解这两部分内容,请移步《Oracle数据库开发必备利器之SQL基础》和《Oracle数据库开发利器之函数》两门教程。
老师告诉你能学到什么?
1、掌握分组查询 2、掌握多表查询 3、掌握子查询

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!