查询问题:设教学数据库 Education 有三个关系:
学 生 关 系
S(SNO,SNAME,AGE,SEX,SDEPT);学习关
系 SC ( SNO , CNO , GRADE ) ; 课 程 关 系
C(CNO,CNAME,CDEPT,TNAME)
(1)检索计算机系的全体学生的学号,姓名和性
别;
(2)检索学习课程号为 C2 的学生学号与姓名;
(3)检索选修课程名为“DS”的学生学号与姓名;
(4)检索选修课程号为 C2 或 C4 的学生学号;
(5)检索至少选修课程号为 C2 和 C4 的学生学
号;
(6)检索不学 C2 课的学生姓名和年龄;
(7)检索学习全部课程的学生姓名;
(8)查询所学课程包含学生 S3 所学课程的学生学号。
(1)检索计算机系的全体学生的学号,姓名和性
别;
SELECT Sno,Sname,Sex
FROM S
WHERE Sdept =’CS’;
(2)检索学习课程号为 C2 的学生学号与姓名;
(3)检索选修课程名为“DS”的学生学号与姓名
本查询涉及到学号、姓名和课程名三个属性,
分别存放在 S 和 C 表中,但 S 和 C 表没有直接联系,
必须通过 SC 表建立它们二者的联系。 C → SC → S
基本思路:
(1)首先在 C 表中找出“DS”课程的课程号 Cno;
(2)然后在 SC 表中找出 Cno 等于第一步给出的
Cno 集合中的某个元素 Cno;
(3)最后在 S 关系中选出 Sno 等于第二步中 Sno
集合中某个元素的元组,取出 Sno 和 Sname 送入结
果表列。
SELECT Sno,Sname
FROM S
WHERE Sno IN
(SELECT Sno
FROM SC
WHERE Cno IN
(SELECT Cno
FROM C
WHERE Cname=‘DS’));
(4)检索选修课程号为 C2 或 C4 的学生学号;
SELECT Sno
FROM SC
WHERE Cno=‘C2’ OR Cno=‘C4’;
(5)检索至少选修课程号为 C2 和 C4 的学生学
号;
SELECT Sno
FROM SC X,SC Y
WHERE = AND =‘C2’ AND =‘C4’ ;
(6)检索不学 C2 课的学生姓名和年龄;
(7)检索学习全部课程的学生姓名;
在表 S 中找学生,要求这个学生学了全部课程。换
言之,在 S 表中找学生,在 C 中不存在一门课程,这
个学生没有学。
SELECT Sname
FROM S
WHERE NOT EXISTS
(SELECT *
FROM C
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE = AND =));
(8)查询所学课程包含学生 S3 所学课程的学生
学号。
分析:不存在这样的课程 Y,学生 S3 选了 Y,而
评论0
最新资源