扩展实验:
a) 查询和10060101选修的全部课程相同的学生的学号、课程号、期末考试
成绩。
select s.s_id,c_id,exam_grade from student s,sc a
where s.s_id=a.s_id and not exists(( ))
select c_id from sc b
where b.s_id=s.s_id select c_id from sc
where s_id='10060101' select c_id from sc
where s_id='10060101' select c_id from sc c
where c.s_id=s.s_id
)except(
)) and not exists((
)except(
b) 查询至少选了10060101选修的全部课程的学生的学号。
6
select s.s_id,c_id,exam_grade from student s,sc a
where s.s_id=a.s_id and not exists(( ))
select c_id from sc
where s_id='10060101' select c_id from sc c
where c.s_id=s.s_id
)except(
c) 查询年龄比所在院系平均年龄小的学生的学号、姓名、年龄、院系,按
院系和年龄升序排列。
select S_ID,S_Name,DEPT_ID,Date_of_Birth from Student where year(getdate())-year(Date_of_Birth)
(select avg(year(getdate())-year(Date_of_Birth) ) as 年龄from Student ) order by DEPT_ID,year(getdate())-year(Date_of_Birth)
d) 查询每门课都在80分以上的学生的学号和姓名。
select s_id,s_name from student s where not exists( )
select * from sc
where sc.s_id=s.s_id and exam_grade<=80
7
4.实验思考:
①哪些类型的嵌套查询可以用联接查询表示? 如果只是单个的条件的时候,即只有一个连接条件的时候,使用两种方式都是一样的,但是,如果是多个条件的话,就要考虑一下效率了,一般这种情况下需要嵌套查询更能提高效率。 ②嵌套查询具有何种优势?
逐层求解,避开了连接查询的笛卡尔运算,所以速度快,效率高。
③相关子查询和不相关子查询的执行顺序有何不同,子查询各自执行几遍?
相关子查询是指,子查询是一个独立的查询不与外部查询相关,子查询将被先执行,而且只被执行一次,子查询执行完成后,再执行外部的查询,外部查询在执行过程中会使用到子查询的结果。非相关子查询,解除构成子查询的查询语句与主查询语句的嵌套关系或者通过表的连接方式替代子查询,以获得良的执行速度。在子查询非嵌套化不可能实现时,优化器会制定把子查询放在最优先或最后位置,执行的独立执行计划。此时,这个查询语句的执行速度会随着子查询被放在最优先或最后位置执行的顺序不同而不同。
8
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库嵌套子查询设计(2)在线全文阅读。
相关推荐: