子查询
通过select
的查询值来作为一个查询的条件
类型 | 结果(子查询的返回值) |
---|---|
标量子查询 | 单行单列 |
列子查询 | 单行多列 |
行子查询 | 多行单列 |
表子查询 | 多行多列 |
标量子查询
返回值为一个值,所以只需要=
就行
select *
from tb_emp
where dept_id = (select id from tb_dept where name = '教研部') ;
列子查询
返回值是一个字段的多个值,使用in
替换标量的=
就行
select *
from tb_emp
where dept_id in (select id
from tb_dept
where name = '教研部' or name = '学工部') ;
这样就可以查到tb_dept
表中name
字段等于学工部
或者教研部
的人。
行子查询
返回值是一个多字段单值,需要列表与列表比较
select *
from tb_emp
where (job, dept_id) in (select job, dept_id from tb_emp where name = 'XXX') ;
查询这张表里工作和部门和XXX相同的人。
表子查询
返回值是一张临时表,给临时表起别名,可以在本次语句里当正常表使用,
select e.*, d.name
from (select * from tb_emp where entrydate > '2006-01-01') e, tb_dept d
where e.dept_id = d.id;
PS.一定要起别名!