在SQL Server中如何使用子查询(上)

日期: 2010-07-26 作者:Robert Sheldon翻译:沈宏 来源: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运算符。   注……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

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

  在前面的例子中,子查询返回一个独立于外部语句的值。换句话说,你不需要任何外部语句的数据就可以从子查询中检索到你要的结果。你只需要知道所有销售代表的平均销售额。

翻译

沈宏
沈宏

相关推荐