专业试题:计算机考试关系数据库标准语言--SQL
公务员考试专用训练软件《公务员考试百宝箱》1.0版
对于下述3个关系:
S (S#, Sn, Sa, Sex)
C (C#, Cn, TEACHER)
SC (S#, C#, GRADE)
试用SQL的查询语句表达下列查询:
(1) 检索LIU老师所授课程的课程号和课程名。
SELECT C#, Cn
FROM C
WHERE TEACHER=’LIU’
(2) 检索年龄大于23岁的男学生的学号和姓名。
SELECT S#, Sn
FROM S
WHERE Sa>23 AND Sex=’男’
(3) 检索学号为S3学生所学课程的课程名和任课老师。
方法一:
SELECT Cn, TEACHER
FROM C
WHERE C# IN
(SELECT C#
FROM SC
WHERE S#=’S3’)
方法二:
SELECT Cn, TEACHER
FROM C, SC
WHERE C.C#=SC.C# AND SC.S#=’S3’
方法三:
SELECT Cn, TEACHER
FROM C
WHERE EXISTS
(SELECT *
FROM SC
WHERE SC.C#=C.C# AND S#=’S3’)
公务员考试专用训练软件《公务员考试百宝箱》1.0版
公务员考试专用训练软件《公务员考试百宝箱》1.0版
(6) 检索至少选修两门课程的学生学号。
方法一:
SELECT DISTINCT S1.S#
FROM SC AS SC1, SC AS SC2
WHERE SC1.S#=SC2.S# AND SC1.C#!=SC2.C#
方法二:
SELECT S#
FROM SC
GROUP BY S#
HAVING COUNT(*)>=2
(7) 检索全部学生都选修的课程的课程号和课程名。
方法一:
SELECT C#, Cn
FROM C
WHERE NOT EXISTS
(SELECT *
FROM S
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE SC.S#=S.S# AND SC.C#=C.C#)
)
方法二:
SELECT C#, Cn
FROM C
WHERE NOT EXISTS
(SELECT *
FROM S
WHERE S# NOT IN
(SELECT S#
FROM SC
WHERE SC.C#=C.C#)
方法三:
SELECT C#, Cn
FROM C
WHERE C# IN
(SELECT C#
FROM SC
GROUP BY C#
HAVING COUNT(*)=
(SELECT COUNT(*)
FROM S
)
公务员考试专用训练软件《公务员考试百宝箱》1.0版
(8) 检索选修课程中包含LIU老师所授课程的学生学号
方法一:
SELECT DISTINCT S#
FROM SC
WHERE C# IN
(SELECT C#
FROM C
WHERE TEACHER=’LIU’)
方法二:
SELECT DISTINCT S#
FROM SC
WHERE EXISTS
(SELECT *
FROM C
WHERE C.C#=SC.C# AND TEACHER=’LIU’)
方法三:
SELECT DISTINCT S#
FROM SC, C
WHERE SC.C#=C.C# AND C.TEACHER=’LIU’
10.试用SQL查询语句表达下列对教学数据库3个基本表S,C,SC的查询.
S(S#, Sn, Sa, Sex)
C(C#, Cn, TEACHER)
SC(S#, C#, GRADE)
(1)在表C中统计开设课程的教师人数.
(2)求选修C4课程的女学生的平均年龄.
(3)求每个学生都选修课程(已有成绩)的门数和平均成绩.
(4)统计每个学生选修课程的门数(超过5门的学生才统计).要求输出学生学号和选修门数,查询结果按门数降序排列,若门数相同,按学号升序排列.
(5)检索学号比WANG同学大,而年龄比他小的学生姓名.
(6)在表SC中检索成绩为空值的学生学号和课程号.
(7)检索姓名以L开头的所有学生的姓名和年龄.
(8)求年龄大于女同学平均年龄的男学生姓名和年龄.
(9)求年龄大于所有女同学年龄的男学生的姓名和年龄.
公务员考试专用训练软件《公务员考试百宝箱》1.0版
参考答案:
(1)在表C中统计开设课程的教师人数.
Select Count(distinct TEACHER)
from C
(2)求选修C4课程的女学生的平均年龄.
Select AVG(SA)
from S
where Sex=0 and S# in
(select S#
from SC
where C#='C4')
(3)求每个学生都选修课程(已有成绩)的门数和平均成绩.
Select S#, AVG(GRADE), COUNT(C#)
from SC
Group by S#
(4)统计每个学生选修课程的门数(超过5门的学生才统计).要求输出学生学号和选修门数,查询结果按门数降序排列,若门数相同,按学号升序排列.
Select COUNT(C#), S#
from SC
GROUP BY S#
HAVING COUNT(*)>5
ORDER BY COUNT(*) DESC, SC.S# ASC
(5)检索学号比WANG同学大,而年龄比他小的学生姓名.
方法一:
Select Sn
from S
where S.S#>(select S1.S#
from S as S1
where S1.Sn='WANG')
and S.Sa< ( select S2.Sa
from S as S2
where S2.Sn='WANG')
方法二:
Select Sn
from S as S1
where Exists (select *
from S as S2
where S2.Sn='WANG') and S1.S#>S2.S#
and S1.Sa