1. 程式人生 > >in與exist , not in與not exist 的區別

in與exist , not in與not exist 的區別

exists : 強調的是是否返回結果集,不要求知道返回什麼, 比如:

  select name from student where sex = 'm' and mark exists(select 1 fom grade where ...) ,只要
exists引導的子句有結果集返回,那麼exists這個條件就算成立了,大家注意返回的欄位始終為1,如果改成“select 2 from grade where ...”,那麼返回的欄位就是2,這個數字沒有意義。所以exists子句不在乎返回什麼,而是在乎是不是有結果集返回。

而 exists 與 in 最大的區別在於 in引導的子句只能返回一個欄位,比如:
  select name from student where sex = 'm' and mark in (select 1,2,3 from grade where ...

)  
,in子句返回了三個欄位,這是不正確的,exists子句是允許的,但in只允許有一個欄位返回,在1,2,3中隨便去了兩個欄位即可。

而not exists 和not in 分別是exists 和 in 的 對立面。

exists (sql 返回結果集為真)  
not exists (sql 不返回結果集為真