SQL - NOT 運算子
您好,有志於學習SQL的各位!我很興奮能夠引導你們進入SQL運算子的迷人世界,特別是NOT運算子。作為一個教學SQL多年的老師,我可以確保你們,掌握這個運算子將會大大提升你們的數據庫查詢技能。那麼,我們來深入了解一下吧!
SQL NOT 運算子
NOT運算子就像那個總是反對你說法的朋友。它在SQL中用於否定一個條件,從而顛倒布爾表達式的結果。當你使用NOT時,你是在說,“給我所有不匹配這個條件的東西。”
讓我們從一個簡單的例子開始。假設我們有一個名為students
的表,其中有id
、name
和age
這些列。
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