1.什么是子查询?当一个查询是另一个查询的条件时,它被称为子查询。子查询可以从几个简单的命令中构造出强大的复合命令。子查询最常用于SELECT-SQL命令的WHERE子句中。子查询是嵌套在SELECT、SELECT...INTO语句、INSERT...INTO语句、DELETE语句或UPDATE语句中或嵌套在另一个子查询中的SELECT语句。语法:select....fromtable1wherecolumn1>(subquery)外面的查询成为父查询,括号内的查询成为子查询。SQLServer执行时,首先执行子查询部分,计算出子查询部分的值,然后执行整个父查询,返回最好的结果。您还可以使用表连接来查看多表数据。表连接(joinon...)和表连接可以用子查询代替,但有些子查询不能用表连接代替。子查询更加灵活、方便,形式多样。适合作为查询的过滤条件。例如:结果是:2.InandNotIn子查询1>如果你的子查询会返回多行数据,你可以使用IN和NOTIN操作符构造主查询的检索条件。IN和NOTIN运算符的目的是测试给定的比较值是否出现在指定的集合中。只要主查询中的一行与子查询返回的任何行匹配,IN运算符的比较结果就为真。如果主查询中的数据行与子查询返回的所有数据行不匹配,则NOTIN运算符的比较结果将为真。例如:SELECT*FROMstudentWHEREstudent_idIN(SELECTstudent_idFROMabsence);姓名|性别|student_id|+--------+-----+------------+|凯尔|男|3||艾比|女|5|2>IN和NOTIN运算符也可用于将返回多列数据的子查询中。换句话说,您可以在数据表子查询中使用它们。此时,就需要用一个数据行构造器来给出要与每个数据列进行比较的比较值。例如:SELECTlast_name,first_name,city,stateFROMpresidentWHERE(city,state)IN(SELECTcity,stateFROMpresidentWHERElast_name='Roosevelt');+------------+-------------+------------+--------+|姓氏|名字|城市|状态|+----------+------------+------------+--------+|罗斯福|西奥多|纽约|纽约||罗斯福|富兰克林D。海德公园|纽约|+------------+------------+------------+-------+3.ExistsandNotExists子查询Exists可以检测数据是否存在。如果子查询的结果不为空,Exists(子查询)将返回真(true),否则返回假(false)。IfExists(子查询)语句Exists和In一样,也允许加入Not关键字实现反转操作。NotExists表示它不存在。四、子查询的注意事项<1>子查询的使用原则1、子查询必须放在括号中。2.将子查询放在比较条件的右边,增加可读性。子查询不包含ORDERBY子句。一个SELECT语句只能使用一个ORDERBY子句,如果指定,它必须放在主SELECT语句的末尾。ORDERBY子句可以使用,并且是Top-N分析所必需的。3、子查询中可以使用的比较条件有两种:单行运算符和多行运算符。<2>子查询的类型单行子查询:从内层SELECT语句返回一行的查询多行子查询:从内层SELECT语句返回多行的查询<3>单行子查询单行子查询返回一行从内部查询查询。在此子查询类型中使用单行运算符。幻灯片中列出了单行运算符。5.查询方式:<1>联合:合并多个数据集中的行<2>子查询:将一个查询嵌套在另一个查询中<3>连接:合并多个数据表中的列6.什么是相关子查询?相关子查询依赖于外部查询。外查询和SQLServer子查询是相关的,特别是在子查询的WHERE子句中。当在子查询中找到对外部查询的引用时,相关子查询通过执行外部查询来工作,此时结果返回给子查询。然后对外层查询返回的结果集进行子查询操作。相关子查询的执行性能:由于相关子查询中的子查询是在外层查询返回的结果集上执行的,效率肯定会下降。子查询的性能完全取决于查询和关联的数据。但是,如果相关子查询的语句编写得高效,其执行性能可以胜过那些使用多个连接和临时表的程序。博文来源:http://www.cnblogs.com/yimeng-com/archive/2015/05/03/4474746.html
