首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> SQL 基礎

SQL AND OR 運算符完整教學:複合條件邏輯、優先級與實戰範例

     編輯:SQL 基礎

SQL AND / OR 運算符完整教學


AND 與 OR 用於 WHERE 子句中組合多個條件。AND 要求所有條件皆真;OR 要求至少一條件為真。掌握優先級與括號分組是撰寫正確查詢的關鍵。


邏輯真值表

條件 A條件 BA AND BA OR B
TRUETRUETRUETRUE
TRUEFALSEFALSETRUE
FALSETRUEFALSETRUE
FALSEFALSEFALSEFALSE
NULLTRUENULLTRUE
NULLFALSEFALSENULL
NULLNULLNULLNULL

關鍵: SQL 為三值邏輯(TRUE、FALSE、NULL/UNKNOWN)。AND 遇 FALSE 短路為 FALSE;OR 遇 TRUE 短路為 TRUE;涉及 NULL 時結果可能為 UNKNOWN,導致列被過濾。


運算子優先級

  1. NOT
  2. AND
  3. OR

預設: AND 優先於 OR 執行。建議永遠使用括號明確分組,避免誤解與維護困難。


演示資料庫:RUNOOB 範例資料

Websites 表

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘寶         | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鳥教程     | https://www.runoob.com/    | 4689  | CN      |
| 4  | 微博         | https://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
+----+--------------+---------------------------+-------+---------+

實戰範例

範例 1:AND - country='CN' 且 alexa > 50

SELECT * FROM Websites
WHERE country = 'CN' AND alexa > 50;

輸出結果:

符合:淘寶(alexa=13? 不 >50)、菜鳥教程(4689>50)、微博(20? 不>50) → 僅菜鳥教程。

範例 2:OR - country='USA' 或 'CN'

SELECT * FROM Websites
WHERE country = 'USA' OR country = 'CN';

輸出結果:

排除 IND (stackoverflow),其餘 5 筆皆符合。

範例 3:結合 AND OR - 括號明確分組

SELECT * FROM Websites
WHERE alexa > 15 AND (country = 'CN' OR country = 'USA');

輸出結果:

邏輯:alexa > 15 且 (CN 或 USA)。Google(alexa=1) 被排除;Facebook(3) 被排除;其餘 4 筆符合。


等價轉換:IN 簡化多 OR

-- 等同於 country = 'USA' OR country = 'CN'
WHERE country IN ('USA', 'CN');

IN 更簡潔、效能較佳(優化器易轉為半連結),建議取代多個 OR。


實務建議

  • 永遠加括號:WHERE (A AND B) OR C 而非 WHERE A AND B OR C。
  • 善用 IN / NOT IN 替代多值 OR/AND。
  • 短路特性優化:將較易判斷為 FALSE 的條件放在 AND 左側,TRUE 的放在 OR 左側(視優化器而定)。
  • NULL 陷阱:WHERE col = 'value' OR col IS NULL 需額外處理 NULL,否則 col = 'value' 對 NULL 列回傳 UNKNOWN,整個 OR 可能為 UNKNOWN 而非 TRUE。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved