本週,我們將暫停「一些常見的 SQL 查詢錯誤」系列,轉為探討 SQL 中的述詞(Predicate)。原因是述詞將成為「常見的 SQL 查詢錯誤」系列的第 3 部分。
什麼是述詞?
述詞只是一個評估為 TRUE、FALSE 或 UNKNOWN 的運算式。述詞通常用在 WHERE 和 HAVING 子句的搜尋條件中、FROM 子句的聯結條件中,以及任何其他需要布爾值的查詢部分中。
述詞有多種類型,包括:
- 比較
- LIKE
- BETWEEN
- IN
- EXISTS
- IS NULL (/INTEGER/DECIMAL/FLOAT...)
在本文的剩餘部分中,我們將研究上述述詞類型的幾個範例。
比較述詞
每當我們在運算式中使用比較運算子時,例如 WHERE employee_salary > 100000
,我們都在構建一個評估為 TRUE、FALSE 或 UNKNOWN 的述詞。比較運算子包括:
- = 等於
- > 大於
- < 小於
- >= 大於或等於
- <= 小於或等於
- <> 不等於
因此,比較述詞的形式為:
expression_1 comparison_operator expression_2
在比較述詞中,expression2 也可以是子査詢。如果子査詢不傳回任何列,則比較述詞評估為 FALSE。
LIKE 述詞
在 SQL 中,第一的模式比對述詞是 LIKE 運算子,因為它將欄值與指定的模式進行比較。LIKE 適用於任何字元或日期資料類型。以下是一個範例:
BETWEEN 述詞
BETWEEN 運算子指定一個範圍,該範圍判斷限定值的下限和上限。例如,在述詞 income BETWEEN 5000 AND 20000
中,選取資料的範圍是大於或等於 5000 且小於或等於 20000。BETWEEN 運算子可用於數字、文字和日期資料類型。以下是一個範例:
IN 述詞
IN 運算子允許指定用於查詢搜尋的兩個或多個運算式。如果相應欄的值等於 IN 述詞指定的其中一個運算式,則條件的結果為 TRUE:
EXISTS 述詞
EXISTS 述詞接受子查詢作為引數。如果子查詢傳回一列或多列,則傳回 TRUE。如果子查詢傳回零列,則傳回 FALSE。
以下是一個範例:
IS NULL 述詞
使用 IS NULL 來判斷運算式是否為 NULL,因為你無法使用 = 比較運算子測試 NULL。當套用於列值運算式時,所有元素都必須測試相同。
IS NULL 述詞的形式為:
IS [NOT] NULL
例如,如果 x 為 NULL,則運算式 x IS NULL
為 TRUE。
當運算式為 BOOLEAN 類型時,IS UNKNOWN 是 IS NULL 的同義詞。
以下是的查詢使用 IS NOT NULL 述詞來取得所有姓氏為非 NULL 值的演員:
總結
在本章中,我們中斷了定期的文章,為你帶來關於 SQL 述詞的重要課程。述詞通常用在 WHERE 和 HAVING 子句的搜尋條件中、FROM 子句的聯結條件中。它是評估為 TRUE、FALSE 或 UNKNOWN 的運算式。在下週的「常見的 SQL 查詢錯誤」系列中,述詞將再次出現。