in
not in
exists
not exists
使用exists,oracle會首先檢查主查詢,然後執行子查詢直到它找到第乙個匹配項,這就節省了時間。oracle在執行in子查詢時,首先執行 子查詢,並將獲得的結果列表存放在乙個加了索引的臨時表中。在執行子查詢之前,系統先將主查詢掛起
,待子查詢執行完畢,存放在臨時表中以後再執行主查詢。 這也就是使用exists比使用in通常查詢速度快的原因。
1
)select
*from t1 where
exists
(select
1from t2 where t1.a=t2.a);2
)select
*from t1 where t1.a in
(select t2.a from t2)
;t1資料量小而t2資料量非常大時,t1 exits 效率高
t1資料量非常大而t2資料量小時,t1>>t2 時,2
)in 的查詢效率高。1)
select name from employee where name notin(
select name from student);2
)select name from employee where
notexists
(select name from student)
;
百思不得其解
後來發現sql報錯 不一定是 sql的錯 有時候資料也有原因
**例子
eg:
create
table a1
(id varchar2(10)
,name varchar2(10)
);create
table a
(id number,
name varchar2(10)
);create
table b1
(id number ,
aid varchar2(10)
,name varchar2(10)
);create
table b
(id number,
aid number,
name varchar2(10)
);insert
into a1 values(1
,'a1');
insert
into a1 values(2
,'a2');
insert
into a1 values
('a'
,'a3');
insert
into a values(1
,'a1');
insert
into a values(2
,'a2');
insert
into a values(3
,'a3');
insert
into b values(1
,1,'b1');
insert
into b values(2
,2,'b2');
insert
into b values(3
,2,'b3');
insert
into b1 values(1
,1,'b1');
insert
into b1 values(2
,2,'b2');
insert
into b1 values
('3'
,'a'
,'b3');
select
*from a1;
--相當於員工表
select
*from a;
select
*from b;
---相當於客戶經理
select
*from b1;
select
*from a left
join b1 on a.id=b1.aid ;
select
*from b1 where
exists
(select a.id from a where a.id=b1.aid)
;select
*from b1 where b1.aid in
(select a.id from a)
;
not exists 深入用法
問題 詳細描述 當exists 裡面的表 有多個條件的話
drop
table ck;
drop
table ck2;
create
table ck
(id number(10)
,id2 number(10)
,name varchar2(20)
);create
table ck2
(id number(10)
,id2 number(10)
,*** varchar2(20)
);insert
into ck values(1
,1,'張三');
insert
into ck values(2
,2,'李四');
insert
into ck values(3
,3,'王五');
insert
into ck values(4
,3,'週六');
insert
into ck values(5
,4,'77');
insert
into ck values(6
,5,'張三');
insert
into ck2 values(1
,1,'0000000000000000');
insert
into ck2 values(2
,1,'0000000000000000');
insert
into ck2 values(2
,2,'0000000000000000');
insert
into ck2 values(7
,3,'0000000000000000');
select
*from ck2 where
notexists
(select
*from ck where ck2.id=ck.id and ck.id2=ck2.id2 and ck.name<>
'00'
);
什麼時候用GET?什麼時候用POST?
get和post兩種方法都是將資料送到伺服器,但你該用哪一種呢?http標準包含這兩種方法是為了達到不同的目的。post用於建立資源,資源的內容會被編入http請示的內容中。例如,處理訂貨表單 在資料庫中加入新資料行等。當請求無 時 如進行搜尋 便可使用get方法 當請求有 時 如新增資料行 則用p...
什麼時候用堆,什麼時候用棧?
參考文章 c 面試題之記憶體分配 一 首先,回顧一下c c 的記憶體分配機制。乙個c c 程式編譯時記憶體分為5大儲存區 堆區 棧區 靜態區 全域性區 文字常量區 儲存字串常量 程式 區 存放二進位制程式 下面主要闡述前面三個。1 靜態儲存區域 靜態儲存區域的 內存在程式編譯時就已經分配好,這塊內存...
什麼時候用DFS,什麼時候用BFS
什麼時候用 dfs,什麼時候用 bfs?二維陣列的題目,n小於 20的,適用 dfs。而一般 n 200 n 1000 這種,一定不可能用 dfs去做。而且並不只是整個題目不能用 dfs,其中的 每一步也不能使用 dfs。bfs的基本步驟 1.將初始點 乙個或多個 加入乙個集合尾 2.從集合頭取出點...