数据库的嵌套查询实验报告范本模板.docx
《数据库的嵌套查询实验报告范本模板.docx》由会员分享,可在线阅读,更多相关《数据库的嵌套查询实验报告范本模板.docx(17页珍藏版)》请在冰豆网上搜索。
数据库的嵌套查询实验报告范本模板
实验三:
数据库的嵌套查询实验
实验目的:
加深对嵌套查询语句的理解。
实验内容:
使用IN、比较符、ANY或ALL和EXISTS操作符进行嵌套查询操作。
实验步骤:
一。
使用带IN谓词的子查询
1.查询与’刘晨'在同一个系学习的学生的信息:
比较select*fromstudentwheresdeptin
(selectsdeptfromstudentwheresname='刘晨’)
与:
select*fromstudentwheresdept=
(selectsdeptfromstudentwheresname=’刘晨’)的异同
比较:
select*fromstudentwheresdept=
(selectsdeptfromstudentwheresname=’刘晨')andsname<>‘刘晨'
与:
selectS1。
*fromstudentS1,studentS2whereS1。
sdept=S2。
sdeptandS2。
sname=’刘晨'的异同
2。
查询选修了课程名为'信息系统’的学生的学号和姓名:
比较selectsno,snamefromstudentwheresnoin
(selectsnofromscwherecnoin(selectcnofromcoursewherecname='信息系统'))
与:
selectsno,snamefromstudentwheresnoin
(selectsnofromsc,coursewheresc。
cno=oandcname='信息系统')
3.查询选修了课程’1’和课程’2’的学生的学号:
selectsnofromstudentwheresnoin(selectsnofromscwherecno='1’)
andsnoin(selectsnofromscwherecno=’2’)
比较:
查询选修了课程’1'或课程’2’的学生的sno:
selectsnofromscwherecno=’1’orcno='2’
比较连接查询:
selectA.snofromscA,scBwhereA.sno=B.snoandA.cno='1'andB.cno=’2'
二.使用带比较运算的子查询
4。
查询比'刘晨’年龄小的所有学生的信息:
select*fromstudentwheresage〈
(selectsagefromstudentwheresname='刘晨')
三。
使用带Any,All谓词的子查询
5.查询其他系中比信息系(IS)某一学生年龄小的学生姓名和年龄;
selectsname,sagefromstudentwheresage(selectsagefromstudentwheresdept=’IS')andsdept〈〉'IS'
6.查询其他系中比信息系(IS)学生年龄都小的学生姓名和年龄:
selectsname,sagefromstudentwheresage〈ALL
(selectsagefromstudentwheresdept='IS’)andsdept<〉’IS'
7.查询与计算机系(CS)系所有学生的年龄均不同的学生学号,姓名和年龄:
selectsno,sname,sagefromstudentwheresage<〉all
(selectsagefromstudentwheresdept='CS’)
四。
使用带Exists谓词的子查询和相关子查询
8。
查询与其他所有学生年龄均不同的学生学号,姓名和年龄:
selectsno,sname,sagefromstudentAwherenotexists
(select*fromstudentBwhereA。
sage=B。
sageandA.sno〈>B.sno)
9.查询所有选修了1号课程的学生姓名:
selectsnamefromstudentwhereexists
(select*fromscwheresno=student.snoandcno='1')
10.查询没有选修了1号课程的学生姓名:
selectsnamefromstudentwherenotexists
(select*fromscwheresno=student.snoandcno='1’)
11。
查询选修了全部课程的学生姓名:
SQLServer中:
selectsnamefromstudentwherenotexists
(select*fromcoursewherenotexists
(select*fromscwheresno=student.snoandcno=o))
11。
查询至少选修了学生95002选修的全部课程的学生的学号:
SQLServer中:
selectdistinctsnofromscAwherenotexists
(select*fromscBwheresno=’95002’andnotexists
(select*fromscCwheresno=A。
snoandcno=B。
cno))
12。
求没有人选修的课程号cno和cnamecname:
selectcno,cnamefromcourseCwherenotexists
(select*fromscwheresc。
cno=C。
cno)
13*。
查询满足条件的(sno,cno)对,其中该学号的学生没有选修该课程号cno的课程
SQLServer中:
selectsno,cnofromstudent,coursewherenotexists
(select*fromscwherecno=course。
cnoandsno=student。
sno)
14*.查询每个学生的课程成绩最高的成绩信息(sno,cno,grade):
select*fromscAwheregrade=
(selectmax(grade)fromscwheresno=A.sno)
思考:
如何查询所有学生都选修了的课程的课程号cno?
selectcno
fromsc
groupbycno
havingcount(*)=(selectcount(*)fromstudent)