在探討邏輯運算子前,先幫大家回憶一下 Venn diagram (文氏圖、范恩圖......) 。它被用來概略的表達集合之間的關係。
圖片大概會像是這樣:
圖片中有 A, B 和 C 三個集合
如果覺得上面的提點太複雜,可以看下方的圖形敘述比較清楚。
接著來實戰練習:
SELECT * FROM Product WHERE NOT category="fruit";
SELECT * FROM Product WHERE category="electronic device" AND sell_price > 10000;
SELECT * FROM Product WHERE category="electronic device" AND (purchase_date="2020-09-01" OR purchase_date="2020-09-06");
在 WHERE 子句中使用邏輯運算子判斷兩個條件的 True / False 時,搭配兩個條件本身的 True / False,會出現以下的結果:
P | Q | P AND Q |
---|---|---|
True | True | True |
True | False | False |
False | True | False |
False | False | False |
P | Q | P OR Q |
---|---|---|
True | True | True |
True | False | True |
False | True | True |
False | False | False |
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 來從事邏輯判斷。