T-SQL子查询与操作符的组合:比较运算符

日期: 2010-07-28 作者:Robert Sheldon翻译:沈宏 来源:TechTarget中国 英文

使用子查询和比较运算符   在WHERE子句中将子查询作为查询条件是一个常见的场景,特别是与比较运算符一起使用。让我们来看几个使用比较运算符和子查询的SELECT语句例子。在下面的SELECT语句中,我使用子查询来查找“brakes”子类的ProductSubcategoryID值:   SELECT   ProductID,   Name,   ProductSubcategoryID   FROM Production.Product   WHERE ProductSubcategoryID =   (   SELECT ProductSubcate……

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

使用子查询和比较运算符

  在WHERE子句中将子查询作为查询条件是一个常见的场景,特别是与比较运算符一起使用。让我们来看几个使用比较运算符和子查询的SELECT语句例子。在下面的SELECT语句中,我使用子查询来查找“brakes”子类的ProductSubcategoryID值:

  SELECT
  ProductID,
  Name,
  ProductSubcategoryID
  FROM Production.Product
  WHERE ProductSubcategoryID =
  (
  SELECT ProductSubcategoryID
  FROM Production.ProductSubcategory
  WHERE Name = 'brakes'
  )
  在这个例子中,子查询返回值等于6的ProductSubcategoryID。然后该值与Product表中的ProductSubcategoryID列值相比较。如果值相等,则该行被返回。请注意,我使用等于(=)比较运算符用来比较ProductSubcategoryID列值和子查询结果。下表显示了由外部SELECT语句返回的结果集:

ProductIDNameProductSubcategoryID
907Rear Brakes6
948Front Brakes6

  你还可以使用其他比较运算符用来比较一个列值和子查询的结果集。例如,下面的语句使用不等于(<>)比较运算符:

  SELECT
  ProductID,
  Name,
  ProductSubcategoryID
  FROM Production.Product
  WHERE ProductSubcategoryID <>
  (
  SELECT ProductSubcategoryID
  FROM Production.ProductSubcategory
  WHERE Name = 'mountain bikes'
  )

  在这个例子中,子查询返回“Mountain Bikes”子类的ProductSubcategoryID值。因此,外部的SELECT语句将返回除了那些ProductSubcategoryID列值不等于1的所有行。

  在下例中,我使用大于(>)比较运算符比较SalesYTD列值和子查询返回值:

  SELECT
  FirstName + ' ' + LastName AS FullName,
  ROUND(SalesYTD, 2) AS SalesYTD
  FROM
  Sales.vSalesPerson
  WHERE
  SalesYTD >
  (
  SELECT AVG(SalesYTD)
  FROM Sales.vSalesPerson
  WHERE JobTitle = 'Sales Representative'
  )

  这个子查询返回所有销售代表的平均销售金额3,054,352.7524。因此,外部语句的结果集是销售额超过这一金额的所有记录,如下表所示:

FullNameSalesYTD
Michael Blythe4557045.05
Linda Mitchell5200475.23
Jillian Carson3857163.63
José Saraiva3189356.25
David Campbell3587378.43
Jae Pak5015682.38
Ranjit Varkey Chudukatil3827950.24

  当你使用比较运算符比较一个值和子查询时,该子查询必须返回单值,除非还包括ALL或ANY运算符。对于ALL运算符来说,被比较的列值必须大于子查询返回的所有的值。对于ANY运算符来说,被比较的列值大于子查询返回的任何一个值即可。

  在下例中,我使用ALL运算符比较SalesYTD列值和子查询返回值:

  SELECT
  FirstName + ' ' + LastName AS FullName,
  JobTitle,
  ROUND(SalesYTD, 2) AS SalesYTD
  FROM
  Sales.vSalesPerson
  WHERE
  SalesYTD > ALL
  (
  SELECT AVG(SalesYTD)
  FROM Sales.vSalesPerson
  GROUP BY JobTitle
  )

  因为我使用了ALL运算符,子查询可以返回多个值。在这个例子中,子查询返回每个工作组的平均销售数量。下表显示了子查询返回的结果集:

636440.251
677558.4653
219088.8836
3054352.7524

  SalesYTD列值必须大于所有子查询返回的值。这意味着SalesYTD列值必须超过3,054,352.7524。下表显示了外部SELECT语句返回的结果集:

FullName JobTitleSalesYTD
Michael BlytheSales Representative4557045.05
Linda MitchellSales Representative5200475.23
Jillian CarsonSales Representative3857163.63
José SaraivaSales Representative3189356.25
David CampbellSales Representative3587378.43
Jae PakSales Representative5015682.38
Ranjit Varkey ChudukatilSales Representative3827950.24

  正如你所看到的,只有销售额超过3,054,352.7524的销售代表才会包括在结果中。

翻译

沈宏
沈宏

相关推荐