深入SQL高级子查询理论.pptVIP

  • 2
  • 0
  • 约8.84千字
  • 约 38页
  • 2019-11-06 发布于广东
  • 举报
子查询综合应用 第二种方案:联接查询 第一步:过滤历史工资记录 select * from Salary where StartTime in (select MAX(StartTime) from Salary group by EmpNo)) as t 为结果集起别名,此结果集将作为一个虚表与员工表进行联接查询 子查询综合应用 第二种方案:联接查询 第二步:将员工表与第一步查询的结果集进行联接 select t.*,e.DeptNo from Employee e join (select * from Salary where StartTime in (select MAX(StartTime) from Salary group by EmpNo)) as t on e.EmpNo =t.EmpNo) as es 为结果集起别名,此结果集将作为一个虚表与部门表进行联接查询 子查询综合应用 第二种方案:联接查询 第三步:将第二步中的结果集与部门表联接查询,按部门编号进行分组计算出平均工资 select AVG(es.Salary) as p,es.DeptNo from department as d join (select t.*,e.DeptNo from Employee e join (select * from Salary where StartTime in (select MAX(StartTime) from Salary group by EmpNo)) as t on e.EmpNo =t.EmpNo) as es on d.DeptNo=es.DeptNo group by es.DeptNo 按编号计算出各部门平均工资 子查询综合应用 第二种方案:联接查询 第四步:将第三步生成的结果集与部门表进行联接查询。过滤掉小于等于5000元的部门,满足条件的部门显示出相应的信息。但部门的负责人在Employee表中,所以需要同时与Employee表联接 select d.DeptNo as 部门编号,d.DeptName as 部门名称,emp.EmpName as 部门负责人,r.p from department as d join (select AVG(es.Salary) as 部门平均工资,es.DeptNo from department as d join (select t.*,e.DeptNo,e.EmpName from Employee e join (select * from Salary where StartTime in (select MAX(StartTime) from Salary group by EmpNo)) as t on e.EmpNo =t.EmpNo) as es on d.DeptNo=es.DeptNo group by es.DeptNo) as r on d.DeptNo=r.DeptNo join Employee as emp on emp.EmpNo=d.Principal where r.p5000 为了显示部门负责人名称和部门名称与部门表、员工表联接查询 小结3 联接查询比子查询效率更高,子查询是外部查询逐行与查询进行比较, 磁盘IO读写量非常大。在实际使用中,可以选择采取哪一种查询方式: 子查询适合多层次筛选数据,多表联接查询适合从多张表中提取数据。 本章总结 子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询。任何允许使用表达式的地方都可以使用子查询 基本子查询有三类: 通过 IN 、ANY 、ALL 修改的比较运算符引入的列表上操作的子查询 通过未修改的比较运算符引入且必须返回单个值的子查询 通过 EXISTS 引入的存在测试的子查询 通过在子查询中使用IN子句,子查询可以返回多行记录,用于检测字段的值是否存在于一个范围 通过在子查询中使用EXISTS子句,可以对子查询中的行是否存在进行检查 子查询中使用ALL子句,ALL子句中必须全部行都满足条件才会返回真,ALL等效于NOT IN 子查询中使用ANY子句,ANY子句中只要一行数据满足条件就返回真 查询数据来源于多张表,可以采取3种方式查询:联接查询、子查询、UNION联合 第三章 深入SQL高级子查询 课程回顾 T-SQL变量有局部变量和全局变量两种: 局部变量由用户定义,以@为前缀。 全局变量由系统提供,以@@为前缀。用户只能获取全局变量的值,不能自己定义,使用IF ELSE语句可以根据条件决定执行的T-SQL语句。 使用WHILE语句可以循环执行T-SQL语句。 使用CASE WHEN THEN

文档评论(0)

1亿VIP精品文档

相关文档