日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

        歡迎訪問 生活随笔!

        生活随笔

        當前位置: 首頁 > 运维知识 > 数据库 >内容正文

        数据库

        PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.22. 子查询表达式

        發布時間:2025/3/15 数据库 19 豆豆
        生活随笔 收集整理的這篇文章主要介紹了 PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.22. 子查询表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

        9.22.?子查詢表達式

        9.22.1.?EXISTS9.22.2.?IN9.22.3.?NOT IN9.22.4.?ANY/SOME9.22.5.?ALL9.22.6. 單一行比較

        本節描述PostgreSQL中可用的SQL兼容的子查詢表達式。所有本節中成文的表達式都返回布爾值(真/假)結果。

        9.22.1.?EXISTS

        EXISTS (subquery)

        EXISTS的參數是一個任意的SELECT語句, 或者說子查詢。系統對子查詢進行運算以判斷它是否返回行。如果它至少返回一行,那么EXISTS的結果就為; 如果子查詢沒有返回行,那么EXISTS的結果是

        子查詢可以引用來自周圍的查詢的變量,這些變量在該子查詢的任何一次計算中都起常量的作用。

        這個子查詢通常只是運行到能判斷它是否可以返回至少一行為止, 而不是等到全部結束。在這里寫任何有副作用的子查詢都是不明智的(例如調用序列函數);這些副作用是否發生是很難判斷的。

        因為結果只取決于是否會返回行,而不取決于這些行的內容, 所以這個子查詢的輸出列表通常是無關緊要的。一個常用的編碼習慣是用EXISTS(SELECT 1 WHERE ...)的形式寫所有的EXISTS測試。不過這條規則有例外,例如那些使用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的結果就是。 如果沒有找到相等行,那么結果是(包括子查詢沒有返回任何行的情況)。

        請注意如果左手邊表達式得到空值,或者沒有相等的右手邊值, 并且至少有一個右手邊行得到空值,那么IN結構的結果將是空值,而不是假。這個行為是遵照 SQL 處理空值的一般規則的。

        和EXISTS一樣,假設子查詢將被完成運行完全是不明智的。

        row_constructor IN (subquery)

        這種形式的IN的左手邊是一個行構造器, 如第?4.2.13?節中所述。 右手邊是一個圓括弧子查詢,它必須返回和左手邊返回的行中表達式所構成的完全一樣多的列。 左手邊表達式將被計算并與子查詢結果逐行進行比較。如果找到任意相等的子查詢行,則IN的結果為true。如果沒有找到相等行, 那么結果為(包括子查詢不返回行的情況)。

        通常,表達式或者子查詢行里的空值是按照 SQL 布爾表達式的一般規則進行組合的。 如果兩個行對應的成員都非空并且相等,那么認為這兩行相等;如果任意對應成員為非空且不等,那么這兩行不等; 否則這樣的行比較的結果是未知(空值)。如果所有行的結果要么是不等, 要么是空值,并且至少有一個空值,那么IN的結果是空值。

        9.22.3.?NOT IN

        expression NOT IN (subquery)

        右手邊是一個用圓括弧包圍的子查詢,它必須返回正好一個列。左手邊表達式將被計算并與子查詢結果逐行進行比較。 如果只找到不相等的子查詢行(包括子查詢不返回行的情況),那么NOT IN的結果是。 如果找到任何相等行,則結果為

        請注意如果左手邊表達式得到空值,或者沒有相等的右手邊值, 并且至少有一個右手邊行得到空值,那么NOT IN結構的結果將是空值,而不是真。這個行為是遵照 SQL 處理空值的一般規則的。

        和EXISTS一樣,假設子查詢會完全結束是不明智的。

        row_constructor NOT IN (subquery)

        這種形式的NOT IN的左手邊是一個行構造器, 如第?4.2.13?節中所述。 右手邊是一個圓括弧子查詢,它必須返回和左手邊返回的行中表達式所構成的完全一樣多的列。 左手邊表達式將被計算并與子查詢結果逐行進行比較。如果找到不等于子查詢行的行,則NOT IN的結果為true。如果找到相等行, 那么結果為(包括子查詢不返回行的情況)。

        通常,表達式或者子查詢行里的空值是按照 SQL 布爾表達式的一般規則進行組合的。 如果兩個行對應的成員都非空并且相等,那么認為這兩行相等;如果任意對應成員為非空且不等,那么這兩行不等; 否則這樣的行比較的結果是未知(空值)。如果所有行的結果要么是不等, 要么是空值,并且至少有一個空值,那么NOT IN的結果是空值。

        9.22.4.?ANY/SOME

        expression operator ANY (subquery) expression operator SOME (subquery)

        這種形式的右手邊是一個圓括弧括起來的子查詢, 它必須返回正好一個列。左手邊表達式將被計算并使用給出的?操作符對子查詢結果逐行進行比較。如果獲得任何真值結果,那么ANY的結果就是。 如果沒有找到真值結果,那么結果是(包括子查詢沒有返回任何行的情況)。

        SOME是ANY的同義詞。IN等價于= ANY。

        請注意如果沒有任何成功并且至少有一個右手邊行為該操作符結果生成空值, 那么ANY結構的結果將是空值,而不是假。 這個行為是遵照 SQL 處理空值布爾組合的一般規則制定的。

        和EXISTS一樣,假設子查詢將被完全運行是不明智的。

        row_constructor operator ANY (subquery) row_constructor operator SOME (subquery)

        這種形式的左手邊是一個行構造器,如第?4.2.13?節所述。右手邊是一個圓括弧括起來的子查詢, 它必須返回和左手邊列表給出的表達式一樣多的列。左手邊表達式將被計算并使用給出的操作符對子查詢結果逐行進行比較。如果比較為任何子查詢行返回真,則ANY的結果為。如果比較對每一個子查詢行都返回假,則結果為(包括子查詢不返回行的情況)。如果比較不對任何行返回真并且至少對一行返回 NULL,則結果為 NULL。

        關于行構造器比較的詳細含義請見第?9.23.5?節。

        9.22.5.?ALL

        expression operator ALL (subquery)

        ALL 的這種形式的右手邊是一個圓括弧括起來的子查詢, 它必須只返回一列。左手邊表達式將被計算并使用給出的?操作符對子查詢結果逐行進行比較。該操作符必須生成布爾結果。 如果所有行得到真(包括子查詢沒有返回任何行的情況),ALL的結果就是。如果沒有存在任何假值結果,那么結果是。如果比較為任何行都不返回假并且對至少一行返回 NULL,則結果為 NULL。

        NOT IN等價于<> ALL。

        和EXISTS一樣,假設子查詢將被完全運行是不明智的。

        row_constructor operator ALL (subquery)

        ALL的這種形式的左手邊是一個行構造器,如第?4.2.13?節所述。 右手邊是一個圓括弧括起來的子查詢,它必須返回和左手邊行中表達式一樣多的列。 左手邊表達式將被計算并使用給出的?操作符對子查詢結果逐行進行比較。如果對所有子查詢行該比較都返回真,那么ALL的結果就是(包括子查詢沒有返回任何行的情況)。如果對任何子查詢行比較返回假,則結果為。如果比較對任何子查詢行都不返回假并且對至少一行返回 NULL,則結果為 NULL。

        關于行構造器比較的詳細含義請見第?9.23.5?節。

        9.22.6.?單一行比較

        row_constructor operator (subquery)

        左手邊是一個行構造器,如第?4.2.13?節所述。 右手邊是一個圓括弧括起來的子查詢,該查詢必須返回和左手邊行中表達式數目完全一樣的列。 另外,該子查詢不能返回超過一行的數量(如果它返回零行,那么結果就是空值)。 左手邊被計算并逐行與右手邊的子查詢結果行比較。

        關于行構造器比較的詳細含義請見第?9.23.5?節。

        本文轉自PostgreSQL中文社區,原文鏈接:9.22.?子查詢表達式

        總結

        以上是生活随笔為你收集整理的PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.22. 子查询表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

        如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。