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

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

除了在WHERE子句中使用包含比较运算符的子查询,你可以使用IN或NOT IN运算符。这些运算符让你比较一个值与由子查询返回的零或更多的值。对于IN运算符来说,如果该值不在子查询结果集中,查询条件将返回false且该行不包括在内。否则,一个true被返回,行被包括在内。

(NOT IN运算符正好与之相反)   在下例中,我使用IN运算符来比较TerritoryID列值和子查询返回值:   SELECT   BusinessEntityID,   TerritoryID,   SalesQuota,   SalesYTD   FROM   Sales.SalesPerson   WHERE   T……

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

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

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

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

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

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

除了在WHERE子句中使用包含比较运算符的子查询,你可以使用IN或NOT IN运算符。这些运算符让你比较一个值与由子查询返回的零或更多的值。对于IN运算符来说,如果该值不在子查询结果集中,查询条件将返回false且该行不包括在内。否则,一个true被返回,行被包括在内。(NOT IN运算符正好与之相反)

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

  SELECT
  BusinessEntityID,
  TerritoryID,
  SalesQuota,
  SalesYTD
  FROM
  Sales.SalesPerson
  WHERE
  TerritoryID IN
  (
  SELECT TerritoryID
  FROM Sales.SalesTerritory
  WHERE Name = 'northeast'
  OR Name = 'northwest'
  )
  ORDER BY TerritoryID, BusinessEntityID

  子查询返回东北地区和西北地区的TerritoryID值,分别是2和1。因此,在SalesPerson表中的TerritoryID列值必须等于1或2才会被包括在外部表的结果集中,如下表所示:

BusinessEntityIDTerritoryIDSalesQuotaSalesYTD
2801250000.000.00
2831250000.003587378.4257
2841300000.001931620.1835
2752300000.004557045.0459

  下面的例子是先前那个相同的,只是改用了NOT IN运算符:

  SELECT
  BusinessEntityID,
  TerritoryID,
  SalesQuota,
  SalesYTD
  FROM
  Sales.SalesPerson
  WHERE
  TerritoryID NOT IN
  (
  SELECT TerritoryID
  FROM Sales.SalesTerritory
  WHERE Name = 'northeast'
  OR Name = 'northwest'
  )
  ORDER BY TerritoryID, BusinessEntityID

  现在,外部语句返回除了TerritoryID值等于1或2之外的所有行,如下表所示:

BusinessEntityIDTerritoryIDSalesQuotaSalesYTD
2773250000.003857163.6332
2764250000.005200475.2313
2814250000.003018725.4858
2795300000.002811012.7151
2786250000.001764938.9859
2826250000.003189356.2465
2907250000.003827950.238
2888250000.002241204.0424
2869250000.001758385.926
28910250000.005015682.3752

  你也可以在除SELECT之外的语句中使用IN或NOT IN运算符。例如,下面的UPDATE语句中比较ModifiedDate列值和子查询返回值:

  UPDATEProduction.Illustration
  SET Diagram = NULL
  WHERE ModifiedDate IN
  (
  SELECT ModifiedDate
  FROM Production.Illustration
  WHERE ModifiedDate > '2005-01-01 00:00:00.000'
  )

  子查询返回所有的修改日期晚于2005年1月1日的记录行。如果Illustration表中ModifiedDate列值小于该日期的行就会被返回,该行的Diagram列值被更新为NULL。否则,不改变。

翻译

沈宏
沈宏

相关推荐

  • 对比SQL Server和MySQL数据库函数

    本文旨在帮助DBA评估MS SQL Server和MySQL数据库之间进行移植的挑战,主要对两种数据库的函数进行了对比,以及为了让实现无缝的迁移,你需要做哪些工作。

  • SQL Server CHARINDEX和PATINDEX详解

    patindex函数支持使用通配符,能用在非常多有变化的查找中。而charindex不能。根据你自己不同的情况,这两个函数对字符串的搜索、控制、分析非常有帮助。

  • SQL Server 2008中的T-SQL操作(二)

    T-SQL的基本特征就是数据类型、谓词和函数。数据类型都是参照ANSI SQL92标准的数据类型。T-SQL支持一系列有用的系统函数。