一、基本定義
SQL NOT IN 是 SQL 中一個常見的操作符,用於在 WHERE 子句中指定一個測試值集合,該測試值集合由用逗號分隔的值列表表示。 NOT IN 運算符與 IN 相反。它返回不在指定列表中的所有行。
二、基本語法
SELECT column_name(s) FROM table_name WHERE column_name NOT IN (value1, value2,...);
在上面的語法中:
- column_name(s) 指定要返回的列。
- table_name 指定要從中檢索數據的表。
- column_name 指定要測試值的列。
- value1、value2 等指定不允許存在於表中的值。
三、實例演示
例如,我們有一個用戶表 user,存儲了所有已註冊用戶的個人信息。現在我們要查詢所有沒有註冊國際短信業務的用戶信息:
SELECT * FROM user WHERE id NOT IN (SELECT user_id FROM international_sms);
在這個示例中,我們使用了子查詢來指定業務列表,然後列出了在 user 表中不匹配此列表的所有用戶。
四、應用案例
1. 刪除指定子查詢結果
假設我們有一個商品 sales 表和一個庫存 inventory 表。現在我們想在 inventory 表中刪除所有商品已售完的記錄。
DELETE FROM inventory WHERE product_id NOT IN (SELECT DISTINCT product_id FROM sales);
這裡,我們使用了 NOT IN 運算符和子查詢來指定應該從 inventory 表中刪除的記錄。
2. 查詢兩個表之間缺失的數據
假設我們有兩個表 t1 和 t2,每個表都包含一個 id 列。如果我們想知道在 t1 中存在但在 t2 中不存在的所有 id 值,可以按如下方式查詢:
SELECT t1.id FROM t1 WHERE t1.id NOT IN (SELECT t2.id FROM t2);
在這個示例中,我們使用了 NOT IN 和子查詢來返回在 t1 表中存在的但在 t2 表中不存在的所有 id 值。
3. 查詢滿足多個條件的數據
假設我們有一組訂單數據,包括訂單 ID、產品 ID 和銷售日期等信息。如果我們想查詢在兩個指定日期之間出售的所有產品,可以使用以下代碼:
SELECT * FROM orders WHERE date BETWEEN '2021-09-01' AND '2021-09-15' AND product_id NOT IN (SELECT product_id FROM returns);
在這個示例中,我們使用了 BETWEEN 和 NOT IN 運算符,以查詢滿足兩個條件的訂單。
總結
SQL NOT IN 命令可以用於在 WHERE 子句中指定一個測試值集合。它與 IN 命令相反,返回不在指定列表中的所有行。在實際的 SQL 應用中,NOT IN 通常與子查詢搭配使用,可以提高查詢的靈活性和效率,在數據處理中具有不可替代的作用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/186330.html