SQL中常常用到子查询去解决复杂的问题。子查询实则是一条完整的SQL语句。
1、子查询作为数据源
要求:求部门有多少个?
1.1、提取所有部门数据,然后去除重复
select distinct 部门 from [201$]
1.2、在1.1的生成的表格上对部门计数
select count(*)
from
(select distinct 部门 from [201$])
(select distinct 部门 from [201$])这是一个子查询,它是一条完整的sql语句。
在这里充当了过渡的数据源,用于后续的统计。
2、子查询作为条件
要求:求高于【评分】平均分的人员名单
2.1、先求平均分
select avg(评分) from [201$]
2.2、提取高于2.1生成的平均分的姓名
select 姓名 from [201$]
where 评分 >(select avg(评分) from [201$])
(select avg(评分) from [201$])这个子查询放在where充当条件。
又如:
提取F列人员的数据
首先,提取F列的数据
select 姓名 from [201$f1:f]
然后,在提取相应数据
select * from [201$a1:c]
where 姓名 in
(select 姓名 from [201$f1:f])
3、子查询作为字段
要求:生成一条总计的数据,包含人数和总评分。
select distinct '总计' as 部门总计,
(select count(姓名) from [201$a1:c]) as 人数,
(select sum(评分) from [201$a1:c]) as 总评分
from [201$a1:c]
(select count(姓名) from [201$a1:c]) as 人数,
(select sum(评分) from [201$a1:c]) as 总评分
上面两句代码都充当了字段。因为使用了聚合函数,所以,自定义的'总计'需要匹配聚合要求,使用了distinct。