关键词搜索

源码搜索 ×
×

Oracle 子查询和分页查询

发布2020-05-30浏览688次

详情内容

一、子查询

子查询:在一个查询的内部还包括另一个查询,则此查询称为子查询,Sql的任何位置都可以加入子查询

  • 范例:查询比 7654 工资高的雇员
    分析:查询出 7654 员工的工资是多少,把它作为条件
    在这里插入图片描述

子查询在操作中有三类:

单列子查询:返回的结果是一列的一个内容
单行子查询:返回多个列,有可能是一个完整的记录
多行子查询:返回多条记录

  • 范例:查询出比雇员 7654 的工资高,同时从事和 7788 的工作一样的员工
    在这里插入图片描述
  • 范例:要求查询每个部门的最低工资和最低工资的雇员和部门名称
    在这里插入图片描述
---子查询返回一个值
---查询出工资和SCOTT一样的员工信息
select * from emp where sal in
(select sal from emp where ename = 'SCOTT')
---子查询返回一个集合
---查询出工资和10号部门任意员工一样的员工信息
select * from emp where sal in
(select sal from emp where deptno = 10);
---子查询返回一张表
---查询出每个部门最低工资,和最低工资员工姓名,和该员工所在部门名称
---1,先查询出每个部门最低工资
select deptno, min(sal) msal
from emp 
group by deptno;
---2,三表联查,得到最终结果。
select t.deptno, t.msal, e.ename, d.dname
from (select deptno, min(sal) msal
      from emp 
      group by deptno) t, emp e, dept d
where t.deptno = e.deptno
and t.msal = e.sal
and e.deptno = d.deptno;

    二、Rownum 和分页查询

    ROWNUM 表示行号,实际上此是一个列,但是这个列是一个伪列,此列可以在每张表中出现。

    rownum 行号:当我们做select操作的时候,每查询出一行记录,就会在该行上加上一个行号。
    行号从 1 开始,依次递增,不能跳着走。
    
    • 1
    • 2
    ----排序操作会影响 rownum 的顺序
    select rownum, e.* from emp e order by e.sal desc
    ----如果涉及到排序,但是还要使用rownum的话,我们可以再次嵌套查询。
    select rownum, t.* from(
    select rownum, e.* from emp e order by e.sal desc) t;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 范例:查询 emp 表带有 rownum 列
      在这里插入图片描述
      我们可以根据 rownum 来取结果集的前几行,比如前 5 行
      在这里插入图片描述
      但是我们不能取到中间几行,因为rownum不支持大于号,只支持小于号,如果想实现我们的
      需求怎么办呢?答案是使用子查询,也正是oracle分页的做法。
    第一种写法:
    select *
    from 
    (select rownum rm, a.* from (select * from emp) a where rownum < 11) b 
    where b.rm > 5
    
    第二种写法:
    select *
    from (select rownum r ,emp.* from emp) b
    where b.r >5 and b.r <11
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载