mysql中雖然有連線查詢實作多表連線查詢,但是連線查詢的效能很差,因此便出現了子查詢。
1、理論上,子查詢可以出現在查詢語句的任何位置,但實際應用中多出現在from後和where後面。出現在from後的子查詢結果通常是多行多列的,充當臨時表;而出現在where後面的子查詢結果通常是單行單列,充當條件:
2、where後作為條件的子查詢多與「=」、「!=」、「>」、「<」等比較運算子一起使用。結果雖然通常是單行單列,但是有的時候也會用單行多列,而且有的時候還會傳回多行單列。如果是多行單列的情況,則多與in、any、all、exists結合使用:
in和not in:
其中in表示包含於後邊子查詢結果集裡的任一個,not in表示不包含於後邊結果集裡的任一個。上圖子查詢的結果中,回傳depart_id為1、2、4,因此第一個查詢就會查出emp中所有depart_id是1或2或4的,第二個就會查出既不是1也不是2也不是4的。
all:
=any的用法和in的效果是一樣的;>any是說要大於子查詢結果集裡的任一個就可以,簡單理解就是只要大於結果集中最小的那個就可以;