SQL EXISTS學習筆記

2021-06-19 21:31:14 字數 1261 閱讀 5436

sql exists學習筆記

最初遇到exists這個函式,是在建表語句裡面。

drop table if exists ***;

下午工作的時候,需要完成:假如資料已經存在資料庫的時候,執行更新語句;假如資料不存在,執行插入語句;

假如通過儲存過程來完成的話,配合if--else語句,可以實現。大概思路如下:

1. 檢視資料是否存在,將得到的資料通過into這個關鍵字給某個變數賦值。

2. 假如變數和預設值不相同,則資料存在,執行update操作

3. 假如變數和預設值相同,則資料不存在,執行insert操作

另一種就是和程式語言配合。

比較希望通過儲存過程來實現,原因如下:

1. 相對第二種實現方式,減少了資料庫與程式語言之間的互動,整個計算過程都在資料庫那邊執行,效率會比較高。

2. 這段時間剛學習了儲存過程,想多嘗試

在決定通過儲存過程來實現之後,就想如何才能再優化。

如下:

begin

if exists (select * from rate_list_day) then

select "update語句";

else

select "insert語句";

end if;

end

在學習的時候,遇到乙個問題:

select * from complain_list2
這個資料表是有資料的

select exists(select * from complain_list2)
# 正常 結果1就代表著資料存在,通過了exists的檢驗

問題出現了!

select exists(select * from complain_list2 limit 0)
這裡面的limit 0使得查不出任何記錄,為什麼依然還是通過exists的驗證得出結果1呢?

這個問題,沒搞懂,下次吧,或者哪位網友知道。



SQL exists 查詢原理

通過使用exists,oracle會首先檢查主查詢,然後執行子查詢直到它找到第乙個匹配項,這就節省了時間。oracle在執行in子查詢時,首先執行子查詢,並將獲得的結果列表存放在乙個加了索引的臨時表中。在執行子查詢之前,系統先將主查詢掛起,待子查詢執行完畢,存放在臨時表中以後再執行主查詢。這也就是使...

Sql EXISTS 用於子查詢

exists用於檢查子查詢是否至少會返回一行資料,該子查詢實際上並不返回任何資料,而是返回值true或false。exists 指定乙個子查詢,檢測行的存在。語法 exists subquery。引數 subquery 是乙個受限的 select 語句 不允許有 compute 子句和 into 關...

sql exists和in的區別

1.in或not in 裡面不能有null,否則會得不到結果 exists在子查詢中使用null仍返回結果集。2.exists 子查詢是乙個受限的select語句 不允許有compute和into 結果型別為boolean 若子查詢包含行,則返回true in確定給定的值是否與子查詢或列表中的值相匹...