左連接條件與where條件的區別


Sql 查詢語句應用左連接時的鏈接條件中經常加一些常量值在里面如:

“On a.id= b.id and b.is_del =0 and b.is_old =1” 這種條件如果加在表與表之間連接后的where條件中時有什么不一樣呢?

答:其實仔細想想我們都能想到,左連接的目的是要取左邊的所有數據,如果條件中右邊表中的字段與左邊表中的字段是一對一關系,那連接時要保證右邊數據不為null,只能讓”a.id = b.id and b.is_del =0,b.is_old=1”;否則即使a.id=b.id 滿足條件同樣右邊的數據只能用null來補全,這種情況下如果左邊有10條數據,右邊只有7條數據完全符合條件,那結果就是有10條數據顯示出來只不過有三條數據右邊表中的數據是null;如果將此b.is_del = 0 and b.is_old =1 放在where后面那么就會發現結果中一共有7條數據那三條空數據已經被刪除了,這就是區別。

總結一下規律:

放在on里面就是先篩選后連接,保證連接左邊數據完整;放在where中就得先連接后篩選。

如果使用INNER JOIN 效果是一樣的所以建議同一放在where 條件后面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM