資料庫 EXISTS的用法

2021-08-28 05:31:19 字數 2216 閱讀 2136

2023年10月23日 09:37:08 airbundey 閱讀數:3310 標籤: 資料庫

exists

exists用於檢查子查詢是否至少會返回一行資料,該子查詢實際上並不返回任何資料,而是返回值true或false

exists 指定乙個子查詢,檢測 行 的存在。

語法: exists subquery

引數: subquery 是乙個受限的 select 語句 (不允許有 compute 子句和 into 關鍵字)。

結果型別: boolean 如果子查詢包含行,則返回 true ,否則返回 flase 。

使用:user表:

user_1011表:

語句:

select * from user u1 where exists(select * from user_1011 u2 where u1.name = u2.name);
結果:

注意,子查詢中與主查詢中的是否有關聯會影響到結果!

在某些情況下,exists關鍵字可以用=any和in來代替功能。

select * from tablein where exists(select bid from tableex where bname=tablein.aname)select * from tablein where aname in(select bname from tableex)

select * from tablein where exists(select bid from tableex where bname=tablein.aname)select * from tablein where aname=any(select bname from tableex)總結:exists(包括 not exists )子句的返回值是乙個bool值。 exists內部有乙個子查詢語句(select ... from...), 我將其稱為exist的內查詢語句。其內查詢語句返回乙個結果集。 exists子句根據其內查詢語句的結果集空或者非空,返回乙個布林值。

一種通俗的可以理解為:將外查詢表的每一行,代入內查詢作為檢驗,如果內查詢返回的結果取非空值,則exists子句返回true,這一行行可作為外查詢的結果行,否則不能作為結果。

分析器會先看語句的第乙個詞,當它發現第乙個詞是select關鍵字的時候,它會跳到from關鍵字,然後通過from關鍵字找到表名並把表裝入記憶體。接著是找where關鍵字,如果找不到則返回到select找欄位解析,如果找到where,則分析其中的條件,完成後再回到select分析字段。最後形成一張我們要的虛表。

where關鍵字後面的是條件表示式。條件表示式計算完成後,會有乙個返回值,即非0或0,非0即為真(true),0即為假(false)。同理where後面的條件也有乙個返回值,真或假,來確定接下來執不執行select。

分析器先找到關鍵字select,然後跳到from關鍵字將student表匯入記憶體,並通過指標找到第一條記錄,接著找到where關鍵字計算它的條件表示式,如果為真那麼把這條記錄裝到乙個虛表當中,指標再指向下一條記錄。如果為假那麼指標直接指向下一條記錄,而不進行其它操作。一直檢索完整個表,並把檢索出來的虛擬表返回給使用者。exists是條件表示式的一部分,它也有乙個返回值(true或false)。

在插入記錄前,需要檢查這條記錄是否已經存在,只有當記錄不存在時才執行插入操作,可以通過使用 exists 條件句防止插入重覆記錄。

insert into tablein (aname,a***) 

select top 1 '張三', '男' from tablein

where not exists (select * from tablein where tablein.aid = 7)

exists與in的使用效率的問題,通常情況下採用exists要比in效率高,因為in不走索引,但要看實際情況具體使用:

in適合於外表大而內錶小的情況;exists適合於外表小而內錶大的情況。

資料庫中的EXISTS語句

exists語句的語法 1 當exists語句中的查詢結果為非空時返回值為true 2 當exists語句中的查詢結果為空時返回值為false exists語句在關係代數中表示存在。什麼時候使用exists語句 1 首先要明確在sql server中帶有in謂詞,比較運算子的查詢語句都可以轉換成ex...

資料庫中IN和EXISTS的區別

乙個是問in exist的區別,乙個是not in和not exists的區別 把這兩個很普遍性的比較關心的問題總結回答一下。in和exist的區別 從sql程式設計角度來說,in直觀,exists不直觀多乙個select,in可以用於各種子查詢,而exists好像只用於關聯子查詢 從效能上來看 e...

資料庫中IN和EXISTS的區別

乙個是問in exist的區別,乙個是not in和not exists的區別 把這兩個很普遍性的比較關心的問題總結回答一下。in和exist的區別 從sql程式設計角度來說,in直觀,exists不直觀多乙個select,in可以用於各種子查詢,而exists好像只用於關聯子查詢 從效能上來看 e...