在本教程中,将学习如何使用SQL Server IN
运算符来检查值是否与列表中的任何值匹配。
SQL Server IN运算符简介
IN
运算符是一个逻辑运算符,用于测试指定的值是否与列表中的任何值匹配。
以下显示了SQL Server IN
运算符的语法:
column | expression IN ( v1, v2, v3, ...)
在上面语法中,
- 首先,
column | expression
指定要测试的列或表达式。 - 其次,指定要测试的值列表。所有值必须与列或表达式的类型具有相同的类型。
如果列或表达式中的值等于列表中的任何值,则IN
运算符的结果为TRUE
。IN
运算符等效于多个OR
运算符,因此,以下谓词是等效的:
column IN (v1, v2, v3)
column = v1 OR column = v2 OR column = v3
要取消IN
运算符,请使用NOT IN
运算符,如下所示:
column | expression NOT IN ( v1, v2, v3, ...)
如果列或表达式不等于列表中的任何值,则NOT IN
运算符的结果为TRUE
。
除了值列表之外,还可以使用子查询返回带有IN
运算符的值列表,如下所示:
column | expression IN (subquery)
在此语法中,子查询是一个SELECT
语句,它返回单个列的值列表。请注意,如果列表包含NULL
,则IN
或NOT IN
的结果将为UNKNOWN
。
SQL Server OR运算符示例
我们将使用示例数据库中的products
表进行演示,表的结构如下:
A. SQL Server IN带有值列表示例
以下语句查找价格为以下值之一的产品:89.99
,109.99
和159.99
:
执行上面查询语句,得到以下结果 -
上面的查询等效于以下使用OR
运算符的查询:
SELECT
product_name,
list_price
FROM
production.products
WHERE
list_price = 89.99 OR list_price = 109.99 OR list_price = 159.99
ORDER BY
list_price;
要查找价格不是上述价格的产品,请使用NOT IN
运算符,如以下查询中所示:
SELECT
product_name,
list_price
FROM
production.products
WHERE
list_price NOT IN (89.99, 109.99, 159.99)
ORDER BY
list_price;
执行上面查询语句,得到以下结果 -
B. SQL Server IN带有子查询的示例
以下查询返回位于商店编号(store_id
)为1
中,其数量大于或等于30
的产品的产品编号列表:
SELECT
product_id
FROM
production.stocks
WHERE
store_id = 1 AND quantity >= 30;
执行上面查询语句,得到以下结果 -
可以将上面的查询用作子查询,如以下查询所示:
SELECT
product_name,
list_price
FROM
production.products
WHERE
product_id IN (
SELECT
product_id
FROM
production.stocks
WHERE
store_id = 1 AND quantity >= 30
)
ORDER BY
product_name;
执行上面查询语句,得到以下结果 -
在这个例子中:
- 首先,子查询返回了产品ID列表。
- 其次,外部查询检索产品名称和产品ID与子查询返回的任何值匹配的产品价格。
有关子查询的更多信息,请阅读子查询教程。
在本教程中,学习了如何使用SQL Server IN
运算符来检查值是否与列表中的任何值或由子查询返回的值匹配。