在 SQL 的学习过程中,单表查询是非常重要的基础部分,下面为大家分享一些单表查询的练习题以及对应的正确答案,希望能帮助大家更好地掌握相关知识。
一、题目及答案详情
1. 查询课程表中,没有前序课程的课程信息,查询结果显示课程编号、课程名称和学时数
正确答案:
收起
sql
SELECT Cno, Cname,Chours
FROM COURSES
WHERE Pre_Cno IS NULL;
2. 查询选课表中,每个学年都有哪些课程被学生选中,查询结果显示选课学年,课程号,按选课学年升序排序,要求属性列用中文显示
正确答案:
收起
sql
SELECT DISTINCT Racademicyear AS "选课学年", Cno AS "课程号"
FROM Reports
ORDER BY Racademicyear;
3. 查询 “11” 学院中,来自山东的学生的信息,查询结果显示学生的学号、姓名、专业编号和生源地
正确答案:
收起
sql
SELECT Sno, Sname, Mno, Snative
FROM Students
WHERE Dno='11' AND Snative LIKE '山东%';
4. 查询学生的名字中带个 “一” 字的学生信息,查询结果显示学生的学号、姓名、性别和班级编号
正确答案:
收起
sql
SELECT Sno, Sname, Sgender, Sclass
FROM Students
WHERE Sname LIKE '%一%';
5. 查询选课表中,在 2014 学年到 2016 学年期间,成绩达到优秀(大于等于 90)的学生的学号、课程号及成绩,按学号降序排序
正确答案:
收起
sql
SELECT Sno, Cno, Grade
FROM Reports
WHERE Racademicyear BETWEEN 2014 AND 2016 AND Grade >= 90
ORDER BY Sno DESC;
6. 统计一下 “11” 学院中,各个专业在各个月份出生的学生人数,查询结果显示专业编号、出生月份和学生人数,按专业编号升序、月份升序排序,并用中文显示属性列名
正确答案:
收起
sql
SELECT Mno AS "专业编号", MONTH(Sbirth) AS "出生月份", COUNT(*) AS "学生人数"
FROM Students
WHERE Dno='11'
GROUP BY Mno,MONTH(Sbirth)
ORDER BY Mno,MONTH(Sbirth);
7. 统计一下 “11” 学院中的教授和讲师的人数,查询结果显示学院编号、职称和教师人数,按职称降序排序,并用中文显示属性列名
正确答案:
收起
sql
SELECT Dno AS "学院编号", Tprof AS "职称", COUNT(*) AS "教师人数"
FROM Teachers
WHERE Dno='11' AND Tprof IN ('教授', '讲师')
GROUP BY Dno,Tprof
ORDER BY Tprof;
8. 查询 2017 学年上课门数排名前三的教师,查询结果显示教师编号、上课次数(给不同班上同一门课程算不同次数),并用中文显示属性列名
正确答案:
收起
sql
SELECT Tno AS "教师编号",COUNT(*) AS "上课次数"
FROM Tutors
WHERE Tacademicyear=2017
GROUP BY Tno
ORDER BY COUNT(*) DESC
LIMIT 3;
9. 查询选修的各门课程成绩都在 75 分以上的学生信息,查询结果显示学生的学号、最高分、最低分和平均成绩,按平均成绩降序排序,并用中文显示属性列名
正确答案:
收起
sql
SELECT Sno AS "学号", MAX(Grade) AS 最高分, MIN(Grade) "最低分", AVG(Grade) AS "平均成绩"
FROM Reports
GROUP BY Sno
HAVING MIN(Grade)>=75
ORDER BY AVG(Grade) DESC;
通过对比这些练习题目的自己的思路与正确答案,可以发现一些容易犯错或者需要重点注意的地方,比如条件判断中的细节(像 LIKE 语句的使用、BETWEEN 的范围界定等),以及一些聚合函数使用时配合 GROUP BY、HAVING 等子句的正确用法等,希望大家能认真分析总结,提升自己的 SQL 单表查询能力。