1. 使用SQL语句完成以下查询。
(1) 查询成绩高于学号为“141002”的所有选修课成绩的学生学号、课程号和成绩。
SELECT Sno, Cno, Grade
FROM SC
WHERE Grade > ALL(
SELECT Grade
FROM SC
WHERE Sno = 141002
)
(2) 查询课程号101的成绩高于课程号204成绩的学生的学号、课程号、成绩。
SELECT Sno 学号, Cno 课程号, Grade 成绩
FROM SC
WHERE Cno=101 AND Grade >= ANY (
SELECT Grade
FROM SC
WHERE Cno=204
)
(3) 查询选修了“英语”的学生人数。
SELECT COUNT(Grade) AS 学生人数
FROM SC
JOIN C
ON C.Cno = SC.Cno
WHERE C.Cname = '英语'
GROUP BY C.Cno
(4) 查询至少有3名学生选修且课程号中含有1的课程号及该门课程的平均分。
SELECT Cno 课程号, COUNT(Cno) AS 选修人数, avg(Grade) AS 平均分
FROM SC
WHERE Cno LIKE '%1%'
GROUP BY Cno
HAVING COUNT(Cno) > 3
(5) 查询不同课程中成绩优秀(>=85分)的人数,查询结果显示课程号、优秀人数。
SELECT Cno 课程号, COUNT(Cno) 优秀人数
FROM (
SELECT *
FROM SC
WHERE Grade > 85
) S
GROUP BY Cno
(6)查询总分排名第一的学生的信息,查询结果显示学号和总分。
SELECT TOP 1 Sno 学号, SUM(Grade) 总分
FROM SC
GROUP BY Sno
ORDER BY SUM(Grade) DESC
(7) 在C表里插入一条记录(‘303’,’数据结构’,’张毅’),查询课程的被选修情况。(要求:不管该课程有没有被学生选修,都要显示该课程的课程名、选修该课程的学生的学号)
INSERT INTO C VALUES ('303','数据结构','张毅')
SELECT Cname, Sno
FROM C
LEFT OUTER JOIN SC
ON SC.Cno = C.Cno
2. 集合操作:
(1) 使用交集查询完成:查询女生且年龄小于22岁的的基本信息。
SELECT * FROM S WHERE Sex='女'
INTERSECT
SELECT * FROM S WHERE Age < 22
(2) 使用差集查询完成:查询女生且年龄小于22岁的的基本信息。
SELECT * FROM S WHERE Sex='女'
EXCEPT
SELECT * FROM S WHERE Age >= 22
(3) 使用集合查询完成:查询选修了“101”以及“204”课程的学生的学号、课程号。
SELECT Sno, Cno FROM SC WHERE Cno = 101
UNION
SELECT Sno, Cno FROM SC WHERE Cno = 204