oracle——子查询

注意的问题:

1.括号
2.合理的书写风格
3.可以在主查询的where select having from 后面使用子查询
4.不可以在group by 使用 子查询
5.强调from 后面 的子查询
6.主查询和子查询可以不是同一张表:只有子查询返回的结果 主查询可以使用
7.一般不在子查询中排序 但在top-n分析问题中 必须对子查询排序
8.一般先执行 子查询,再执行 主查询,但相关子查询除外
9.单行子查询只能使用单行操作符 多行子查询只能使用多行操作符
10,子查询中null

查询某某前多少数据 row_number() over (partition col1 order by col2 )rn
rownum伪列

ROW_NUMBER()函数将针对SELECT语句返回的每一行,从1开始编号,赋予其连续的编号。在查询时应用了一个排序标准后,只有通过编号才能够保证其顺序是一致的,当使用ROW_NUMBER函数时,也需要专门一列用于预先排序以便于进行编号。

ROW_NUMBER()

说明:返回结果集分区内行的序列号,每个分区的第一行从1开始。
语法:ROW_NUMBER () OVER ([ <partition_by_clause> ] <order_by_clause>) 。
备注:ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。
参数:<partition_by_clause> :将 FROM 子句生成的结果集划入应用了 ROW_NUMBER 函数的分区。
<order_by_clause>:确定将 ROW_NUMBER 值分配给分区中的行的顺序。
返回类型:bigint 。

用伪列rownum进行分页
select *from(select rownum r,empno
from (select * from emp order by sal desc) e1
where rownum<=8) e2
where r>=2

例子
  1. 查询工资比scott高的员工信息
    eg:
    在这里插入图片描述
  2. from后面进行子查询
    在这里插入图片描述
  3. .主查询和子查询可以不是同一张表:只有子查询返回的结果 主查询可以使用
    eg:查询部门是SALES的员工信息
    使用子查询
    在这里插入图片描述
    使用多表查询
    在这里插入图片描述
    对于sql优化来说,应该用多表查询代替子查询
  4. 单行子查询只能使用单行操作符 多行子查询只能使用多行操作符,多行操作符:in,any,all
    eg:查询部门名称是SALES和ACCOUNTING的员工
    子查询方式
    在这里插入图片描述
    多表查询方式
    在这里插入图片描述
    any :和集合中的任意一个值比较(只需要比其中一个值大或者小或者等于,有点像or)
    eg:查询工资比30号部门任意一个员工高的员工信息
    大于最小值即可
    在这里插入图片描述
    all :和集合中的所有值比较 (与每一个值比较,都为ture才行,类似于and)
    查询工资比30号部门所有员工高的员工信息
    比最大值还要大即可
    在这里插入图片描述
  5. 子查询中null (null 在运算中都为null,所以不能使用 not in)
    查询不是老板的员工信息
    因为KING的mgr字段为null,所以下面的语句查询不出信息
    在这里插入图片描述
    改变写法

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值