最开始命名错了,试着RENAME但失败了,看官方manual似乎5.6 ver. MySQL已经去掉了这个功能。
好吧直接drop再新建……接着是练习:
1)查询班级信息以及每个班级里年龄最大的学生姓名和年龄
SELECT class.class_id, class.class_name, tb_student.`name`, tb_student.ageFROM tb_class AS classLEFT JOIN tb_student ON class.class_id = tb_student.class_idGROUP BY tb_student.class_id;HAVING MAX(tb_student.age)
2)查询班级信息以及每个班级里男生人数,女生人数,总人数
SELECTclass_id, class_name,(SELECT COUNT(*) FROM tb_student WHERE sex=1 AND class.class_id=tb_student.class_id)AS female,(SELECT COUNT(*) FROM tb_student WHERE sex=2 AND class.class_id=tb_student.class_id)AS maleFROMtb_class AS class;
3)查询班级信息以及每个班级里成绩最高的学生姓名,总成绩
SELECT class.class_id,class.class_name,info.`name`,info.sumscoreFROM tb_class classLEFT JOIN( SELECT stu.`name`,stu.class_id id, (SELECT SUM(score.score) FROM tb_score score WHERE stu.stu_id=score.stu_id ) sumscore FROM tb_student stu GROUP BY stu.class_id HAVING MAX(sumscore))info ON info.id = class.class_id;
4)查询学生信息以及每个学生每个课程的成绩
SELECTstu.`name`,(SELECT score.score FROM tb_score score WHERE score.course_id=1 AND score.stu_id=stu.stu_id) php,(SELECT score.score FROM tb_score score WHERE score.course_id=2 AND score.stu_id=stu.stu_id) mysqlFROMtb_student stu;
有种回到学校做practice的感觉……其实各种条件的设置感觉实现就分两种,一种是直接SELECT下在分子区域SELECT,但是一个SELECT只能包含one column,所以当需要retrieve更多column时需要用LEFT JOIN
到3)就总也做不出来,要查找成绩最高,之前还要SUM一次,有点不知该如何下手,但是逻辑上肯定是SUM先行,所以是SELECT SUM(sco.score)用WHERE限定一下stu.id加出学生的总成绩,然后GROUP BY class.id 把学生按班分组最后用HAVING MAX() ,然后就retrieve出来了!