Oracle学习————【子查询和集合运算】

1 子查询

  • 子查询所要解决的问题:不能一步求解

1.1 子查询的类型

单行子查询:查询只返回一条记录。
多行子查询:查询返回多条记录。

1.1.1 写子查询的时候需要注意的问题

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

SQL优化:在多表查询和子查询都能实现某个结果时,尽量使用多表查询,因为多表查询只select了一次,而子查询往往要select两次

1.2 单行操作符

在这里插入图片描述

1.3 多行操作符

在这里插入图片描述

1.3.1 in

下面是in的实例:
在这里插入图片描述

  • 如果是使用not in的话,子查询集合中不能有null值。

1.3.2 any

下面是any的使用实例
在这里插入图片描述

1.3.3 all

下面是all的使用实例。
在这里插入图片描述

2 集合运算

先看一个需求:
在这里插入图片描述

2.1 什么是集合运算?

在这里插入图片描述

  • 注意:这里的UNION和UNION ALL并不完全相等,UNION ALL是当A集和B集有相同的交集时,AB会都采用相同的那部分,交集部分就包含了两份。而UNION的话就只会维护一份共同集即可。

所以上面“查询10号和20号部门的员工”的SQL我们可以像以下这么写。
在这里插入图片描述

2.2 集合运算需要注意的问题

  1. 参与运算的各个集合必须列数相同且类型一致。
  2. 采用第一个集合作为最后的表头。
  3. order by永远放最后集合中写
  4. 集合运算的顺序可以使用括号来定。

在这里插入图片描述
SQL优化:尽量不要使用集合运算

2.3 SQL执行时间

SQL执行时间怎样来查看呢?
通过执行set timing on来将开关打开。再执行SQL就会显示执行时间了。

如果想关掉则执行set timing off。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值