实验四 数据库的嵌套查询.docx
- 文档编号:6273208
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:12
- 大小:1.51MB
实验四 数据库的嵌套查询.docx
《实验四 数据库的嵌套查询.docx》由会员分享,可在线阅读,更多相关《实验四 数据库的嵌套查询.docx(12页珍藏版)》请在冰豆网上搜索。
实验四数据库的嵌套查询
实验四:
数据库的嵌套查询实验
学号:
091714230姓名:
秦力
实验日期:
2011年4月14日
实验四:
数据库的嵌套查询实验
实验目的:
加深对嵌套查询语句的理解。
实验内容:
使用IN、比较符、ANY或ALL和EXISTS操作符进行嵌套查询操作。
实验步骤:
一.使用带IN谓词的子查询
1.查询与’刘晨’在同一个系学习的学生的信息:
select*fromstudentwheresdeptin
(selectsdeptfromstudentwheresname='刘晨')
比较:
select*fromstudentwheresdept=
(selectsdeptfromstudentwheresname='刘晨')的异同
比较:
select*fromstudentwheresdept=
(selectsdeptfromstudentwheresname='刘晨')andsname<>'刘晨'
比较:
selectS1.*fromstudentS1,studentS2whereS1.sdept=S2.sdeptandS2.sname='刘晨'
2.查询选修了课程名为’信息系统’的学生的学号和姓名:
SQLServer中:
selectsno,snamefromstudentwheresnoin
(selectsnofromscwherecnoin
(selectcnofromcoursewherecname='信息系统'))
3.查询选修了课程’1’和课程’2’的学生的学号(姓名):
selectsnofromstudentwheresnoin(selectsnofromscwherecno='1')
andsnoin(selectsnofromscwherecno='2')
selectx.snofromSCx,SCy
wherex.sno=y.snoando='1'ando='2'
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谓词的子查询(对于ALL全称量词,建议改成否定之否定存在量词)
5.查询其他系中比信息系(IS)某一学生年龄小的学生姓名和年龄;
selectsname,sagefromstudentwheresage (selectsagefromstudentwheresdept='IS') andsdept<>'IS' 6.查询其他系中比信息系(IS)学生年龄都小的学生姓名和年龄: selectsname,sagefromstudentwheresage (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') selectsnamefromstudentwheresnoin (selectsnofromscwherecno='1') 10.查询没有选修了1号课程的学生姓名: selectsnamefromstudentwherenotexists (select*fromscwheresno=student.snoandcno='1') 11.查询选修了全部课程的学生姓名: selectsnamefromstudentwherenotexists不存在一门课没有选的学生. (select*fromcoursewherenotexists一门课都没有选的, (select*fromscwheresno=student.snoandcno=o))选某门课, 11.查询至少选修了学生95002选修的全部课程的学生的学号: selectdistinctsnofromscAwherenotexists (select*fromscBwheresno='95002'andnotexists (select*fromscCwheresno=A.snoandcno=B.cno)) 12.求没有人选修的课程号cno和cname: selectcno,cnamefromcourseCwherenotexists (select*fromscwhereo=C.cno) 13*.查询满足条件的(sno,cno)对,其中该学号的学生没有选修该课程号cno的课程 selectsno,cnofromstudent,coursewherenotexists (select*fromscwherecno=oandsno=student.sno) 14*.查询每个学生的课程成绩最高的成绩信息(sno,cno,grade): select*fromscAwheregrade= (selectmax(grade)fromscwheresno=A.sno)orderbyA.snoASC (此处可否用GROUPby) select*fromscwheregradein(selectmax(grade)fromscgroupbysno)(此答案有点问题: 当在数据库中同时有两个相同的最高分的,就出现判断错误.如95001里有一个最高分85,95002里假如也有一个学生某门课成绩为85,这时问题就出现了.) selectsc.sno,maxgradefromsc,(selectsno,max(grade)asmaxgradefromscgroupbysno)asAwheresc.sno=A.snoandgrade=maxgrade 思考: 如何查询所有学生都选修了的课程的课程号cno? 试用几种可能的方法实现。 selectcnofromcoursewherenotexists(select*fromstudentwherenotexists(select*fromscwheresc.sno=student.snoando=o)) 或 selectcnofromscgroupbycnohavingcount(*)=(selectcount(sno)fromstudent)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验四 数据库的嵌套查询 实验 数据库 嵌套 查询