2015网络数据库实验指导书(4)

1970-01-01 08:00

FROM Student,Course,SC

WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno AND Cname='数据库'

【SY4-04】查询没有选修“数学”课程的学生的学号和姓名。

SELECT Sno,Sname FROM Student WHERE Sno not IN ( SELECT Sno FROM SC WHERE Cno IN (SELECT Cno FROM Course WHERE cname='数学' ) )

2 带有比较运算符的嵌套查询

【SY4-05】将SY4-01改为带有比较运算符的嵌套查询。

SELECT * FROM Student WHERE Dno= ( SELECT Dno FROM Student WHERE Sname='李勇'

)

3 带谓词ANY或ALL的嵌套查询

【SY4-06】查询其它系中比计算机系(DX01)某一学生年龄小的学生。 【方法一】

SELECT * FROM Student

WHERE Sbirth>ANY(SELECT Sbirth FROM Student WHERE Dno='DX01') AND Dno<>'DX01'

【方法二】

SELECT * FROM Student

WHERE Sbirth>(SELECT MIN(Sbirth) FROM Student WHERE Dno='DX01') AND Dno<>'DX01'

【SY4-07】查询其他系中比计算机系(DX01)学生年龄都小的学生。 【方法一】

SELECT * FROM Student

WHERE Sbirth>ALL(SELECT Sbirth FROM Student WHERE Dno='DX01') AND Dno<>'DX01'

【方法二】

SELECT *

12

FROM Student

WHERE Sbirth>(SELECT MAX(Sbirth) FROM Student WHERE Dno='DX01') AND Dno<>'DX01'

4 带谓词EXISTS的嵌套查询

【SY4-08查询所有选修了编号为“1”课程的学生姓名(Sname)。

SELECT Sno,Sname FROM Student WHERE EXISTS ( SELECT * FROM SC

WHERE Sno=Student.Sno AND Cno='1' )

【SY4-09查询所有选修了编号为“2”课程的学生姓名(Sname)。

SELECT Sno,Sname FROM Student WHERE NOT EXISTS ( SELECT * FROM SC

WHERE Sno=Student.Sno AND Cno='2' )

【SY4-10询与“李勇”在同一个系学习的学生信息。将【SY4-01】改为带谓词EXISTS的查询,其SQL语句如下:

SELECT Sno,Sname,Dno FROM Student A

WHERE EXISTS(SELECT * FROM Student B

WHERE B.Dno=A.Dno AND B.Sname='李勇' )

【SY4-11查询选修了所有课程的学生姓名。

由于没有全称量词,可将题目的意思转换成等价的用存在量词的形式:查询这样的学生,没有一门课程是他不选修的。其SQL语句为:

SELECT Sno,Sname FROM Student

WHERE NOT EXISTS(SELECT * FROM Course

WHERE NOT EXISTS(SELECT * FROM SC

WHERE Student.Sno=SC.Sno AND Course.Cno=SC.Cno ) )

13

二、集合查询

1.并运算

【SY4-12查询选修了1号课程或4号课程的学生学号。 【方法一】

SELECT Sno FROM SC WHERE Cno='1' UNION

SELECT Sno FROM SC WHERE Cno='4'

【方法二】

SELECT DISTINCT Sno FROM SC

WHERE Cno='1' OR Cno='4'

【SY4-13查询电子系(DX02)的学生或年龄小于19岁的学生信息。 【方法一】

SELECT * FROM Student WHERE Dno='DX02' UNION

SELECT * FROM Student WHERE YEAR(GETDATE())-YEAR(Sbirth)<19

【方法二】

SELECT * FROM Student WHERE Dno='DX02' OR YEAR(GETDATE())-YEAR(Sbirth)<19

2.交运算

【SY4-14查询选修了1号课程并且同时选修了4号课程的学生学号。 【方法一】

SELECT Sno FROM SC WHERE Cno='1' INTERSECT

SELECT Sno FROM SC WHERE Cno='4'

【方法二】

SELECT Sno FROM SC

WHERE Cno='1' AND Sno IN ( SELECT Sno FROM SC WHERE Cno='4' )

【SY4-15】查询计算机系(DX01)的学生且年龄小于19岁的学生的交集,这实际上就是查询计算机系中年龄小于26岁的学生。 【方法一】

SELECT * FROM Student WHERE Dno='DX01' INTERSECT

SELECT * FROM Student WHERE YEAR(GETDATE())-YEAR(Sbirth)<19

14

【方法二】

SELECT * FROM Student WHERE Dno='DX01' AND YEAR(GETDATE())-YEAR(Sbirth)<19

【SY4-16】查询学号为“2012314101”和“2012394101”的学生同时选修的课程的课程号。 【方法一】

SELECT Cno FROM SC WHERE Sno='2012314101' INTERSECT

SELECT Cno FROM SC WHERE Sno='2012394101'

【方法2】

SELECT Cno FROM SC

WHERE Sno='2012314101' AND Cno IN ( SELECT Cno FROM SC

WHERE Sno='2012394101' )

3.差运算

【SY4-17】查询选修了1号课程但没有选修2号课程的学生学号。 【方法一】

SELECT Sno FROM SC WHERE Cno='1' EXCEPT

SELECT Sno FROM SC WHERE Cno='2'

【方法二】

SELECT Sno FROM SC

WHERE Cno='1' AND Sno NOT IN ( SELECT Sno FROM SC WHERE Cno='2' )

【SY4-18】查询计算机系(DX01)的学生与年龄小于19岁的学生的差集。本查询的等价说法是,查询计算机系中年龄不小于19岁的学生。 【方法一】

SELECT * FROM Student WHERE Dno='DX01' EXCEPT

SELECT * FROM Student WHERE YEAR(GETDATE())-YEAR(Sbirth)<19

【方法二】

SELECT * FROM Student WHERE Dno='DX01' AND YEAR(GETDATE())-YEAR(Sbirth)!<19

【SY4-19】查询学号为“2012314101”的学生选修,但没有被“2012394101”学生所选修的课程的课程号。

15

【方法1】

SELECT Cno FROM SC WHERE Sno='2012314101' EXCEPT

SELECT Cno FROM SC WHERE Sno='2012394101'

【方法2】

SELECT Cno FROM SC

WHERE Sno='2012314101' AND Cno not IN ( SELECT Cno FROM SC

WHERE Sno='2012394101' )

16


2015网络数据库实验指导书(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:辩证法.doc0

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: