首先頭腦中有三點概念: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++)>
|