MySQL(1) 子查询
SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。
子查询外部的语句可以是 INSERT / UPDATE / DELETE / SELECT 的任何一个
根据子查询结果可以分为:
- 标量子查询(子查询结果为单个值)
- 列子查询(子查询结果为一列)
- 行子查询(子查询结果为一行)
- 表子查询(子查询结果为多行多列)
根据子查询位置可分为:
WHERE 之后
FROM 之后
SELECT 之后
例如查询所有部门信息并统计部门人数
```sql
select d.id, d.name, (select count(*) from emp e where e.dept_id = d.id
) ‘人数’
from dept d;1
2
3
4
5
6
7
8
9
10
11
12
13
### 标量子查询
子查询返回的结果是单个值(数字、字符串、日期等)
常用的操作符:`= <> > >= < <=`
```sql
-- 查询销售部所有员工
select * from employee where dept = (select id from dept where name = '销售部');
-- 查询xxx入职之后的员工信息
select * from employee where entrydate > (select entrydate from employee where name = 'xxx');
列子查询
返回的结果是一列(可以是多行)
常用的操作符:
IN
: 在指定的集合范围内,多选一NOT IN
: 不在指定的集合范围内ANY
: 子查询返回列表中,有任意一个满足即可SOME
: 与ANY等同,使用SOME的地方都可以使用ANYALL
: 子查询返回列表的所有值都必须满足
1 |
|
行子查询
返回的结果是一行(可以是多列)
常用的操作符:=, <>, IN, NOT IN
1 |
|
表子查询
返回的结果是多行多列, 常用于 FROM 之后
常用的操作符:IN
1 |
|