sql中exists和notexists用法總結(並和in的比較)

首先頭腦中有三點概念:html

一、EXISTS子查詢找到的提交算法

NOT EXISTS 子查詢中 找不到的提交sql

說明:不要去翻譯爲存在和不存在,把腦殼搞暈。spa

二、創建程序循環的概念,這是一個動態的查詢過程。如 FOR循環 。翻譯

三、Exists執行的流程Exists首先執行外層查詢,再執行內存查詢,與IN相反。 流程爲首先取出外code

層中的第 一 元組, 再執行內層查詢,將外層表的第一元組代入,若內層查詢爲真,即有結果htm

時。返回外層表中的第一元組,接着取出第二元組,執行相同的算法。一直到掃描完外層整表 。索引

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
      for ( int i =0;  i<>EOFout;i++)
 
              {
 
                  for ( int j = 0 ; j<eofint,j++) pre= "" ><pre class= "brush:sql;" >exists(子查詢或sql語句)
not exeists(子查詢或sql語句)</pre>
<p>exists和 not exists 是不關心子查詢出來的結果集,他們只關心是否有結果。</p>
<pre class= "brush:sql;" >一、
Select * from TableA a where Exists (子查詢或sql語句)/ Not Exists (子查詢或sql語句);
 
exists(子查詢或sql語句)  //子查詢有結果,即exists成立, select 纔會查出結果,不然查詢結果爲空 null
not exeists(子查詢或sql語句)  //子查詢沒有有結果,即 not exists成立, select 纔會查出結果,不然查詢結果爲空 null </pre>
<p> in not in 是關心結果集</p>
<p>經過使用EXISTS,Oracle會首先檢查主查詢,而後運行子查詢直到它找到第一個匹配項,這就節省了時間。Oracle在執行 IN 子查詢時,首先執行子查詢,並將得到的結果列表存放在一個加了索引的臨時表中。在執行子查詢以前,系統先將主查詢掛起,待子查詢執行完畢,存放在臨時表中之後再執行主查詢。這也就是使用EXISTS比使用 IN 一般查詢速度快的緣由</p>
</eofint,j++)>
相關文章
相關標籤/搜索