SQL Server 2005数据库案例教程教学课件严波第6章高级查询

上传人:w****i 文档编号:94557465 上传时间:2019-08-08 格式:PPT 页数:20 大小:113.50KB
返回 下载 相关 举报
SQL Server 2005数据库案例教程教学课件严波第6章高级查询_第1页
第1页 / 共20页
SQL Server 2005数据库案例教程教学课件严波第6章高级查询_第2页
第2页 / 共20页
SQL Server 2005数据库案例教程教学课件严波第6章高级查询_第3页
第3页 / 共20页
SQL Server 2005数据库案例教程教学课件严波第6章高级查询_第4页
第4页 / 共20页
SQL Server 2005数据库案例教程教学课件严波第6章高级查询_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《SQL Server 2005数据库案例教程教学课件严波第6章高级查询》由会员分享,可在线阅读,更多相关《SQL Server 2005数据库案例教程教学课件严波第6章高级查询(20页珍藏版)》请在金锄头文库上搜索。

1、第六章 高级查询,本章目标,掌握子查询的使用 区分相关子查询和无关子查询 掌握集合的操作UNION,EXCEPT,INTERSECT,子查询,问题:查询平均成绩最低的学生信息 解决方法: 一.首先查询平均成绩最低的学生编号 二.以学号为条件查询学生信息,子查询,子查询就是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询 基本语法:,SELECT * FROM Student WHERE StuNo= ( SELECT TOP 1 StuNo AS StuNo FROM StuScore GROUP BY StuNo ORDER BY AVG(Sc

2、ore) ),SELECT 列名 FROM 表名 WHERE 条件 = (SELECT 列名 FROM 表名 WHERE 条件),单行子查询,子查询返回单个结果值 关联语法实现方式:,SELECT * FROM Student A JOIN ( SELECT TOP 1 StuNo AS StuNo FROM StuScore GROUP BY StuNo ORDER BY AVG(Score) ) AS B ON A.StuNo=B.StuNo,单行子查询多层嵌套,问题:查询高于全班平均成绩的学生的学生信息 解决方法: 一.查询平均成绩 二.查询成绩大于平均成绩的学生学号 三.查询学生信息,

3、SELECT * FROM Student A, ( SELECT * FROM StuScore WHERE Score( SELECT AVG(Score) FROM StuScore ) ) AS B WHERE A.StuNo=B.StuNo,多行子查询,多行子查询是指子查询(内部查询)返回多个值,外部查询通过IN(NOT IN)引入子查询。 语法:,SELECT 列名。 FROM 表名 WHERE 条件 NOT IN ( SELECT 列名 FROM 表名 WHERE 条件 ),IN子查询,问题:查询男生的考试信息,子查询: SELECT * FROM StuScore WHERE

4、StuNo IN ( SELECT StuNo FROM Student WHERE StuSex=男) 关联语法: SELECT * FROM Student A JOIN StuScore B ON A.StuNo=B.StuNo AND A.StuSex=男,NOT IN子查询,问题:查询不住在广州的学生,SELECT * FROM StuScore WHERE StuNo NOT IN ( SELECT StuNo FROM Student WHERE StuAddress=广州) 关联查询: SELECT * FROM StuScore A JOIN Student B ON A.S

5、tuNo=B.StuNo WHERE B.StuAddress广州,Exists子查询,问题:查询参加了考试的学生 解决方法: 一.查找所有的学生 二.判断该学生是否参加了考试,如果是则输出,SELECT * FROM Student WHERE EXISTS ( SELECT * FROM StuScore WHERE StuScore.StuNo=Student.StuNo ),NOT Exists子查询,示例:查询没有参加考试的学生信息,SELECT * FROM Student WHERE NOT EXISTS ( SELECT * FROM StuScore WHERE StuSco

6、re.StuNo=Student.StuNo ),相关,无关子查询比较,相关子查询:首先执行外部查询,子查询根据外部查询获得值。子查询执行是重复的,为外部查询可能选择的每一行都执行一次 无关子查询:先执行内部的子查询,然后将子查询的执行结果作为外部查询的条件再进行查询,INSERT中的子查询,问题:创建一个新表NewStudent,包含字段StuNo, StuName, StuAddress将Student中的数据插入NewStudent,第一步:创建表 SELECT StuNo, StuName, StuAddress INTO NewStudent FROM Student WHERE S

7、tuNo IS NULL 第二步:插入数据 INSERT INTO NewStudent SELECT StuNo,StuName,StuAddress FROM Student,UPDATE中的子查询,问题:将居住在北京的学生的成绩加10分,子查询语法: UPDATE StuScore SET Score=Score+1 WHERE StuNo IN ( SELECT StuNo FROM Student WHERE StuAddress=北京 ) 关联语法: UPDATE StuScore SET Score=Score+10 FROM Student WHERE Student.StuN

8、o=StuScore.StuNo AND Student.StuAddress=北京,DELETE中的子查询,问题:删除平均成绩不合格的学生信息,子查询语法: DELETE FROM Student WHERE StuNo IN ( SELECT StuNo FROM StuScore GROUP BY StuNo HAVING AVG(Score)60 ) 关联语法: DELETE FROM Student FROM Student A INNER JOIN ( SELECT StuNo FROM StuScore GROUP BY StuNo HAVING AVG(Score)60 ) A

9、S B ON A.StuNo=B.StuNo,UNION运算符,问题:将Student表和NewStudent表的数据合并起来,SELECT * FROM NewStudent UNION SELECT StuNo,StuName,StuAddress FROM Student,Student表,NewStudent表,Student表,UNION ALL,SELECT * FROM NewStudent UNION ALL SELECT StuNo,StuName,StuAddress FROM Student,Student表,NewStudent表,Student表,EXCEPT运算符,

10、问题:查询没有参加考试的学生,SELECT StuNo FROM Student EXCEPT SELECT StuNo FROM StuScore,INTERSECT运算符,问题:查询参加了考试的学生,SELECT StuNo FROM Student INTERSECT SELECT StuNo FROM StuScore,总结,子查询就是嵌套在SELECT,INSERT,UPDATE和DELETE中的查询 无关关子查询即子查询不依赖于外部查询,执行时先执行内部 查询再执行外部查询,通常用比较运算符和IN,NOT IN关键字 相关子查询即子查询的条件依赖于外部查询,执行时先执行外 部查询,然后根据外部查询返回的记录行数重复执行内部查询通 常用EXISTS,NOT EXISTS关键字 结果集要进行合并时用UNION运算符,结果集取交集用 INTERSECT运算符。结果集相减用EXCEPT运算符。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号