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確定給定的值是否與子查詢或列表中的值相匹...