除了在WHERE子句中使用包含比较运算符的子查询,你可以使用IN或NOT IN运算符。这些运算符让你比较一个值与由子查询返回的零或更多的值。对于IN运算符来说,如果该值不在子查询结果集中,查询条件将返回false且该行不包括在内。否则,一个true被返回,行被包括在内。
(NOT IN运算符正好与之相反) 在下例中,我使用IN运算符来比较TerritoryID列值和子查询返回值: SELECT BusinessEntityID, TerritoryID, SalesQuota, SalesYTD FROM Sales.SalesPerson WHERE T……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属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才会被包括在外部表的结果集中,如下表所示:
BusinessEntityID | TerritoryID | SalesQuota | SalesYTD |
280 | 1 | 250000.00 | 0.00 |
283 | 1 | 250000.00 | 3587378.4257 |
284 | 1 | 300000.00 | 1931620.1835 |
275 | 2 | 300000.00 | 4557045.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之外的所有行,如下表所示:
BusinessEntityID | TerritoryID | SalesQuota | SalesYTD |
277 | 3 | 250000.00 | 3857163.6332 |
276 | 4 | 250000.00 | 5200475.2313 |
281 | 4 | 250000.00 | 3018725.4858 |
279 | 5 | 300000.00 | 2811012.7151 |
278 | 6 | 250000.00 | 1764938.9859 |
282 | 6 | 250000.00 | 3189356.2465 |
290 | 7 | 250000.00 | 3827950.238 |
288 | 8 | 250000.00 | 2241204.0424 |
286 | 9 | 250000.00 | 1758385.926 |
289 | 10 | 250000.00 | 5015682.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支持一系列有用的系统函数。