mysql_子查询

子查询指一个查询语句嵌套在另一个查询语句内部的查询

由一个具体的需求,引入子查询:

一.子查询的基本使用
>称谓的规范:外查询(或主查询)、内查询(或子查询)
> 子查询(内查询)在主查询之前一次执行完成。
> 子查询的结果被主查询(外查询)使用 。
注意事项:
1.子查询要包含在括号内
2.将子查询放在比较条件的右侧
3.单行操作符对应单行子查询,多行操作符对应多行子查询

子查询的分类
角度1:从内查询返回的结果的条目数
单行子查询 vs 多行子查询
角度2:内查询是否被执行多次
相关子查询 vs 不相关子查询
比如:相关子查询的需求:查询工资大于本部门平均工资的员工信息。
不相关子查询的需求:查询工资大于本公司平均工资的员工信息。
子查询的编写技巧(或步骤):① 从里往外写 ② 从外往里写

二.单行子查询
单行操作符: = != > >= < <=
HAVING 中的子查询:
> 首先执行子查询。
> 向主查询中的HAVING子句返回结果。
CASE中的子查询:
在CASE表达式中使用单列子查询

三.多行子查询
多行子查询的操作符: IN ANY ALL SOME(同ANY)
in: 属于子查询结果中的任意一个就行
any和all往往可以用其他查询代替
举例:

四.相关子查询
(上面写的案例都是不相关子查询)
1.相关子查询执行流程:
如果子查询的执行依赖于外部查询,通常情况下都是因为子查询中的表用到了外部的表,并进行了条件 关联,因此每执行一次外部查询,子查询都要重新计算一次,这样的子查询就称之为 关联子查询 。

2.代码示例

3.EXISTS 与 NOT EXISTS关键字

五.抛一个思考题
自连接和子查询两种方式有好坏之分吗?
自连接方式好!
理解:子查询实际上是通过未知表进行查询后的条件判断,而自连接是通过已知的自身数据表 进行条件判断,因此在大部分 DBMS 中都对自连接处理进行了优化。

六.练习