SQL join 連接時 條件加在 on后面和 where 的區別


task 是用戶任務表,manageuser是用戶表,以left join 為參考:

此時主表是task,三條sql語句:注意區別。第一句無篩選條件,第二句篩選條件在on后面,第三句sql的篩選語句放到where中

SELECT t.id,t.UseManage,u.ID,u.LoginName,u.UserType FROM dbo.Task t LEFT JOIN dbo.ManageUser u ON t.UseManage=u.ID

SELECT  t.id,t.UseManage,u.ID,u.LoginName,u.UserType FROM dbo.Task t LEFT JOIN dbo.ManageUser u ON t.UseManage=u.ID AND t.Type=2

SELECT  t.id,t.UseManage,u.ID,u.LoginName,u.UserType FROM dbo.Task t LEFT JOIN dbo.ManageUser u ON t.UseManage=u.ID where t.Type=2

搜索結果如下

總結:where 會在最終結果中篩選,on中的條件先篩選,再返回結果。

具體的可以再參看:

SQL Server 容易忽略的錯誤

轉自:pursuer.chen

16.理解外連接

接下來我就解釋一下原因:對於外連接,連接條件不會改變主表的數據,即不會刪減主表的數據

對於上面的查詢主表是orders,所以無論你在連接條件on里面怎樣設置主表的條件都不影響主表數據的輸出,影響主表數據的輸出只在where條件里,where條件影響最后數據的輸出。而對於附表Customer 的條件就應該寫在連接條件(on)里而不是where條件里,這里說的是外連接(包括左連接和右連接)。

 


免責聲明!

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



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