本公众号使用SQL SERVER2014测试。SQL语句可能因数据库系统不同而存在少许差异。
测试数据请参照第一章节,各表查询结果如下图:

练习题目
21. 查询男生、女生人数
22. 查询名字中含有「风」字的学生信息
23. 查询同名同性学生名单,并统计同名人数
24. 查询 1990 年出生的学生名单
25. 查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列
26. 查询平均成绩大于等于 85 的所有学生的学号、姓名和平均成绩
27. 查询课程名称为「数学」,且分数低于 60 的学生姓名和分数
28. 查询所有学生的课程及分数情况(存在学生没成绩,没选课的情况)
29. 查询任何一门课程成绩在 70 分以上的姓名、课程名称和分数
30. 查询不及格的课程
参考答案
--------------------------------------------------------
--21. 查询男生、女生人数
select Ssex,count(*) as 人数from Student group by Ssex
输出结果

--22. 查询名字中含有「风」字的学生信息
select *from Studentwhere Sname like '%风%'
输出结果

--23. 查询同名同性学生名单,并统计同名人数
select t1.*,t2.同名人数from student t1 LEFT JOIN (select Sname,Ssex,COUNT(*)同名人数 from Student group by Sname,Ssex) as t2on t1.Sname =t2.Sname and t1.Ssex=t2.Ssexwhere t2.同名人数>1
输出结果

--24. 查询 1990 年出生的学生名单
select *from Studentwhere Sagebetween '1990-01-01 00:00:00.000' and '1991-01-01 00:00:00.000'
或
select *from studentwhere YEAR(student.Sage)=1990
输出结果

--25. 查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列
select CId,avg(score) as 平均成绩from SCgroup by CIdorder by avg(score) desc ,CId
输出结果

--26. 查询平均成绩大于等于 85 的所有学生的学号、姓名和平均成绩
select t1.SId,t1.Sname,t2.avgsfrom student t1,(select sc.sid,avg(score) as avgs from sc group by sid having avg(score)>=85)t2where t1.SId=t2.SId
输出结果

--27. 查询课程名称为「数学」,且分数低于 60 的学生姓名和分数
select t1.Sname,t2.scorefrom student t1,(select sc.sid ,sc.score from Course,sc where Course.CId=sc.CId and Course.Cname='数学' and sc.score<60) t2where t1.sid =t2.sid
输出结果

--28. 查询所有学生的课程及分数情况(存在学生没成绩,没选课的情况)
select t1.SId,t1.Sname,t2.CId,t2.scorefrom Student t1 left join SC t2on t1.SId =t2.SId
输出结果


--29. 查询任何一门课程成绩在 70 分以上的姓名、课程名称和分数
select t1.Sname,t3.Cname,t2.scorefrom Student t1,sc t2 ,Course t3where t2.score>=70andt1.SId=t2.SIdand t2.CId=t3.CId
输出结果

--30. 查询不及格的课程
select distinct sc.CId from sc where score<60
输出结果

如果觉得对您有一丢丢帮助,请点击右下角【在看】,让更多人看到该文章。



长按识别二维码
关注获取视频资料
本文分享自微信公众号 - SQL数据库入门学习,如有侵权,请联系 service001@enmotech.com 删除。




