iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 18
0

在探討邏輯運算子前,先幫大家回憶一下 Venn diagram (文氏圖、范恩圖......) 。它被用來概略的表達集合之間的關係。
圖片大概會像是這樣:

圖片中有 A, B 和 C 三個集合

  • 集合間相交的區塊,稱為「交集」=> 邏輯當中的 "AND"
  • 各自集合中,其所有包含的元素集合,稱為「聯集」 => 邏輯當中的 "OR"
  • 排除某個集合 => 邏輯當中的 "NOT"
  • OR - AND 區塊所形成的 "XOR"
  • "XNOR" 可以用 NOT 和 XOR 組合而成

如果覺得上面的提點太複雜,可以看下方的圖形敘述比較清楚。

vennDiagram

接著來實戰練習:

  1. 以之前的 Product 資料表例子,篩選出商品種類不是 fruit 的。
SELECT * FROM Product WHERE NOT category="fruit";

Day18Result1

  1. 選出電子產品且販售價格大於 10000
SELECT * FROM Product WHERE category="electronic device" AND sell_price > 10000;

Day18Result2

  1. 選出電子產品、且日期在 "2020-09-01" 或 "2020-09-06"
    當 AND 和 OR 同時使用時,AND 的優先權比較高。請配合情境加上 () 來確保結果正確
SELECT * FROM Product WHERE category="electronic device" AND (purchase_date="2020-09-01" OR purchase_date="2020-09-06");

Day18Result3

真偽表

在 WHERE 子句中使用邏輯運算子判斷兩個條件的 True / False 時,搭配兩個條件本身的 True / False,會出現以下的結果:

  • AND:兩個條件 P, Q 都要是 True,AND的所得結果才會是 True
P Q P AND Q
True True True
True False False
False True False
False False False
  • OR:跟 True 剛好相反,兩個條件 P, Q 都要是 False,OR的所得結果才會是 False
P Q P OR Q
True True True
True False True
False True True
False False False
  • NOT:原本為 True 的前方加上 NOT,就變成 False。若原本為 False,則結果反之

加上 NULL 後,情況變複雜了

SQL 中的邏輯判斷有一個特別的 UNKNOWN,當邏輯判斷遇上 NULL 的時候便會觸發。若以 AND 為例,這樣一來情況會變成有 3 * 3 = 9 種 (P,Q分別可能為 True / False / Unknown)

P Q P AND Q
True True True
True False False
True Unknown Unknown
False True False
False False False
False Unknown False
Unknown True Unknown
Unknown False False
Unknown Unknown Unknown

光以 AND 來說,「True 配上 Unknown 為 Unknown;但 False 配上 Unknown 為 False」就很容易讓人搞混了。所以若非必要,儘量不要使用 NULL 來從事邏輯判斷。


上一篇
Day17 - 比較運算子
下一篇
Day 19 - 利用內建函數來彙整資料
系列文
SQL 30天手把手入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言