Transact-SQL 参考

IN

确定给定的值是否与子查询或列表中的值相匹配。

语法

test_expression [ NOT ] IN
    (
        
subquery
        
| expression [ ,...n ]
    )

参数

test_expression

是任何有效的 Microsoft® SQL Server™ 表达式。

subquery

是包含某列结果集的子查询。该列必须与 test_expression 有相同的数据类型。

expression [,...n]

一个表达式列表,用来测试是否匹配。所有的表达式必须和 test_expression 具有相同的类型。

结果类型

布尔型

结果值

如果 test_expression subquery 返回的任何值相等,或与逗号分隔的列表中的任何 expression 相等,那么结果值就为 TRUE。否则,结果值为 FALSE。

使用 NOT IN 对返回值取反。

示例
A. 对比 OR 和 IN

下面的示例选择名称和州的列表,列表中列出所有居住在加利福尼亚、印地安纳或马里兰州的作者。

USE pubs

SELECT au_lname, state
FROM authors
WHERE state = 'CA' OR state = 'IN' OR state = 'MD'

但是,也可以使用 IN 获得相同的结果:

USE pubs

SELECT au_lname, state
FROM authors
WHERE state IN ('CA', 'IN', 'MD')

以下是上面任一查询的结果集:

au_lname   state
--------   -----
White      CA
Green      CA
Carson      CA
O'Leary      CA
Straight      CA
Bennet      CA
Dull      CA
Gringlesby      CA
Locksley      CA
Yokomoto      CA
DeFrance      IN
Stringer      CA
MacFeather      CA
Karsen      CA
Panteley            MD
Hunter            CA
McBadden            CA

(17 row(s) affected)
B. 将 IN 与子查询一起使用

下面的示例在 titleauthor 表中查找从任一种书得到的版税少于 50% 的所有作者的 au_ids,然后从 authors 表中选择 au_idstitleauthor 查询结果匹配的所有作者的姓名。结果显示有一些作者属于得到的版税少于 50% 的一类。

USE pubs
SELECT au_lname, au_fname
FROM authors
WHERE au_id IN
   (SELECT au_id
   FROM titleauthor
   WHERE royaltyper < 50)

下面是结果集:

au_lname                                 au_fname             
---------------------------------------- -------------------- 
Green                                    Marjorie             
O'Leary                                  Michael              
Gringlesby                               Burt                 
Yokomoto                                 Akiko                
MacFeather                               Stearns              
Ringer                                   Anne                 

(6 row(s) affected)
C. 将 NOT IN 与子查询一起使用

NOT IN 将找到那些与值列表中的项目不匹配的作者。下面的示例查找至少有一种书取得不少于 50% 的版税的作者姓名:

USE pubs
SELECT au_lname, au_fname
FROM authors
WHERE au_id NOT IN
   (SELECT au_id
   FROM titleauthor
   WHERE royaltyper < 50)

下面是结果集:

au_lname                                 au_fname             
---------------------------------------- -------------------- 
White                                    Johnson              
Carson                                   Cheryl               
Straight                                 Dean                 
Smith                                    Meander              
Bennet                                   Abraham              
Dull                                     Ann                  
Locksley                                 Charlene             
Greene                                   Morningstar          
Blotchet-Halls                           Reginald             
del Castillo                             Innes                
DeFrance                                 Michel               
Stringer                                 Dirk                 
Karsen                                   Livia                
Panteley                                 Sylvia               
Hunter                                   Sheryl               
McBadden                                 Heather              
Ringer                                   Albert               

(17 row(s) affected)

请参见

CASE

表达式

函数

运算符

SELECT

WHERE