此文章主要向大家描述的是SQLServer子查询,在实际操作中SQLServer子查询所占的比例还是比较常见的,所以对其有一定的了解在以后的学习中还是比较有用的,以下就是文章的主要内容的详细描述,望你能有所收获。
子查询是指将一条SQLSever语句嵌入到另一条SQLSever语句中。数据库引擎将子查询做为虚表执行查询操作。子查询可做为连接语句中的一个表,可做为选择语句中的一个值,也可以是SQLSever查询子句,还可以是SQLSever查询子句的字句,与数据操作语句混合在一起。
子查询的执行依赖于嵌套查询。查询树从最里层开始,一层一层向外执行。高层的嵌套查询可以访问低层嵌套查询的结果。
类别
子查询分为两种类型:独立子查询和相关子查询
①独立子查询是单独执行,其结果参与外层的查询,
整个查询中子查询只执行一次,执行完后再执行外层查询;
②相关子查询是指子查询(内层查询)中引用了外层查询所引用表的字段,
因此外层查询处理每一条记录时都必须执行一次子查询,
因为子查询中引用的字段的值发生了变化。
什么是相关子查询?
与经典子查询不同,相关子查询依赖于外部查询。外部查询和SQLServer子查询是有联系的,尤其在子查询的WHERE语句中更是如此。相关子查询的工作方式是:在子查询中找到外部查询的参考时执行外部查询,此时将结果返回给子查询。然后在外部查询返回的结果集上执行子查询操作。
相关子查询的执行性能
由于相关子查询中的子查询在外部查询返回的结果集上进行执行,其效率肯定下降。子查询的性能完全依赖于查询和有关的数据。但是,如果相关子查询的语句写得很有效率,则其执行性能能够胜过那些使用几个连接和临时表的程序。
例子:
例:找出每个部门中薪水最高的雇员,显示姓和薪水。
该子查询语句的执行过程如下:
1.读取雇员表的一条记录
2.执行子查询,得到该雇员所在部门的最高薪水数目
3.比较该雇员薪水和最高薪水
4.如果相等,输出该行信息
5.转到1
再举一个例子:查找薪水高于部门平均薪水的所有员工,显示姓和薪水。
该子查询的执行过程如下:
1.读取employee表的一条记录
2.执行子查询,得到该记录的雇员的所在部门的平均工资
3.比较该雇员的薪水和部门平均薪水
全部取出后判定是否存在
如果使用NOTEXISTS表达式,可以写成:
4.如果雇员薪水比部门平均薪水高,就输出该行信息
5.转到1
用相关子查询的例子:
哪些代码的工作没有雇员?
全部取出后判定是否存在
如果使用NOTEXISTS表达式,可以写成:
小编结语:
更多内容尽在课课家教育!
¥48.00¥180.00
¥199.00
¥199.00
¥798.00
¥29.90
¥48.00¥180.00