子查询
出现在其他语句中的select语句,成为子查询或内查询
外部出现的查询语句,称为主查询或外查询
分类
按子查询出现的位置:
select后:(仅仅支持标量子查询)
from后面(支持表子查询)
where或者having后(支持标量子查询、列子查询、行子查询)
exists后(相关子查询)(支持表子查询)
按功能不同(结果集的行列数不同):
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集有多行多列)
表子查询(结果集多行多列)
一、where或having后面
1、标量子查询(单行子查询)
2、列子查询(多行子查询)
3、行子查询(多行多列)
特点
1、子查询放在小括号内
2、子查询一般放在条件右侧
3、表量子查询一般搭配单行操作符<>>= <= <>
列子 查询一般搭配多行操作符使用:in,any/some,all
4、子查询优先于主查询
1、标量子查询
查询结果是一行一列
2、列子查询
用多行子查询(或者列子查询)需要搭配多行比较操作符使用
常见的多行比较操作符:
IN/NOT IN 等于列表中的任意一个 ※重要
ANY/SOME 和子查询返回的某一个值比较
ALL 和子查询返回的所有值比较
3、行子查询
二、放 select后
一般可以被其它代替,弱化
一般select仅仅支持表量子查询
三、from后面
将子查询结果充当一张表,要求必须起别名
四、放在exists后面(相关子查询)
Boolean类型,只能查询有没有(结果0/1)
语法:
exists(完整的查询语句)
结果:
0或1
能用exists查询的一般都可以被其他替代,所以不常用
能用exists的一定可以用in