数据库查询语句--子查询

子查询就是在查询语句中插入查询语句形成条件要什么,子查询就写什么

语法:

select 列名 from 表名 where 列名 in (select子查询语句);
或者
select 列名 from 表名 where 列名 = (select子查询语句);

比如我们要查询一个学生表中各个专业的第一名的学生的信息,我们要先知道每个专业的最高分,在根据最高分查询学生的信息,每个专业的最高分就是子查询,也就是条件。

例如:在下表中列出每个学院最高分的学生的信息

1.先得出各学院分数最高的是多少

select dept,max(score) fs from s1 group by dept

2.再把表中的列简化

select ss.fs from (select dept,max(score) fs from s1 group by dept) ss

3.列出分数等于最高分的学生的信息

select * from s1 where score in (select ss.fs from (select dept,max(score) fs from s1 group by dept) ss);

注:如果出现说明你把子查询结果当表进行查询时忘记添加别名了,只要添加别名就可以了。

我们也常用子查询统计信息,比如用当前表统计优秀(>90),良好(>=80),及格(>=60)和补考的学生人数时就可以通过子查询统计出

-- 学生成绩划分等级 优秀,良好,及格,补考
-- 子查询

select ss.level ,count(1)from (select id,name,score,if(score>90,优秀,if(score>=80,良好,if(score>=60,及格,补考))) level from s1
) ss group by ss.level;
经验分享 程序员 微信小程序 职场和发展