SQL: 左鏈接(left join )或者右鏈接( right join )在 on 後面直接跟and 或 where條件的區別

我的理解如下幾條:sql

  • on 後直接跟and條件則只能對_從表_(B)的結果進行篩選,對主表A數據無影響;即對B表的結果集根據and後面的條件進行篩選後再將數據與主表A進行鏈接
  • 若是要對_主表_(A)的結果進行篩選,則篩選條件通常放在where後面;即where 後的條件則是先將主表A和從表B鏈接後再對其總結果集C進行篩選。
  • where後的條件不管是針對主表A仍是從表B的篩選都有用

話很少說,先看執行效果就知道了。code

select A.id,A.name,B.area_id,B.park_name from t_sys_city_code A
left join eimm_park_inf B on A.id=B.area_id  
order by A.id,B.park_name

執行結果1:on 後and A.id=B.area_id  這個條件只篩選掉了從表B中的數據,主表A中數據未受影響圖片

輸入圖片說明

select A.id,A.name,B.area_id,B.park_name from t_sys_city_code A
left join eimm_park_inf B on A.id=B.area_id  
and A.id not in('610103','610102','610104','0')  
order by A.id,B.park_name

執行結果2:on 後面直接 and A.id not in('610103','610102','610104','0')   這個條件雖然看起來是針對主表A中的數據進行篩選,可是結果依然對主表A沒有影響,篩選掉的只是從表B中能與主表A ('610103','610102','610104','0') 這幾個條件關聯起來的數據ci

輸入圖片說明

select A.id,A.name,B.area_id,B.park_name from t_sys_city_code A
left join eimm_park_inf B on A.id=B.area_id 
and B.park_name='光電孵化協同創新工程示範基地' 
and A.id not in('610103','610102','610104','0','61010a') 
order by A.id,B.park_name

執行結果3:on後and B.park_name='光電孵化協同創新工程示範基地' 條件,只是將從表B 的park_name='光電孵化協同創新工程示範基地'的這條數據過濾掉了,這裏依然對主表A的數據未形成影響it

輸入圖片說明

select A.id,A.name,B.area_id,B.park_name from t_sys_city_code A
left join eimm_park_inf B on A.id=B.area_id 
where   A.id not in('610103','610102','610104','0')  
order by A.id,B.park_name

執行結果4:主表A從表B進行關聯後獲得結果集C,where   A.id not in('610103','610102','610104','0') 條件對結果集C進行篩選class

輸入圖片說明

select A.id,A.name,B.area_id,B.park_name from t_sys_city_code A
left join eimm_park_inf B on A.id=B.area_id 
and   B.park_name='光電孵化協同創新工程示範基地' 
where   A.id not in('610103','610102','610104','0')  
order by A.id,B.park_name

執行結果5:on後and   B.park_name='光電孵化協同創新工程示範基地' 條件針對從表B進行了篩選後,在與主表A關聯接到結果集C,where   A.id not in('610103','610102','610104','0')  條件在對結果集C進行了篩選select

輸入圖片說明

select A.id,A.name,B.area_id,B.park_name from t_sys_city_code A
left join eimm_park_inf park on A.id=B.area_id 
where   A.id not in('610103','610102','610104','0') 
and   B.park_name='光電孵化協同創新工程示範基地'  
order by A.id,B.park_name

執行結果6:where後面的結果直接對主表A從表B關聯後的結果進行了篩選im

輸入圖片說明

相關文章
相關標籤/搜索