1.HAVING和WHERE: WHERE 和 HAVING 的作用對象不一樣。WHERE作用於基本表或視圖,挑出滿足條件的元組。HAVING作用於組(group),一般配合GROUP BY 使用。 2.ANY 和 ALL: all 是將後面的內容看成一個整體, 如: >all (select ag ...
1.HAVING和WHERE:
WHERE 和 HAVING 的作用對象不一樣。WHERE作用於基本表或視圖,挑出滿足條件的元組。HAVING作用於組(group),一般配合GROUP BY 使用。
2.ANY 和 ALL:
all 是將後面的內容看成一個整體,
如: >all (select age from student where sex = 'girl')上面一句語句表示比所有女生年紀大(比年紀最大的女生的年紀還要大)相當於內容的 and 語句。
如果是any,它表示其中任意一個條件都可以 >any (select age from student where sex = 'girl')
這一句表示的意思是,只要比任意一個女生年紀大就可以了(比年紀最小的女生的年紀大)相當於內容中添加了or 語句。
其他還有很多種應用,比如<>ANY 代表 不等於查詢結果中的某個值。
3.IN和EXIST:
EXIST:存在,後面一般都是子查詢,當子查詢返回行數時,exists返回true。如果內層查詢結果為null的話,返回false.
select * from class where exists (select'x"form stu where stu.cid=class.cid)
當in和exists在查詢效率上比較時,in查詢的效率快於exists的查詢效率 。
exists(xxxxx)後面的子查詢被稱做相關子查詢, 他是不返回列表的值的.
IN:包含 ,查詢和所有女生年齡相同的男生 select * from stu where sex='男' and age in(select age from stu where sex='女')
in()後面的子查詢 是返回結果集的,換句話說執行次序和exists()不一樣.
子查詢先產生結果集, 然後主查詢再去結果集里去找符合要求的欄位列表去.符合要求的輸出,反之則不輸出.
參考:https://www.cnblogs.com/xuanhai/p/5810918.html