该文章例子均使用数据库基础⑦中,关联关系模块所建的表。
一、子查询
1,基于列的子查询
在查询的列中,使用子查询,子查询要求必须返回单列,单值。
例:查询用户和上传的资源数量
select u.*,
(select count(1) from t_resource r where r.user_id = u.id)
from t_user u;
2,基于条件的子查询
关系条件子查询
返回单列单值
例:查询 大于平均年龄 的所有用户信息
select * from t_user
where age > (select avg(age) from t_user)
in子查询
必须返回 单列 多行(包括单行)
例:查询 每日最晚注册的用户信息
select * from t_user where create_time in
(
select max(create_time) from t_user group by
data_format(create_time,'%Y-%m-%d')
)
exists子查询
不需要返回具体的内容,只要存在即可
select * from t_user as t where exists
(
select * from
(select max(create_time) max from t_user group by date_format(create_time,'%Y-%m-%d')) as k
where k.max = t.create_time
)
二、嵌套查询
嵌套查询的意思是,一个查询语句的查询语句块可以嵌套在另外一个查询块的where子句中,称为嵌套查询。
所有上面介绍的基本都为嵌套查询
三、集合查询
- 并集 union , union all(union 会对重复的数据、进行去重, union all 是直接合并)
- 交集 intersect
- 差集 except