第七章 组合查询
组合查询也就是查询嵌套
练习:
1、查询入学年龄在18-20的女生或者未输入性别的,实际年龄小的要排在后面
SELECT * FROM t_stu WHERE s_age BETWEEN 18 AND 20 AND s_sex ='女' OR s_sex IS NULL ORDER BY YEAR(NOW(2012-04-26))-YEAR(s_birthday) DESC
2、查询班级名称、学生姓名、性别、缴费(要求显示单位:元),相同班级的要放在一起,姓名根据字典顺序排列。
SELECT s_c_id,(SELECT c_name FROM t_class WHERE c_id=s_c_id) 班级名称,s_name,s_sex,CONCAT(s_moeny,'元') 缴费 FROM t_stu ORDER BY s_c_id,s_name;
3、查询各班名称和人数
SELECT c_name,(SELECT COUNT(s_c_id) FROM t_stu WHERE s_c_id=c_id) FROM t_class
4、查询各班名称和人数,但人数必须不少于2,人数多的放在前面
SELECT c_name,(SELECT COUNT(s_c_id) FROM t_stu WHERE s_c_id=c_id) FROM t_class WHERE (SELECT COUNT(s_c_id) FROM t_stu WHERE s_c_id=c_id) >=2
5、查询1988年出生的有哪些学生。
SELECT s_name FROM t_stu WHERE s_birthday LIKE'1988%'
6、查询男生和女生人数,没有输入性别的当作男
SELECT s_sex,COUNT(s_name) FROM t_stu WHERE s_sex ='女'
UNION
SELECT s_sex,COUNT(s_name) FROM t_stu WHERE s_sex ='男'OR s_sex IS NULL
7、查询没有人员的班级。
SELECT c_name FROM t_class WHERE NOT EXISTS(SELECT s_id FROM t_stu WHERE s_c_id=c_id)
8、查询入学年龄在20以上(不包含20)的同学信息
SELECT (SELECT c_name FROM t_class WHERE s_c_id=c_id) 班级,s_name 姓名,s_sex 性别,s_birthday 出生日期,s_age 入学年龄,s_money 缴费 FROM t_stu WHERE s_age > 20
9、查询班级平均入学年龄在20以上的班级
SELECT c_name FROM t_class WHERE (SELECT AVG(s_age) FROM t_stu WHERE c_id=s_c_id ) >20