in和exists的用法
1
in:
可以使用where id in(……)的方式镣丑,后面接的是一個查詢結(jié)果娱两,類似一個集合,例如select id…或者(1趣竣,2,3)遥缕,返回的也是一個集合宵呛。exists:
可以使用where exists(……)或者and exists(……)的方式,只要括號里返回結(jié)果不為空宝穗,exists就返回true,否則為false逮矛。
這兩個都是子查詢,不過對于in膜蠢,是先執(zhí)行in子句,然后再和主查詢鏈接挑围,得到查詢結(jié)果。
對于exists模捂,先執(zhí)行主查詢,然后對每條查詢記錄狂男,在exists中判斷是否為true品腹,如果是true則保留這條記錄,否則舍棄這條數(shù)據(jù)舞吭,最后返回整個查詢結(jié)果。
總結(jié):對于主查詢里的為表A蔑穴,子查詢里的表為B。當子查詢表B小時存和,用in比較好衷旅,因為先執(zhí)行B可以減少比較次數(shù)(這里可能不是很對,但大概就是這意思)柿顶。當主查詢表A小時,用exists比較好。