SQL Server支持的T-SQL语言特性之一是子查询(subquery),它可以内嵌在一个SELECT、INSERT、UPDATE或DELETE语句中。你可以定义一个T-SQL子查询,然后将其放在SQL语句中任何一个允许使用表达式的地方。例如,你可以在一个SELECT语句的SELECT列表中内嵌一个子查询,或者在WHERE子句中包含一个子查询作为一个查询条件。 当把一个T-SQL子查询内嵌到SQL语句的时候,你必须用括号把它括起来。
此外,子查询不能包含在COMPUTE或者FOR BROWSE子句,而且也不能包含在ORDER BY子句,除非在SELECT子句中使用了TOP运算符。 注……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
SQL Server支持的T-SQL语言特性之一是子查询(subquery),它可以内嵌在一个SELECT、INSERT、UPDATE或DELETE语句中。你可以定义一个T-SQL子查询,然后将其放在SQL语句中任何一个允许使用表达式的地方。例如,你可以在一个SELECT语句的SELECT列表中内嵌一个子查询,或者在WHERE子句中包含一个子查询作为一个查询条件。
当把一个T-SQL子查询内嵌到SQL语句的时候,你必须用括号把它括起来。此外,子查询不能包含在COMPUTE或者FOR BROWSE子句,而且也不能包含在ORDER BY子句,除非在SELECT子句中使用了TOP运算符。
注意:有时,子查询又被称为内部选择或内部查询。嵌入子查询的语句被称为外部选择或外部查询。
你可以将包含子查询的语句改写为用连接方式表达的语句。在某些情况下,这将会提高性能,尤其是你必须通过子查询返回的大的结果集来遍历由外部查询返回的每一行。在过去的文章中,我写了很多关于在SQL Server中创建连接的基础知识。
使用T-SQL子查询作为表达式
在一个T-SQL语句中包含子查询是一种常见的方式,就像在SELECT列表中使用列表达式一样。你只须简单地像其他列表达式一样包括子查询。让我们来看几个例子说明子查询是如何工作的。
注意:本文中的例子是基于AdventureWorks2008示例数据库,其被安装在本地的SQL Server 2008实例中。
在下面的例子中,我定义了一个返回销售代表平均销售金额的子查询:
SELECT FirstName + ' ' + LastName AS FullName, ROUND(SalesYTD, 2) AS SalesYTD, ( SELECT ROUND(AVG(SalesYTD), 2) FROM Sales.vSalesPerson WHERE JobTitle = 'Sales Representative' ) AS AvgSales FROM Sales.vSalesPerson WHERE BusinessEntityID = 275 |
SELECT列表中第三个列表达式就是子查询。请注意,它是用括号括起来的。然后我定义了一个叫AvgSales的列别名。如果你单独运行这个子查询语句,那么将返回一个3,054,352.75的数字。由于子查询被定义为一个列表达式,那么返回值就是外部语句结果集的一个列值,如下表所示:
FullName | SalesYTD | AvgSales |
Michael Blythe | 4557045.05 | 3054352.75 |
在前面的例子中,子查询返回一个独立于外部语句的值。换句话说,你不需要任何外部语句的数据就可以从子查询中检索到你要的结果。你只需要知道所有销售代表的平均销售额。
翻译
相关推荐
-
有效的MySQL备份与恢复
如果您接手了一个MySQL生产系统,但不确定它是否运行了MySQL备份策略,这时需要做哪些保障措施呢?
-
找到Oracle数据库中性能最差的查询语句
“V$SQLAREA”和“ V$SQL”是非常有用的视图,在其中你可以查找发现执行效率最差的需要优化的SQL语句。
-
解读SQL Server数据库存储过程发展历史
SQL Server存储过程可以是Transact-SQL(T-SQL)语句,或者是.NET框架的公共语言运行时(CLR),它是专为方便数据库查询而设计的。
-
避免并解决Oracle变异表错误
在用合并语句来创建一个触发器时遇到变异表出错的问题该如何解决?Oracle数据库专家Dan Clamage为您做出了解答。