嵌套子查询设计实验.docx
- 文档编号:1921621
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:10
- 大小:160.83KB
嵌套子查询设计实验.docx
《嵌套子查询设计实验.docx》由会员分享,可在线阅读,更多相关《嵌套子查询设计实验.docx(10页珍藏版)》请在冰豆网上搜索。
嵌套子查询设计实验
嵌套子查询设计实验
LT
(1)
(2)
(3)句,并进行比较。
(4)按要求完成实验报告。
3.实验步骤、结果和总结实验步骤/结果
将调试成功的T-SQL语句写在下方(标明题号)。
a)查询选修了数据结构与算法的学生学号和姓名。
selectStudent.S_ID,Student.S_Name
fromStudent,Course,SC
whereStudent.S_ID=SC.S_IDandCourse.C_ID=SC.C_IDandStudent.S_ID=SC.S_IDandC_Name='数据结构与算法'
b)查询07294002课程的成绩低于孙云禄的学生学号和成绩
selectStudent.S_ID,SC.EXAM_Grade
fromStudent,SC
whereStudent.S_ID=SC.S_IDandSC.EXAM_Grade<(selectSC.EXAM_GradefromStudent,SC
whereStudent.S_ID=SC.S_IDandStudent.S_Name='孙云禄'
andSC.C_ID='07294002')
c)查询和孙云禄同年出生的学生的姓名和出生年份。
selectS_Name,Date_of_Birth
fromStudent
whereYear(Date_of_Birth)=(selectyear(Date_of_Birth)
fromstudent
whereS_Name='孙云禄'
)andS_Name!
='孙云禄'
d)查询其他系中年龄小于数学与信息技术学院年龄最大者的学生。
select*fromStudent
whereDEPT_ID<>'数学与信息技术学院'andyear(getdate())-year(Date_of_Birth) (selectmax(year(getdate())-year(Date_of_Birth))as年龄fromStudent,Department whereStudent.DEPT_ID=Department.DEPT_IDandDEPT_Name='数学与信息技术学院') e)查询其他系中比数学与信息技术学院学生年龄都小的学生。 select*fromStudent whereyear(getdate())-year(Date_of_Birth)<( selectmin(year(getdate())-year(Date_of_Birth))as年龄 fromStudent,Department whereStudent.DEPT_ID=Department.DEPT_IDandDEPT_Name='数学与信息技术学院')andDEPT_ID<>'07' f)查询同孙云禄数据库原理与应用课程分数相同的学生的学号和姓名。 selects.s_id,s_name fromstudents,sc,coursec wheres.s_id=sc.s_idandsc.c_id=c.c_id andc.c_name='数据库原理与应用'ands_name<>'孙云禄' andexam_grade=( selectexam_grade fromstudents,sc,coursec wheres.s_id=sc.s_idandsc.c_id=c.c_id ands_name='孙云禄'andc.c_name='数据库原理与应用' ) g)查询选修了07294002课程的学生姓名。 selectS_NamefromStudent,SC whereStudent.S_ID=SC.S_IDandSC.C_ID='07294002' h)查询没有选07294002课程的学生姓名。 selectS_NamefromStudent whereS_IDnotin(selectS_IDfromSCwhereC_ID='07294002') i)查询同时选修了07295006和07295007课程的学生的学号。 selecta.s_id fromsca,scb wherea.s_id=b.s_idanda.C_ID='07295007'andb.c_id='07295006'; j)查询所有未授课的教师的工号、姓名和院系,结果按院系升序排列。 selectT_ID,T_NAME,DEPT_IDfromTeacher whereT_IDnotin(selectT_IDfromTC) orderbyDEPT_ID 扩展实验: a)查询和10060101选修的全部课程相同的学生的学号、课程号、期末考试成绩。 selects.s_id,c_id,exam_grade fromstudents,sca wheres.s_id=a.s_idandnotexists(( selectc_id fromscb whereb.s_id=s.s_id )except( selectc_id fromsc wheres_id='10060101' ))andnotexists(( selectc_id fromsc wheres_id='10060101' )except( selectc_id fromscc wherec.s_id=s.s_id )) b)查询至少选了10060101选修的全部课程的学生的学号。 selects.s_id,c_id,exam_grade fromstudents,sca wheres.s_id=a.s_idandnotexists(( selectc_id fromsc wheres_id='10060101' )except( selectc_id fromscc wherec.s_id=s.s_id )) c)查询年龄比所在院系平均年龄小的学生的学号、姓名、年龄、院系,按院系和年龄升序排列。 selectS_ID,S_Name,DEPT_ID,Date_of_BirthfromStudent whereyear(getdate())-year(Date_of_Birth) (selectavg(year(getdate())-year(Date_of_Birth))as年龄fromStudent) orderbyDEPT_ID,year(getdate())-year(Date_of_Birth) d)查询每门课都在80分以上的学生的学号和姓名。 selects_id,s_name fromstudents wherenotexists( select* fromsc wheresc.s_id=s.s_idandexam_grade<=80 ) 4.实验思考: ①哪些类型的嵌套查询可以用联接查询表示? 如果只是单个的条件的时候,即只有一个连接条件的时候,使用两种方式都是一样的,但是,如果是多个条件的话,就要考虑一下效率了,一般这种情况下需要嵌套查询更能提高效率,因为连接查询是先要做笛卡尔积之后之后再筛选,而嵌套查询的话可以先筛选。 ②嵌套查询具有何种优势? 嵌套查询是逐层求解,避开了连接查询的笛卡尔运算,所以速度快,效率高。 ③相关子查询和不相关子查询的执行顺序有何不同,子查询各自执行几遍? 所谓相关子查询是指,子查询是一个独立的查询不与外部查询相关,子查询将被先执行,而且只被执行一次,子查询执行完成后,再执行外部的查询,外部查询在执行过程中会使用到子查询的结果。 非相关子查询,解除构成子查询的查询语句与主查询语句的嵌套关系或者通过表的连接方式替代子查询,以获得良的执行速度。 事实上,几乎大部分的子查询都要经过转化。 在子查询非嵌套化不可能实现时,优化器会制定把子查询放在最优先或最后位置执行的独立执行计划。 此时,这个查询语句的执行速度会随着子查询被放在最优先或最后位置执行的顺序不同而不同。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌套 查询 设计 实验