在sql中使用exists表示判斷子查詢是否存在記錄,它返回的是true或false欄位。如果有記錄返回,則返回值,否則返回為false。
exists做為where 條件時,是先對where 前的主查詢詢進行查詢,然後用主查詢的結果乙個乙個的代入exists的查詢進行判斷,如果為真則輸出當前這一條主查詢的結果,否則不輸出。
一般在使用exists時,它的語法結構如下:
select 欄位1,欄位2 from 表 where exists( 子查詢 )
在查詢時,一般情況下,子查詢會分成兩種情況:
情況a: 子查詢與外表的字段有關係時
select 欄位1 , 欄位2 from 表1 where exists (select 欄位1 , 欄位2 from 表2 where 表2.欄位2 = 表1.欄位2)
這時候,此sql語句相當於乙個關聯查詢。
它先執行表1的查詢,然後把錶1中的每一條記錄放到表2的條件中去查詢,如果存在,則顯示此條記錄。
例如,使用oralce,查詢emp中的職員大於1的所有部門。
select dname from dept t where exists (select deptno from emp t1 where t.deptno = t1.deptno);
查詢的結果如下:
accounting
research
sales
如果子查詢中的條件,字段換成表1中的字段,則結果如下:
select dname from dept t where exists (select deptno from emp t1 where t.deptno = '10');
accounting
在子查詢中只要與主表有關聯的關係,就可以把它們當成關聯查詢來處理。
情況b:子查詢與外表的字段沒有任何關聯的情況。
select 欄位1 , 欄位2 from 表1 where exists ( select * from 表2 where 表2.欄位 = 『 條件『)
在這種情況下,只要子查詢的條件成立,就會查詢出表1中的所有記錄,反之,如果子查詢中沒有查詢到記錄,則表1不會查詢出任何的記錄。
select dname from dept t where exists (select deptno from emp t1 where deptno = '10');
accounting
research
sales
operations
當子查詢的條件換成50時(在表2中不存在50的部門號)
select dname from dept t where exists (select deptno from emp t1 where deptno = '50');
當子查詢與主表不存在關聯關係時,簡單認為只要exists為乙個條件判斷,如果為true,就輸出所有記錄。如果為false則不輸出任何的記錄。
鳴謝:
SQL中關於EXISTS謂詞的理解
讓我們先看看exists的用法 exists代表存在量詞。帶有exists謂詞的子查詢不返回任何資料,只產生邏輯真值 true 或邏輯假值 false 例如,以下的sql語句 select sname from student where exists select from sc where sc...
SQL之對EXISTS謂詞的理解
一 首先明確幾點 exists相當於存在量詞彐 exists和not exists不返回任何資料,只返回邏輯真或者假由exists引出的子查詢,其目標列表示式通常都用 因為exists的子查詢只返回真值或者假值,不返回選擇出來的結果,因此,你給什麼樣的列名最後返回的都是true或者false,所以給...
對於SQL中EXISTS謂詞的理解
from student where exists select from sc where sc.sno student.sno and cno 1 在這裡插入 片本查詢涉及表student和sc表。我們可以這樣理解上面的sql語句做的事情 在student表中從頭到尾每次取乙個元組出來,用這個元...