exists做為where 條件時,是先對where 前的主查詢詢進行查詢,然后用主查詢的結果一個一個的代入exists的查詢進行判斷,如果為真則輸出當前這一條主查詢的結果,否則不輸出。查詢時,一般情況下,子查詢會分成兩種情況:1.子查詢與外表的字段有關系時select 字段1 , 字段2 from 表1 where exists (select 字段1 , 字段2 from 表2 where 表2.字段2 = 表1.字段2)這時候,此SQL語句相當于一個關聯查詢。它先執行表1的查詢,然后把表1中的每一條記錄放到表2的條件中去查詢,如果存在,則顯示此條記錄。
2.子查詢與外表的字段沒有任何關聯Select 字段1 , 字段2 from 表1 where exists ( select * from 表2 where 表2.字段 = ‘ 條件‘)在這種情況下,只要子查詢的條件成立,就會查詢出表1中的所有記錄,反之,如果子查詢中沒有查詢到記錄,則表1不會查詢出任何的記錄。當子查詢與主表不存在關聯關系時,簡單認為只要exists為一個條件判斷,如果為true,就輸出所有記錄。如果為false則不輸出任何的記錄。
建議:
建議主表記錄少的時候用exists
新聞熱點
疑難解答