| PostgreSQL 7.4 文檔 | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 9. 函數和操作符 | Fast Forward | Next |
本節描述一個特殊的構造,用于在組和數值之間進行多重比較。這些形式 語法上和前面一節的子查詢形式相關,但是不涉及子查詢。這種形式涉及的 數組子表達式是 PostgreSQL 的擴展; 其它的是 SQL 兼容的。所有本節記錄的表達式形式 都返回布爾(Boolean)結果(真/假)。
expression IN (value[, ...])右手邊是一個圓括弧包圍的標量列表。如果左手邊的表達式結果等于任何右手邊表達式 中的一個,結果為"真"。它是下面的方式的縮寫
expression = value1 OR expression = value2 OR ...
請注意如果左手邊表達式生成空,或者沒有相等的右手邊數值並且至少有一個 右手邊的表達式生成空,那麼 IN 構造的結果將為空, 而不是假。這是與 SQL 處理布爾和空值在一起的問題的時候的一般規則一致的。
expression NOT IN (value[, ...])右手邊是一個圓括弧包圍的標量列表。如果左手邊的表達式結果不等于所有右手邊表達式 的值,結果為"真"。它是下面的方式的縮寫
expression <> value1 AND expression <> value2 AND ...
請注意如果左手邊表達式生成空,或者沒有相等的右手邊數值並且至少有一個 右手邊的表達式生成空,那麼 NOT IN 構造的結果將為空, 而不是假。這是與 SQL 處理布爾和空值在一起的問題的時候的一般規則一致的。
提示: x NOT IN y 在所有場合都等效于 NOT (x IN y)。 但是,在處理空值的時候,用 NOT IN 比用 IN 更容易迷惑新手。 最好用正邏輯來表達你的條件。
expression operator ANY (array expression) expression operator SOME (array expression)
右手邊是一個圓括弧包圍的表達式,它必須生成一個數組值。左手邊表達式使用給出的操作符 operator,對數組的每個元素進行計算和比較,這個操作符必須 生成布爾結果。如果獲取了任何真值結果,那麼 ANY 的結果是 "true"。 如果沒有找到真值結果(包括數組只有零元素的特例),那麼結果是 "false"。
SOME 是 ANY 的同義詞。
expression operator ALL (array expression)
右手邊是一個圓括弧包圍的表達式,它必須生成一個數組值。左手邊表達式使用給出的操作符 operator,對數組的每個元素進行計算和比較,這個操作符必須 生成布爾結果。如果所有比較都生成真值結果,那麼 ALL 的結果是 "true" (包括數組只有零元素的特例)。 如果有任何假值結果,那麼結果是 "false"。
(expression [, expression ...]) operator (expression [, expression ...])
兩遍都是一個標量列表;兩個列表必須等長。兩邊都被計算並且逐行比較。 目前,只允許用 = 和 <> 操作符進行 逐行比較。如果兩行相等,結果是 "true",否則是假。
通常,表達式或者子查詢行裡的 NULL 是按照 SQL 布爾表達式的一般規則 進行組合的.如果兩個行對應的成員都是非空並且相等,那麼認為這兩行 相等;如果任意對應成員為非空且不等,那麼該兩行不等; 否則這樣的行比較的結果是未知(NULL).