课程C(CNO,CN,PCNO) PCNO为直接先行课号 选课SC(SNO,CNO,GR) GR为课程考试成绩 用SQL写出查询程序:
选修课程“DB”的学生姓名SN。 方法1. SELECT SN FROM S
WHERE SNO IN ( SELECT SNO
FROM SC
WHERE CNO IN ( SELECT CNO FROM C
WHERE CN = ‘DB’ )方法2. SELECT SN FROM S, SC, C WHERE =
AND =
AND CN = “DB”;
2. 关系数据模型如下: 学生S(SNO,SN,SEX,AGE)
课程C(CNO,CN,PCNO) PCNO为直接先行课号 选课SC(SNO,CNO,GR) GR为课程考试成绩 用SQL写出查询程序:
查询课程名和它的直接先行课的课程名以及它的间接先行课的课程名。SELECT CN, , FROM C,C CX,C CY WHERE =
AND =
[例41]找出每个学生超过他选修课程平均成绩的课程号。 SELECT Sno,Cno
习题
/* = */
);
FROM SC x
WHERE Grade >= ( SELECT AVG(Grade)
FROM SC y
WHERE = ); 3. 关系数据模型如下 P84 例 学生S(SNO,SN,SEX,AGE)
课程C(CNO,CN,PCNO) PCNO为直接先行课号 选课SC(SNO,CNO,GR) GR为课程考试成绩 用SQL写出查询程序: 所有学生都选修的课程名CN。 方法1.
SELECT CN FROM C
WHERE NOT EXISTS
( SELECT *
FROM S
WHERE NOT EXISTS
( SELECT *
FROM SC WHERE SNO=
AND CNO=;
变换后语义:不存在这样的学生x,该学生没有选修P。
(?x)P ≡ ? (? x(? P))
方法2. SELECT CN FROM C
WHERE CNO IN ( SELECT CNO
FROM SC GROUP BY CNO
HAVING COUNT(*) = ( SELECT COUNT(*) FROM S ));
[例46] 查询选修了全部课程的学生姓名。 SELECT Sname FROM Student
WHERE NOT EXISTS (SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno= AND Cno= ) );
变换后语义:不存在这样的课程x,该学生没有选修P。 4. 假设学生一课程数据库关系模式如下: Student(Sno,Sname,Sage,Ssex); Course(Cno,Cname,Teacher); SC(Sno,Cno,Grade)。 用SQL语句表达下列查询:
(1) 找出刘老师所授课程的课程号和课程名; (2) 找出年龄小于22岁的女学生的学号和姓名。 1. SELECT Cno,Cname FROM Course
WHERE Teacher LIKE “刘%” /* % _ */2. SELECT SNO, SNAME
FROM Student
WHERE SAGE<22 AND SSEX =’女’ 5. 假设学生一课程数据库关系模式如下: Student(Sno,Sname,Sage,Ssex); Course(Cno,Cname,Teacher); SC(Sno,Cno,Grade)。 用SQL语句表达下列查询:
(1) 找出至少选修刘老师讲的一门课的学生姓名; (2) 找出“程序设计”课成绩在90分以上的学生的姓名; (3) 检索至少选修了课程号为‘C1和‘C3’的学生号。 答案
1. SELECT SNAME
FROM STUDENT, SC, COURSE WHERE = AND =
AND TEACHER LIKE “刘%”
2. SELECT SNAME
FROM STUDENT, SC, COURSE WHERE =
AND =
AND CNAME =”程序设计” AND GRADE > 90
3. SELECT Sno 教科书:P80*** 例
FROM SC SC1, SC SC2 WHERE = AND =’C1’ AND =’C3’
[例51] 查询既选修了课程1又选修了课程2的学生 SELECT Sno FROM SC
WHERE Cno=' 1 ' AND Sno IN (SELECT Sno FROM SC
WHERE Cno=' 2 ');
SELECT Sno FROM SC
WHERE Cno=’C1’ OR Cno=’C3’ /* AND */
6. 假设学生一课程数据库关系模式如下: Student(Sno,Sname,Sage,Ssex); Course(Cno,Cname,Teacher); SC(Sno,Cno,Grade)。 用SQL语句表达下列查询:
(1)求孙老师讲的每门课的学生平均成绩;
(2)统计选修各门课的学生人数。输出课程号和人数。查询结果按人数降序排列,若人数相同,则按课程升序排列 答案
1. SELECT CNO, AVG(GRADE) !!!!!!!!! FROM SC, COURSE
WHERE = AND TEACHER LIKE “孙老师”
GROUP BY CNO 2. SELECT CNO, COUNT(*) FROM SC
GROUP BY CNO
OREDR BY COUNT(*) DESC, CNO 7. 假设学生一课程数据库关系模式如下: Student(Sno,Sname,Sage,Ssex); Course(Cno,Cname,Teacher); SC(Sno,Cno,Grade)。
用SQL的更新语句表达对数据库的下列更新操作:
(1)向学生关系Student中插入一个学生元组(990012,梅立松,20,女)。 (2)从学生选课关系SC中删除夏春秋同学的所有元组。 (3)在学生选课关系SC中,把英语课的成绩提高10%。 答案
1. INSERT INTO STUDENT
VALUES (990012,梅立松,20,女) 插入:子查询 2. DELETE FROM SC
WHERE SNO IN /* = */
( SELECT SNO
FROM STUDENT
WHERE SNAME = “夏春秋”); 3. UPDATE SC
SET GRADE =*GRADE WHERE CNO IN
( SELECT CNO
FROM COURSE
WHERE CNAME = “英语”); [例7] 将计算机科学系全体学生的成绩置零。
UPDATE SC SET Grade=0
WHERE 'CS'= (SELETE Sdept FROM Student WHERE = ;
UPDATE SC SET Grade = 0
WHERE SNO IN ( SELECT SNO FROM Student
WHERE Sdept = 'CS' );
例41 找出每个学生超过他选修课程平均成绩的课程号。
SELECT Sno,Cno FROM SC x
WHERE Grade >= ( SELECT AVG(Grade)
FROM SC y
WHERE =;
因篇幅问题不能全部显示,请点此查看更多更全内容