在SQL语言中,当一个查询语句嵌套在另一个查询的查询条件之中时,称为子查询。子查询总是写在圆括号中,可以用在使用表达式的任何地方。 如:嵌套在Select 、Insert 、Update 或Delete语句或其他子查询中的查询。任何允许使用表达式的地方都可以使用子查询。子查询也称为内部查询或内部选择,而包含子查询的语句也称为外部查询或外部选择。 许多包含子查询的 Transact-SQL 语句都可以改用联接表示。在 Transact-SQL 中,包含子查询的语句和语义上等效的不包含子查询的语句在性能上通常没有差别。但是,在一些必须检查存在性的情况中,使用联接会产生更好的性能。否则,为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询。所以在这些情况下,联接方式会产生更好的效果。 以下示例显示了返回相同结果集的Select子查询和Select联接: Select Name FROM AdventureWor ks.Production.Product Where ListPrice = (Select ListPrice FROM AdventureWor ks.Production.Product Where Name = ’Chainring Bolts’ ) Select Prd1. Name FROM AdventureWor ks.Production.Product AS Prd1 JOIN AdventureWor ks.Production.Product AS Prd2 ON (Prd1.ListPrice = Prd2.ListPrice) Where Prd2. Name = ’Chainring Bolts’ 嵌套在外部Select语句中的子查询包括以下组件: ●包含常规选择列表组件的常规 Select查询。 ●包含一个或多个表或视图名称的常规 FROM 子句。 ●可选的 Where 子句。 ●可选的 GROUP BY 子句。 ●可选的 HAVING 子句。 子查询的Select查询总是使用圆括号括起来。它不能包含COMPUTE 或 FOR BROWSE 子句,如果同时指定了 TOP 子句,则只能包含 or DER BY 子句。 子查询可以嵌套在外部 Select,Insert,Update 或 Delete语句的 Where 或 HAVING 子句内,也可以嵌套在其他子查询内。尽管根据可用内存和查询中其他表达式的复杂程度的不同,嵌套限制也有所不同,但嵌套到 32 层是可能的。个别查询可能不支持 32 层嵌套。任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值。 如果某个表只出现在子查询中,而没有出现在外部查询中,那么该表中的列就无法包含在输出(外部查询的选择列表)中。 包含子查询的语句通常采用以下格式中的一种: ●Where expression [NOT] IN (subquery) ●Where expression compariso...