1、子查询
定义:在增删改查的语句中嵌套一个select查询,就是子查询。子查询的结果或者值参与到整个语句的执行过程中。
执行规则:有里到外,先执行最里面的子查询,再执行外则的语句。
单行子查询:只返回一行结果
运算符:= != > < >= <=
案例1:查询所有江汉路商品信息
案例2:查询大于食品类商品最高团购价的商品信息
2、多行子查询
结果有多行数据
运算符:in all any|some
in:包含
案例:查找江汉路和江汉区的商品信息
exists:检测数据是否存在,返回true或者false,exists后的子查询不返回任何数据
案例:查找江汉路和江汉区的商品信息
注意:数据量小的时候,in和exists没有区别,推荐使用in;数据量大的时候,exists执行效率高于in。
all:全部
>all:大于最大值
<all:小于最小值
案例:查询大于所有食品类商品团购价的商品信息
any|some:任意
>any:大于最小值
<any:小于最大值
=any:与in相同
案例:查询大于食品类商品团购价的商品信息
3、子查询非典型应用
from后面:子查询结果当作一张临时表
select后面:子查询的结果当作一列展示
案例1-from:查看所有商品的单价和同类商品的平均单价
案例-select:查询商品名称、单价以及类别名称
4、在DML中使用
在增删改中使用子查询
案例1:修改所有食品类的单价,打八折
案例2:添加一个食品类商品
案例3:删除食品类商品
总结:
单行子查询:= != > < >= <=
多行子查询:in all any|some exists
非典型应用:from后面、select后面
DML中应用:增删改中使用
注意:当子查询的数据量大,而主查询的数据量少的时候,使用子查询效率高;反之,子查询的数据量少,而主查询的数据量大的时候,使用连接查询效率高。