SQL - NOT 運算子

您好,有志於學習SQL的各位!我很興奮能夠引導你們進入SQL運算子的迷人世界,特別是NOT運算子。作為一個教學SQL多年的老師,我可以確保你們,掌握這個運算子將會大大提升你們的數據庫查詢技能。那麼,我們來深入了解一下吧!

SQL - NOT Operator

SQL NOT 運算子

NOT運算子就像那個總是反對你說法的朋友。它在SQL中用於否定一個條件,從而顛倒布爾表達式的結果。當你使用NOT時,你是在說,“給我所有不匹配這個條件的東西。”

讓我們從一個簡單的例子開始。假設我們有一個名為students的表,其中有idnameage這些列。

SELECT * FROM students WHERE NOT age = 20;

這個查詢會返回所有不是20歲的學生。就像在說,“顯示所有學生,但排除20歲的。”

這裡有另一個例子:

SELECT * FROM students WHERE NOT name = 'John';

這會給我們所有名字不是John的學生。可憐的John,總是被排除在外!

SQL NOT 運算子與 LIKE 一起使用

現在,讓我們將NOT與LIKE運算子結合起來,為查詢增加一點趣味。LIKE用於模式匹配,當與NOT結合時,它成為了一個基於模式排除的強大工具。

SELECT * FROM students WHERE name NOT LIKE 'A%';

這個查詢會返回所有名字不從'A'開頭的學生。就像在組織一個派對時說,“所有人都可以來,除了那些名字從A開頭的!”(對不起,Anna和Alex!)

這裡有另一個有趣的例子:

SELECT * FROM students WHERE email NOT LIKE '%@gmail.com';

這會給我們所有不使用Gmail的學生。也許他們是喜歡小眾電子郵件服務的潮人!

SQL NOT 運算子與 IN 一起使用

IN運算子用於在WHERE子句中指定多個值。當與NOT結合時,它允許我們排除一個值列表。

SELECT * FROM students WHERE age NOT IN (18, 19, 20);

這個查詢會返回所有不是18、19或20歲的學生。就像在說,“除了青少年和年輕人,顯示所有人!”

這裡有另一個例子:

SELECT * FROM courses WHERE department NOT IN ('Math', 'Physics', 'Chemistry');

這會給我們所有不是數學、物理或化學系 courses 的課程。對於那些想要避免嚴格科學的人來說,這很完美!

SQL NOT 運算子與 IS NULL 一起使用

SQL中的NULL值代表缺失或未知的信息。IS NULL運算子用於測試NULL值,當與NOT結合時,它幫助我們找到非NULL值。

SELECT * FROM students WHERE phone_number IS NOT NULL;

這個查詢會返回所有提供了電話號碼的學生。就像在說,“顯示所有我可以真正打電話的學生!”

這裡有另一個實用的例子:

SELECT * FROM assignments WHERE submission_date IS NOT NULL;

這會給我們所有已經提交的作業。這個結果集中沒有拖延症患者!

SQL NOT 運算子與 BETWEEN 一起使用

BETWEEN運算子選擇在給定範圍內的值。當與NOT一起使用時,它選擇範圍外的值。

SELECT * FROM products WHERE price NOT BETWEEN 10 AND 20;

這個查詢會返回所有價格小於10或大於20的產品。這對於預算購物者和奢侈品尋求者來說都很完美!

另一個例子:

SELECT * FROM events WHERE event_date NOT BETWEEN '2023-01-01' AND '2023-12-31';

這會給我們所有2023年以外的事件。時間旅行者,請注意!

SQL NOT 運算子與 EXISTS 一起使用

EXISTS運算子用於測試子查詢中是否存在任何記錄。當與NOT結合時,它檢查是否存在滿足子查詢的記錄。

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

這個看起來複雜的查詢其實很簡單:它返回所有沒有下過訂單的客戶。就像是找到你數據庫中的所有“窺窗者”!

另一個例子:

SELECT * FROM employees e
WHERE NOT EXISTS (SELECT 1 FROM managers m WHERE m.employee_id = e.id);

這會給我們所有不是經理的員工。這是找尋你組織中“工蜂”的好方法!

總結我們討論過的所有NOT運算子方法,這裡有一個方便的表格:

方法 描述 示例
NOT與基本比較 否定一個簡單條件 WHERE NOT age = 20
NOT與LIKE 排除模式 WHERE name NOT LIKE 'A%'
NOT與IN 排除一列表值 WHERE age NOT IN (18, 19, 20)
NOT與IS NULL 找到非NULL值 WHERE phone_number IS NOT NULL
NOT與BETWEEN 排除範圍 WHERE price NOT BETWEEN 10 AND 20
NOT與EXISTS 在子查詢中檢查不存在 WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id)

那麼,各位,這就是我們對NOT運算子的探討。記住,在SQL和生活中,有時知道你不想要什麼和想要什麼一樣重要。祝你們查詢愉快,並且結果永遠不是NULL!

Credits: Image by storyset