超经典MySQL练习50题,做完这些你的SQL就过关了
IDE: IntellJ IDEA (可快速生成 Markdown)
第一题
SELECT 学生.s_id AS 编号, 学生.s_name AS 姓名, 学生.s_birth AS 生日, 学生.s_sex AS 性别, 成绩表01.s_score AS 课程01分数, 成绩表02.s_score AS 课程02分数FROM Student 学生JOIN Score 成绩表01ON 学生.s_id = 成绩表01.s_id AND 成绩表01.c_id = 01JOIN Score 成绩表02ON 学生.s_id = 成绩表02.s_id AND 成绩表02.c_id = 02WHERE 成绩表01.s_score > 成绩表02.s_score;
第二题
SELECT 学生.s_id AS 编号, 学生.s_name AS 姓名, 学生.s_birth AS 生日, 学生.s_sex AS 性别, 成绩表01.s_score AS 课程01分数, 成绩表02.s_score AS 课程02分数FROM Student 学生JOIN Score 成绩表01ON 学生.s_id = 成绩表01.s_id AND 成绩表01.c_id = 01JOIN Score 成绩表02ON 学生.s_id = 成绩表02.s_id AND 成绩表02.c_id = 02WHERE 成绩表01.s_score < 成绩表02.s_score;
第三题
SELECT 学生.s_id AS 编号, 学生.s_name AS 姓名, ROUND(AVG(成绩表.s_score), 2) as 平均成绩FROM Student 学生JOIN Score 成绩表ON 学生.s_id = 成绩表.s_idGROUP BY 学生.s_idHAVING 平均成绩 > 60;
附加题
SELECT 学生.s_id AS 编号, 学生.s_name AS 姓名, SUM(成绩表.s_score) as 总分FROM Student 学生JOIN Score 成绩表ON 学生.s_id = 成绩表.s_idGROUP BY 学生.s_idHAVING 总分 > 200;
第四题
SELECT 学生.s_id AS 编号, 学生.s_name AS 姓名, ROUND(AVG(成绩表.s_score), 2) as 平均成绩FROM Student 学生LEFT JOIN Score 成绩表 # 用 LEFT JOIN 才能取出平均成绩为 NULL 的学生ON 学生.s_id = 成绩表.s_idGROUP BY 学生.s_idHAVING 平均成绩 < 60 OR 平均成绩 IS NULL;
第五题
SELECT 学生.s_id AS 编号, 学生.s_name AS 姓名, COUNT(成绩表.c_id) AS 选课总数, SUM(成绩表.s_score) AS 总成绩FROM Student 学生LEFT JOIN Score 成绩表ON 学生.s_id = 成绩表.s_idGROUP BY 学生.s_id;
第六题
SELECT COUNT(老师.t_name) AS 个数FROM Teacher 老师WHERE 老师.t_name LIKE "李%";
第七题
因为张三老师教数学,这题换句话说,也就是在问哪些同学有修过数学,数学的 c_id 是 02,如果张三教多堂课就不适用了!
SELECT 学生.s_id AS 编号, 学生.s_name AS 姓名, 学生.s_birth AS 生日, 学生.s_sex AS 性别FROM Student 学生JOIN Score 成绩表ON 学生.s_id = 成绩表.s_idWHERE 成绩表.c_id = 02;
第八题
SELECT 学生.s_id AS 编号, 学生.s_name AS 姓名, 学生.s_birth AS 生日, 学生.s_sex AS 性别FROM Student 学生WHERE 学生.s_id NOT IN ( SELECT 成绩表.s_id FROM Score 成绩表 JOIN Course 课程 ON 成绩表.c_id = 课程.c_id WHERE 课程.t_id = ( SELECT 老师.t_id FROM Teacher 老师 WHERE 老师.t_name LIKE "张%" ));
第九题
SELECT 学生.s_id AS 编号, 学生.s_name AS 姓名, 学生.s_birth AS 生日, 学生.s_sex AS 性别FROM Student 学生JOIN Score 成绩表01ON 学生.s_id = 成绩表01.s_id AND 成绩表01.c_id = 01JOIN Score 成绩表02ON 学生.s_id = 成绩表02.s_id AND 成绩表02.c_id = 02
第十题
MySQL 没有差集语法 (╯•̀ὤ•́)╯
SELECT 学生.s_id AS 编号, 学生.s_name AS 姓名, 学生.s_birth AS 生日, 学生.s_sex AS 性别FROM Student 学生, Score 成绩表01WHERE 学生.s_id = 成绩表01.s_id AND 成绩表01.c_id = 01 AND 成绩表01.s_id NOT IN ( SELECT 成绩表02.s_id FROM Student 学生, Score 成绩表02 WHERE 学生.s_id = 成绩表02.s_id AND 成绩表02.c_id = 02);