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的销售代表才会包括在结果中。

作者

Robert Sheldon
Robert Sheldon

自由技术撰稿人和技术咨询专家,曾出版和发布若干本书籍、文章和培训教材,重点关注Windows、数据库、商务智能等。

翻译

沈宏
沈宏

相关推荐