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

Oracle高级查询

  •                  案例一:分页查询显示员工信息:显示员工号,姓名,月薪

                        --每页显示四条记录

                        --显示第二页的员工

                        --按照月薪降序排列

                        select empno,ename,sal from emp order by sal desc;

                        --rownum 行号(永远从1开始,所以不能使用>,>=),只能使用<,<=,不能使用>,>=

    spacer.gif

    spacer.gif

               --r是e2表的第一列,不是伪列行号的值;e1表rownum行号与e2表rownum字段重名,e2表 rownum并不是真正意义上的行号,所以e2表的rownum字段可以使用 >= 5


    查看全部
    1 采集 收起 来源:案例1

    2021-01-23

  • 相关子查询:将主查询中的值作为参数传递给子查询

        例:找到员工表中薪水大于本部门平均薪水的员工

         1、  select empno,ename,sal,c.avgsal

                from emp e 

                    where sal> (select avg(sal) from emp where deptno=e.deptno) c;

    2、

                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);


    查看全部
  •         (3)可以使用子查询的位置:where,select,having,from :

                        where后面的子查询中不能有分组函数

                        having后面的子查询中可以有分组函数

                        select后面的子查询得到的结果必须是单条记录

                        from后面的子查询是把子查询的内容当作一个新表


    查看全部
  •                 层次查询

                 自连接存在的问题:

                (1)自连接不适合操作大表,也就是记录多的表,原因是自连接至少有两张表参与,并进行笛卡尔全集,连接之后的记录数就是单张表记录数的平方(笛卡尔积行数是两张表行数的乘积),如果有三张表记录数就是原来的三次方,如果原来的表包含的记录数过多,连接之后的结果就会很大,所以自连接不适合操作大表。解决办法:层次查询。注意层次查询是单表查询,不存在第二张表!因为只有在一张表的情况下才不会产生笛卡尔积,才能解决这个问题。

                层次查询在某些情况下可以替代自连接,本质上是单表查询。

                例: select empno,ename,sal,mgr from emp

                                     //层次查询只涉及一张表

                            connect by prior empno=mgr

                                    //层次查询的条件不用where表示,而用connect by表示上下层关系,上一层的员工号=当前这层的老板号,关键字prior表示相邻两层中的上一层。

                            start with mgr is null或者start with empno=7839;

                                //stsrt with表示起始条件,从何处开始遍历查询,只有从根节点开始时才可以使用start with..... is null 的格式,其余节点都只能使用第二种格式。

                此外层次查询的树的深度用level表示,可以在select语句中加入level就可以得到深度的查询结果,还可以对查询结果进行排序如order by 1;

                比较自连接和层次查询的优劣: 自连接得到的查询结果比较直观,但是不适合操作大表; 层次查询只涉及一张表单表查询,不会产生笛卡尔积,但是得到的结果不够直观。 所以不同的查询语句有不同的特点,不是万能的!


    查看全部

举报

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

微信扫码,参与3人拼团

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

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