CodeGym /課程 /SQL SELF /邏輯運算子 (AND, OR, NOT):條件組合

邏輯運算子 (AND, OR, NOT):條件組合

SQL SELF
等級 2 , 課堂 2
開放

邏輯運算子就是幫你把查詢裡的條件組合起來,讓你可以更靈活地篩選資料。你大概在寫程式語言時就遇過這些東西了。如果把查詢比喻成信箱的垃圾郵件過濾程式,那邏輯運算子就像是決定信件要進「垃圾郵件」還是留在「收件匣」的規則。

SQL 是一個很常用來查資料或分析資料的工具。邏輯運算子(ANDORNOT)可以讓你在一個查詢裡組合多個條件,這樣就能回答更複雜的問題,比如:

  • 哪些學生超過 18 歲 而且 成績是 "A"?
  • 哪些商品屬於「電子產品」「家用電器」?
  • 哪些客戶沒買過東西

來看看 SQL 裡三個主要的邏輯運算子:

  1. AND:兩個條件都要成立。
  2. OR:只要有一個條件成立就好。
  3. NOT:把條件反過來(否定)。

運算子 AND:兩個條件都要成立

AND 運算子可以讓你指定,只有當兩個條件都成立時,這一列資料才會被選出來。

語法

SELECT 欄位1, 欄位2
FROM 表格
WHERE 條件1 AND 條件2;

範例 1:篩選超過 18 歲 而且 成績是 "A" 的學生

假設我們有一個 students 表:

id name age grade
1 Alex 20 A
2 Maria 19 B
3 Otto 17 A
4 Anna 22 A

查詢:

SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A';

結果:

name age grade
Alex 20 A
Anna 22 A

範例 2:篩選部門是 "HR" 而且 薪水超過 50000 的員工

SELECT name, department, salary
FROM employees
WHERE department = 'HR' AND salary > 50000;

運算子 OR:只要有一個條件成立

OR 運算子用在你想選出只要有一個條件成立的資料列時。

語法

SELECT 欄位1, 欄位2
FROM 表格
WHERE 條件1 OR 條件2;

範例 1:篩選成績是 "A" "B" 的學生

SELECT name, age, grade
FROM students
WHERE grade = 'A' OR grade = 'B';

結果:

name age grade
Alex 20 A
Maria 19 B
Otto 17 A
Anna 22 A

範例 2:商品屬於「電子產品」價格小於 100

products 表:

product_id name category price
1 電視 電子產品 300
2 熨斗 家用電器 50
3 智慧型手機 電子產品 700
4 熱水壺 家用電器 80
SELECT name, category, price
FROM products
WHERE category = '電子產品' OR price < 100;

結果:

name category price
電視 電子產品 300
熨斗 家用電器 50
熱水壺 家用電器 80
智慧型手機 電子產品 700

運算子 NOT:條件反向

如果 ANDOR 是讓條件成立,NOT 就是反過來:它會選出那些不符合條件的資料列。

語法

SELECT 欄位1, 欄位2
FROM 表格
WHERE NOT 條件;

範例 1:篩選沒有成績 "A" 的學生

SELECT name, age, grade
FROM students
WHERE NOT grade = 'A';

結果:

name age grade
Maria 19 B

範例 2:選出不屬於「電子產品」類別的商品

SELECT name, category, price
FROM products
WHERE NOT category = '電子產品';

邏輯運算子的組合

你可以把邏輯運算子組合起來,做出更複雜的條件。比如你想選出超過 18 歲 而且 成績是 "A" "B" 的學生,就可以組合 ANDOR

組合語法

SELECT 欄位1, 欄位2
FROM 表格
WHERE (條件1 AND 條件2) OR 條件3;

範例:超過 18 歲且成績 "A" 成績 "B" 的學生

SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR grade = 'B';

結果:

name age grade
Alex 20 A
Anna 22 A
Maria 19 B

運算子的執行優先順序

要記得,SQL 執行邏輯運算子的順序是這樣:

  1. NOT
  2. AND
  3. OR

你可以用括號來改變執行順序。沒加括號的話,結果可能會跟你想的不一樣喔!

範例:有括號跟沒括號的比較

這個查詢會發生什麼事?

SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A' OR grade = 'B';

這個查詢會選出:

  1. 超過 18 歲 而且 成績是 "A" 的學生。
  2. 成績是 "B" 的學生。

運算子的執行優先順序會讓結果跟加括號一樣:

SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR (grade = 'B');

但如果你加了括號:

SELECT name, age, grade
FROM students
WHERE age > 18 AND (grade = 'A' OR grade = 'B');

這樣就只會選出超過 18 歲而且成績是 "A" "B" 的學生。括號真的會改變一切!

使用邏輯運算子的常見錯誤

  1. 忘記加括號。這很容易讓結果跟你預期的不一樣,尤其是 ANDOR 混用時。
  2. NOT 的時候沒搞清楚到底會排除哪些資料。
  3. 邏輯運算子用錯。比如該用 OR 結果用了 AND,或反過來。
  4. 條件太複雜。太長的條件串一堆 ANDORNOT 又沒加註解,會讓查詢很難懂。

這些運算子就是寫複雜查詢的基礎啦。現在你已經可以寫出不只會動,還能精準找到你要的資料的查詢囉!

2
任務
SQL SELF, 等級 2, 課堂 2
上鎖
使用 `AND` 運算子來過濾資料
使用 `AND` 運算子來過濾資料
2
任務
SQL SELF, 等級 2, 課堂 2
上鎖
使用 `OR` 運算子來過濾資料
使用 `OR` 運算子來過濾資料
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION