子查询
含义
- 子查询:出现在其他语句中的select语句,称为子查询或内查询
- 主查询:外部的查询语句,称为主查询或外查询
分类
- 按子查询出现的位置
①select后面,仅仅支持标量子查询;
②from后面,支持表子查询;
③where或having后面,支持标量子查询(单行)、列子查询(多行)、行子查询;
④exists后面(相关子查询),支持表子查询 - 按结果集的行列数不同
①标量子查询(结果集只有一行一列)
②列子查询(结果集只有一列多行)
③行子查询(结果集有一行多列)
④表子查询(结果集一般为多行多列,也可为一行一列、一列多行、一行多列)
where或having后面
1、标量子查询(单行子查询)
2、列子查询(多行子查询)
3、行子查询
- 特点
①子查询放在小括号内
②子查询一般放在条件的右侧
③标量子查询,一般搭配着单行操作符使用
补充:单行操作符:> < >= <= = <>
④列子查询,一般搭配着多行操作符使用
补充:in、any/some、all
⑤子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果
1、标量子查询
- 案例1
- 案例2(多个条件)
补充:多个条件用and连接 - 案例3(用到分组函数)
- 案例4(用到having)
2、列子查询(多行子查询)
补充:
①<any;>any
②<all相当于min();>all相当于max()
③in相当于=any;not in相当于<>all
- 案例1
- 案例2
- 案例3
3、行子查询(一行多列或多行多列)
- 案例1
补充:多个条件用相同的操作符表示,如以上案例用=操作符
select后面
- 案例1
from后面
- 案例1
exists后面(相关子查询)
- 语法:exists(完整的查询语句)
- 结果:1或0
- 特点:先进行主查询,在主查询的基础上进行子查询
- 案例1
- 案例2