SQL Server子查询的作用是什么?

    作者:课课家教育更新于: 2017-05-16 10:45:14

      此文章主要向大家描述的是SQLServer子查询,在实际操作中SQLServer子查询所占的比例还是比较常见的,所以对其有一定的了解在以后的学习中还是比较有用的,以下就是文章的主要内容的详细描述,望你能有所收获。

      子查询是指将一条SQLSever语句嵌入到另一条SQLSever语句中。数据库引擎将子查询做为虚表执行查询操作。子查询可做为连接语句中的一个表,可做为选择语句中的一个值,也可以是SQLSever查询子句,还可以是SQLSever查询子句的字句,与数据操作语句混合在一起。

      子查询的执行依赖于嵌套查询。查询树从最里层开始,一层一层向外执行。高层的嵌套查询可以访问低层嵌套查询的结果。

      类别

      子查询分为两种类型:独立子查询和相关子查询

      ①独立子查询是单独执行,其结果参与外层的查询,

      整个查询中子查询只执行一次,执行完后再执行外层查询;

      ②相关子查询是指子查询(内层查询)中引用了外层查询所引用表的字段,

      因此外层查询处理每一条记录时都必须执行一次子查询,

      因为子查询中引用的字段的值发生了变化。

      什么是相关子查询?

      与经典子查询不同,相关子查询依赖于外部查询。外部查询和SQLServer子查询是有联系的,尤其在子查询的WHERE语句中更是如此。相关子查询的工作方式是:在子查询中找到外部查询的参考时执行外部查询,此时将结果返回给子查询。然后在外部查询返回的结果集上执行子查询操作。

      相关子查询的执行性能

      由于相关子查询中的子查询在外部查询返回的结果集上进行执行,其效率肯定下降。子查询的性能完全依赖于查询和有关的数据。但是,如果相关子查询的语句写得很有效率,则其执行性能能够胜过那些使用几个连接和临时表的程序。

      例子:

      例:找出每个部门中薪水最高的雇员,显示姓和薪水。

     由于相关子查询中的子查询在外部查询返回的结果集上进行执行,其效率肯定下降。子查询的性能完全依赖于查询和有关的数据。但是,如果相关子查询的语句写得很有效率,则其执行性能能够胜过那些使用几个连接和临时表的程序。    例子:    例:找出每个部门中薪水最高的雇员,显示姓和薪水

      该子查询语句的执行过程如下:

      1.读取雇员表的一条记录

      2.执行子查询,得到该雇员所在部门的最高薪水数目

      3.比较该雇员薪水和最高薪水

      4.如果相等,输出该行信息

      5.转到1

      再举一个例子:查找薪水高于部门平均薪水的所有员工,显示姓和薪水。

     3.比较该雇员薪水和最高薪水    4.如果相等,输出该行信息    5.转到1    再举一个例子:查找薪水高于部门平均薪水的所有员工,显示姓和薪水。

      该子查询的执行过程如下:

      1.读取employee表的一条记录

      2.执行子查询,得到该记录的雇员的所在部门的平均工资

      3.比较该雇员的薪水和部门平均薪水

      全部取出后判定是否存在

      如果使用NOTEXISTS表达式,可以写成:

      4.如果雇员薪水比部门平均薪水高,就输出该行信息

      5.转到1

      用相关子查询的例子:

      哪些代码的工作没有雇员?

     5.转到1    用相关子查询的例子:    哪些代码的工作没有雇员?

           

        全部取出后判定是否存在

      如果使用NOTEXISTS表达式,可以写成:

     全部取出后判定是否存在    如果使用NOTEXISTS表达式,可以写成:

      小编结语:

      更多内容尽在课课家教育!

课课家教育

未登录

1