**当一个查询是另一个查询的条件时,称之为子查询
子查询(按结果划分):
1.表子查询:多行多列 类似这种 select * from (select t1 from tab2 where id=1 ) 或者select id,name, (select one) as test from tab1
2.行子查询:一行多列
3.列子查询:多行一列
4.标量子查询:一行一列* 类似这种 select name from tab1 where id = 2;*
例如两个表tab1 tab2
tab1
id name age tab2_id
1 a 11 2
2 b 20 4
3 c 18 1
4 d 16 3
*
> tab2
> id is_adult Occupation t1
> 1 1 大学 tab1
> 2 0 小学 tab1
> 3 0 高中 tab1
> 4 1 大学 tab1
比较运算符中的子查询
select * from tab1 where age=(select max(age) from tab1);
使用in的子查询
例如 查找在读大学的人员姓名
select name from tab1 where tab2_id in(select id from tab2 where Occupation = ‘大学’)
*
使用any的子查询
定义 当某个操作数(字段)对于该列子查询的其中任一个值,都满足该比较运算符,则就算满足条件
例如
select * from tab1 where id> any(select id from tab2);
取出结果为
tab1
id name age tab2_id
2 b 20 4
3 c 18 1
4 d 16 3
只有tab1中 id值满足 大于 tab2中id其中的一个值,则条件成立
使用all的子查询
定义 当某个操作数(字段)对于该列子查询的其中所有值,都满足该比较运算符,则就算满足条件
例如
select * from tab1 where id>= any(select id from tab2);
运算结果
tab1
id name age tab2_id
4 d 16 3
some的子查询
与any 同义词