在實際開發(fā)中,我們常常需要比較兩個或多個表數(shù)據(jù)的差別,比較那些數(shù)據(jù)相同那些數(shù)據(jù)不相同,這時候我們有1下3種方法可使用:1. IN或NOT IN,2. EXIST或NOTEXIST,3.使用連接查詢(inner join,left join 或 right join)。
看下面的數(shù)據(jù),我們準備選擇出在depart_info中的pid在user_info中不存在的depart_信息。
有表1:depart_info
表2:user_info
方法1:采取NOT IN
IN和NOT IN后面接的是1個集合,in 是把外表和內(nèi)表作hash 連接。
方法2:采取NOT EXISTS
EXISTS 和 NOT EXISTS是對外表作loop循環(huán),每次loop循環(huán)再對內(nèi)表進行查詢,
方法3:采取連接查詢
連接查詢包括:
1、自連接(join 同等于inner join ):查詢結果為兩邊都存在的數(shù)據(jù)
2、左連接 left join :返回左側全部數(shù)據(jù),右側存在返回,不存在為null
3、 右連接 right join :返回右側全部數(shù)據(jù),左側存在返回,不存在為null
4、 全連接 full join :只要某個表中存在就返回,另外一個不存在為nul
總結:
1、對小量數(shù)據(jù)exists 和in差不多,如果數(shù)據(jù)較多的話(在百萬行)建議使用exists,更好的話使用關聯(lián)查詢。
2、數(shù)量較小,如果兩個表中1個較小,1個是大表,則子查詢表大的用exists,子查詢表小的用in。
3、如果子查詢中返回的任意1條記錄含有空值,則IN查詢將不返回任何記錄,這點需注意。
4、返回數(shù)據(jù)是兩個表的多個字段數(shù)據(jù),建議使用關聯(lián)查詢。不但速度快,而且返回數(shù)據(jù)可以自定義。