T-SQL子查询与操作符的组合:EXIST、NOT EXIST

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

你可以在WHERE子句中使用另一套EXIST和NOT EXIST运算符和子查询。EXIST运算符检查子查询是否返回值。如果一个或多个值返回,则该行返回;否则不是。(NOT EXIST运算符与之恰恰相反)   在下面的SELECT语句中,检查是否存在一个叫作“brake”的产品名称:   SELECT   ProductID,   Name,   ProductModelID   FROM Production.Product   WHERE EXISTS   (   SELECT *   FROM Production.ProductModel   WH……

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

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

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

你可以在WHERE子句中使用另一套EXIST和NOT EXIST运算符和子查询。EXIST运算符检查子查询是否返回值。如果一个或多个值返回,则该行返回;否则不是。(NOT EXIST运算符与之恰恰相反)

  在下面的SELECT语句中,检查是否存在一个叫作“brake”的产品名称:

  SELECT
  ProductID,
  Name,
  ProductModelID
  FROM Production.Product
  WHERE EXISTS
  (
  SELECT *
  FROM Production.ProductModel
  WHERE ProductModelID = Production.Product.
  ProductModelID
  AND Name LIKE '%brakes%'
  )
  首先注意的是,子查询的SELECT语句在SELECT列表中使用了星号(*)。既然你仅仅检查是否存在一个返回行,列名是没有必要的。还要注意,我创建了一个关联子查询以便外部查询和子查询的ProductModelID值可以匹配。因此,每一行必须匹配ProductModelID列值且名称必须包括“brakes”。如果子查询返回一个值,EXIST运算符返回true,并且该行被返回。下表显示了外部语句返回的结果集:

ProductIDNameProductModelID
907Rear Brakes128
948Front Brakes102

  你也可以很轻松地使用NOT EXIST运算符检查是否有结果返回。下面的例子与先前那个相同,除了使用NOT EXIST运算符:

  SELECT
  ProductID,
  Name,
  ProductModelID
  FROM Production.Product
  WHERE NOT EXISTS
  (
  SELECT *
  FROM Production.ProductModel
  WHERE ProductModelID = Production.Product.
  ProductModelID
  AND Name LIKE '%brakes%'
  )

  现在的语句返回502行,而不是2行;每次子查询不返回结果,结果集就返回一行。

  正如上面的例子所示,当你需要使用数据子集的时候,子查询提供了很大的灵活性。有关子查询的详细信息以及更多范例,请参阅SQL Server联机丛书。此外,一定要记住,在某些情况下使用子查询可能是一个更好的解决方案。在此期间,尝试了不同类型的子查询和多变的复杂性,以更好地理解它们的作用。

翻译

沈宏
沈宏

相关推荐