本节主要讲述子查询的概念
子查询
- 概念
- 子查询简单理解就是在sql中嵌套了select查询子句。
- 更官方一点理解就是如果一个select语句能过返回单个值或者一列值,且该select语句嵌套在另一个SQL语句(例如select语句、insert语句、update语句或者delete语句中)中,那么该select语句就称为“子查询”,子查询也叫内层查询。
- 包含查询子句的SQL语句称为“主查询”,也叫外层查询。
- 子查询的优点在于它的可读性会比较高(相比写join和union)
- 分类
- 按位置分
- where 子查询:子查询在where条件中
- from 子查询:子查询在from后面
- exists子查询:子查询在exists中
- 按查询结果分为
- 标量子查询:查询结果有一行一列
- 列子查询:查询结果有一列多行
- 行子查询:查询结果有一行多列或多行多列
- 表子查询:查询结果有多行多列并且出现的位置在from之后
- 按是否相关分类
- 相关子查询:执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。
- 非相关子查询:独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。
- 按位置分
- tips
- 为了标记子查询与主查询之间的关系,通常将子查询写在小括号内。就像这样:
mysql> select cust_id from orders where order_num in (
-> select order_num from orderitems where prod_id = 'TNT2');
如果想看其他有关于MySQL数据库的文章,请跳转到到MySQL自学目录