IN 運算子

IN 運算子用來判斷欄位值是否在指定的值集合中,是多個 OR 條件的簡化寫法。

語法

SELECT column1, column2, ...
FROM table_name
WHERE column_name IN (value1, value2, value3, ...);

基本用法

假設有一個 customers 資料表:

idnamecity
1張一台北
2王二高雄
3李三台中
4陳四台南

查詢住在台北或高雄的客戶:

SELECT * FROM customers
WHERE city IN ('台北', '高雄');

結果:

idnamecity
1張一台北
2王二高雄

這等同於:

SELECT * FROM customers
WHERE city = '台北' OR city = '高雄';

NOT IN

NOT IN 用來排除在集合中的值:

SELECT * FROM customers
WHERE city NOT IN ('台北', '高雄');

結果:

idnamecity
3李三台中
4陳四台南

搭配子查詢

IN 常與子查詢搭配使用:

-- 查詢有下過訂單的客戶
SELECT * FROM customers
WHERE id IN (SELECT customer_id FROM orders);

-- 查詢沒有下過訂單的客戶
SELECT * FROM customers
WHERE id NOT IN (SELECT customer_id FROM orders);

注意事項

NULL 值的處理

如果 IN 的集合中包含 NULL,或是子查詢結果中有 NULL,NOT IN 可能不會如預期運作:

-- 假設 orders 中 customer_id 有 NULL 值
-- 這可能不會返回任何結果!
SELECT * FROM customers
WHERE id NOT IN (SELECT customer_id FROM orders);

建議使用 NOT EXISTS 替代:

SELECT * FROM customers c
WHERE NOT EXISTS (
    SELECT 1 FROM orders o WHERE o.customer_id = c.id
);