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

Oracle高级查询

  • 相关子查询:查询员工表中薪水大于本部门平均薪水的员工

    select empno ,ename,sal,(select avg(sal) from emp where deptno=e.deptno)avg

    from emp e

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


    查看全部
    1. 行号永远按照默认顺序生成

    2. 行号只能使用<,<=;不能使用>.>=;

    3. 实例:查询emp表中薪水排行前三的员工信息


      select rownum,empno,ename,sal

      from (select * from emp order by sal desc) where ROWNUM<=3;

    查看全部
  • 多表查询和子查询,最好使用多表查询,因为子查询需要访问两次数据库,而多表查询只需访问一次

    查看全部
  • group by 后面不能使用子查询

    查看全部
    1. 查询工资比scott高的员工的工资;

    select * 

    from emp

    where sal>(select sal from emp where ename='SCOTT');


    查看全部
  • 层次查询:“connect by prior...”语句

    select level, empno,ENAME,sal,MGR

    from emp

    connect by prior empno=mgr

    start with mgr is null

    order by 1;


    查看全部
  • 外链接:

    (1)左外连接:“(+)”放在等号的右边;

    (2)右外连接:“(+)”放在等号的左边;

    查看全部
    0 采集 收起 来源:[Oracle] 外连接

    2018-06-24

  • rollup(a,b)函数

    查看全部
  • having语句用于过滤group by语句后的结果 放在group bu语句的后面
    查看全部
  • group by 语句的增强 rollup
    查看全部
  • 使用count函数计算某列的数量时不会算上为空的字段
    查看全部
    0 采集 收起 来源:使用分组函数3

    2018-06-15

  • 8.一般先执行子查询,再执行主查询;但相关子查询例外


    (1)**相关子查询 (子查询使用了主查询字段)

    select 员工号,姓名,工资,

    (select avg(工资) from 员工表 where 部门号 = t1.部门号) 部门平均工资

    from 员工表 t1

    where 工资 > (select avg(工资)

      from 员工表 

      where 部门号 = t1.部门号)


    查看全部
  • >>子查询注意的10个问题


    1.子查询语法中的小括号

    2.子查询的书写风格

    3.可以使用子查询的位置:where,select,having,from

    4.不可以使用子查询的位置:group by

    5.强调:from后面的子查询

    6.主查询和子查询可以不是同一张表

    7.一般不在子查询中,使用排序;但在Top-N分析问题中,必须对子查询排序

    8.一般先执行子查询,再执行主查询;但相关子查询例外

    9.单行子查询只能使用单行操作符;多行子查询只能使用多行操作符

    10.注意:子查询中是null值得问题


    查看全部
  • >>子查询注意的10个问题


    1.子查询语法中的小括号

    2.子查询的书写风格

    3.可以使用子查询的位置:where,select,having,from

    (1) select 必须是单行子查询

    select 工号,姓名,工资,(select 职位 from 员工表 where 工号='100') 

    from 员工表

    (2) having

    select 部门号,ags(工资)

    from 员工表

    group by 部门号

    having ags(工资) > (select max(工资)

    from 员工表

    where 部门号 = 30)

    (3)from

    select *

    from(select 员工号,姓名,工资 

    from 员工表)

    4.不可以使用子查询的位置:group by

    5.强调:from后面的子查询

    select *

    from (select 员工号,姓名,工资 月薪,工资*12 年薪 from 员工表)

    6.主查询和子查询可以不是同一张表

    --子查询

    select *

    from 员工表

    where 部门号 = (select 部门号 

    from 部门表 

    where 部门名称 = '销售部')

    --多表查询

    select t1.* 

    from 员工表 t1,部门表 t2

    where t1.部门号 = t2.部门号 

      and t2.部门名称 = '销售部'

    7.一般不在子查询中,使用排序;但在Top-N分析问题中,必须对子查询排序

    **rownum 行号,伪列

    *行号永远按照默认的顺序生成

    *行号只能使用 <,<=;不能使用 >,>=

    select rownum,员工号,姓名,工资 

    from 员工表

    (1)top-n 前三名

    select rownum,员工号,姓名,工资

    from(select *

    from 员工表

    order by 工资 desc)

    where rownum <= 3

    8.一般先执行子查询,再执行主查询;但相关子查询例外


    (1)**相关子查询 (子查询使用了主查询字段)

    select 员工号,姓名,工资,

    (select avg(工资) from 员工表 where 部门号 = t1.部门号) 部门平均工资

    from 员工表 t1

    where 工资 > (select avg(工资)

      from 员工表 

      where 部门号 = t1.部门号)

        --

    select 员工号,姓名,工资

    from 员工表 t1

    where 工资 > (select 部门号,avg(工资)

      from 员工表 

      group by 部门号

      having 部门号 = t1.部门号)

    --

    select t1.员工号,t1.姓名,t1.工资,t2.部门平均工资

    from 员工表 t1,

    (select 部门号,avg(工资) 部门平均工资

    from 员工表

    group by 部门号) t2

    where t1.部门号 = t2.部门号

      and t1.工资 > t2.部门平均工资

    9.单行子查询只能使用单行操作符;多行子查询只能使用多行操作符

    多行操作符 in/any/all

    --in

    --any

    select *

    from 员工表

    where 工资 > any(select 工资

         from 员工表

         where 部门号 = 30)

    --等价

    select *

    from 员工表

    where 工资 > (select min(工资)

      from 员工表

      where 部门号 = 30)   

    --all

    select *

    from 员工表

    where 工资 > all(select 工资

         from 员工表

         where 部门号 = 30)

    --等价

    select *

    from 员工表

    where 工资 > (select max(工资)

      from 员工表

      where 部门号 = 30)   

    10.注意:子查询中是null值得问题

    单行子查询null值问题

    多行子查询null值问题

    **not in

    a not in (10,20,null)

    a != 10 and a != 20 and a != null

    all

    select *

    from 员工表

    where 员工号 not in (select 老板号

    from 员工表

    where 老板号 not null)


    查看全部
  • select *

    from emp

    where sal>(select sal

                        from emp

                         where ename='SCOTT');


    查看全部

举报

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

微信扫码,参与3人拼团

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

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