在本教學中,將學習如何使用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
運算符來檢查值是否與列表中的任何值或由子查詢返回的值匹配。
上一篇:
SQL Server數據查詢
下一篇:
SQL Server連接表