<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 9.22\. 子查詢表達式 本節描述PostgreSQL里面與SQL 兼容的子查詢表達式。所有本節中的表達式都返回布爾值(真/假)結果。 ## 9.22.1\. `EXISTS` ``` EXISTS (_subquery_) ``` `EXISTS`的參數是一個任意的`SELECT`語句,或者說_子查詢_。 系統對子查詢進行運算以判斷它是否返回行。如果它至少返回一行,那么`EXISTS`的結果就為 "真";如果子查詢沒有返回任何行,那么`EXISTS`的結果是"假"。 子查詢可以引用包圍它的查詢的變量,這些變量在該子查詢的每一次計算中都起常量的作用。 這個子查詢通常只是運行到能判斷它是否可以生成至少一行為止,而不是等到全部結束。 在這里寫有副作用的子查詢是不明智的(比如調用序列函數);這些副作用是否發生是很難判斷的。 因為結果只取決于是否會返回行,而不取決于這些行的內容, 所以這個子查詢的輸出列表通常是無關緊要的。一個常用的編碼習慣是用下面的形式寫 `EXISTS`測試:`EXISTS(SELECT 1 WHERE ...)`。 不過這條規則也有例外,比如那些使用`INTERSECT`的子查詢。 下面這個簡單的例子類似在`col2`上的一次內連接, 但是它為每個`tab1`的行生成最多一個輸出, 即使存在多個匹配`tab2`的行也如此: ``` SELECT col1 FROM tab1 WHERE EXISTS (SELECT 1 FROM tab2 WHERE col2 = tab1.col2); ``` ## 9.22.2\. `IN` ``` _expression_ IN (_subquery_) ``` 右邊是一個圓括弧括起來的子查詢,它必須只返回一個字段。 左邊表達式對子查詢結果的每一行進行一次計算和比較。如果找到任何相等的子查詢行, 則`IN`結果為"真"。如果沒有找到任何相等行,則結果為"假" (包括子查詢沒有返回任何行的情況)。 請注意,如果左邊表達式的值為 NULL ,或者沒有相等的右邊值并且至少有一個右邊行生成 NULL , 那么`IN`的結果將是 NULL ,而不是假。這個行為遵照 SQL 處理布爾值和 NULL 組合時的規則。 和`EXISTS`一樣,假設子查詢將被完全運行是不明智的。 ``` _row_constructor_ IN (_subquery_) ``` 左邊是一個行構造器(如[Section 4.2.13](#calibre_link-1524)所述),右邊是一個圓括弧括起來的子查詢, 它必須返回和左邊行構造器一樣多的字段。左邊表達式對子查詢結果的每一行進行一次計算和比較。 如果找到相等的子查詢行,則`IN`結果為"真"。如果沒有找到任何相等行, 則結果為"假"(包括子查詢沒有返回任何行的情況)。 表達式或子查詢行里的 NULL 遵照 SQL 處理布爾值和 NULL 組合時的規則。 如果兩個行對應的字段都相等且非空,那么這兩行相等;如果任意對應字段不等且非空, 那么這兩行不等;否則結果是未知(NULL)。如果每一行的結果都是不等或 NULL , 并且至少有一個 NULL ,那么`IN`的結果是 NULL 。 ## 9.22.3\. `NOT IN` ``` _expression_ NOT IN (_subquery_) ``` 右邊是一個圓括弧括起來的子查詢,它必須只返回一個字段。 左邊表達式對子查詢結果的每一行進行一次計算和比較。如果只找到不相等的子查詢行 (包括子查詢沒有返回任何行的情況),則`NOT IN`結果為"真"。 如果找到任何相等行,則結果為"假"。 請注意,如果左邊表達式的值為 NULL ,或者沒有相等的右邊值并且至少有一個右邊行生成 NULL , 那么`NOT IN`的結果將是 NULL ,而不是真。這個行為遵照 SQL 處理布爾值和 NULL 組合時的規則。 和`EXISTS`一樣,假設子查詢將被完全運行是不明智的。 ``` _row_constructor_ NOT IN (_subquery_) ``` 左邊是一個行構造器(如[Section 4.2.13](#calibre_link-1524)所述), 右邊是一個圓括弧括起來的子查詢,它必須返回和左邊行構造器一樣多的字段。 左邊表達式對子查詢結果的每一行進行一次計算和比較。如果只出現不相等的子查詢行, 則`NOT IN`結果為"真"。(包括子查詢沒有返回任何行的情況)。 如果找到相等的子查詢行,則結果為"假"。 表達式或子查詢行里的 NULL 遵照 SQL 處理布爾值和 NULL 組合時的規則。 如果兩個行對應的字段都相等且非空,那么這兩行相等;如果任意對應字段不等且非空, 那么這兩行不等;否則結果是未知(NULL)。如果每一行的結果都是不等或 NULL , 并且至少有一個 NULL ,那么`NOT IN`的結果是 NULL 。 ## 9.22.4\. `ANY`/`SOME` ``` _expression_ _operator_ ANY (_subquery_) _expression_ _operator_ SOME (_subquery_) ``` 右邊是一個圓括弧括起來的子查詢,它必須只返回一個字段。 左邊表達式使用`_operator_`對子查詢結果的每一行進行一次計算和比較, 其結果必須是布爾值。如果至少獲得一個真值,則`ANY`結果為"真"。 如果全部獲得假值,則結果是"假"(包括子查詢沒有返回任何行的情況)。 `SOME`是`ANY`的同意詞。`IN`等效于`= ANY`。 請注意,如果沒有獲得任何真值并且至少有一個右邊行在該操作符上生成 NULL , 那么`ANY`的結果將是 NULL ,而不是假。 這個行為遵照 SQL 處理布爾值和 NULL 組合時的規則。 和`EXISTS`一樣,假設子查詢將被完全運行是不明智的。 ``` _row_constructor_ _operator_ ANY (_subquery_) _row_constructor_ _operator_ SOME (_subquery_) ``` 左邊是一個行構造器(如[Section 4.2.13](#calibre_link-1524)所述), 右邊是一個圓括弧括起來的子查詢,它必須返回和左邊行構造器一樣多的字段。 左邊表達式使用`_operator_`對子查詢結果的每一行進行一次計算和比較。 如果至少獲得一個真值,則`ANY`結果為"真"。 如果全部獲得假值,則結果是"假"(包括子查詢沒有返回任何行的情況)。 如果沒有獲得任何真值并且至少有一個行返回 NULL ,那么結果將是 NULL。 查看[Section 9.23.5](#calibre_link-1525)獲取關于逐行比較的細節。 ## 9.22.5\. `ALL` ``` _expression_ _operator_ ALL (_subquery_) ``` 右邊是一個圓括弧括起來的子查詢,它必須只返回一個字段。 左邊表達式使用`_operator_`對子查詢結果的每一行進行一次計算和比較, 其結果必須是布爾值。如果全部獲得真值,`ALL`結果為"真" (包括子查詢沒有返回任何行的情況)。如果至少獲得一個假值,則結果是"假"。 如果比較不會返回任何假值,并且至少一個行返回 NULL,則結果為 NULL。 `NOT IN`等效于`&lt;&gt; ALL`。 和`EXISTS`一樣,假設子查詢將被完全運行是不明智的。 ``` _row_constructor_ _operator_ ALL (_subquery_) ``` 左邊是一個行構造器(如[Section 4.2.13](#calibre_link-1524)所述), 右邊是一個圓括弧括起來的子查詢,它必須返回和左邊行構造器一樣多的字段。 左邊表達式使用 `_operator_`對子查詢結果的每一行進行一次計算和比較。 如果全部獲得真值,`ALL`結果為"真" (包括子查詢沒有返回任何行的情況)。如果至少獲得一個假值,則結果是"假"。 如果比較不會返回任何假值,并且至少一個行返回 NULL,則結果為 NULL。 查看[Section 9.23.5](#calibre_link-1525)以獲取關于逐行比較的細節。 ## 9.22.6\. 逐行比較 ``` _row_constructor_ _operator_ (_subquery_) ``` 左邊是一個行構造器(如[Section 4.2.13](#calibre_link-1524)所述), 右邊是一個圓括弧括起來的子查詢,它必須返回和左邊行構造器一樣多的字段。 而且,該子查詢不能返回超過 1 行結果(返回零行相當于 NULL)。 左邊表達式對子查詢的唯一結果行進行計算和比較。 查看[Section 9.23.5](#calibre_link-1525)以獲取關于逐行比較的細節。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看