SQL Server ON條件和WHERE條件


SQL Server中ON條件和WHER條件的區別:

一、ON條件是在生成臨時表時使用的條件,它不管ON中的條件是否為真,都會返回左邊表中的記錄

以 LEFT JOIN 為例,新建表Item和UOM,並插入測試數據:

 1 CREATE TABLE [dbo].[Item]
 2 (
 3     [ID]        [INT] NULL,
 4     [Item]      [INT] NULL,
 5     [GroupNo]   [INT] NULL,
 6     [UOM]       [INT] NULL,
 7     [ParentUOM] [INT] NULL
 8 )
 9 
10 INSERT INTO Item
11 SELECT 1,1,10,1,0
12 UNION
13 SELECT 2,1,10,2,1
14 UNION
15 SELECT 3,1,10,4,2
16 UNION
17 SELECT 4,2,10,1,0
18 UNION
19 SELECT 5,2,10,2,1
20 UNION
21 SELECT 6,2,10,4,2
22 UNION
23 SELECT 7,1,20,1,0
24 UNION
25 SELECT 8,1,20,2,1
26 UNION
27 SELECT 9,1,20,4,2
28 UNION
29 SELECT 10,1,30,1,0
30 UNION
31 SELECT 11,1,30,2,1
32 UNION
33 SELECT 12,1,30,4,2
34 
35 CREATE TABLE [UOM]
36 (
37     [ID]        [INT] NULL,
38     [ParentUOM] [INT] NULL
39 )
40 
41 INSERT INTO UOM
42 SELECT 1,0
43 UNION
44 SELECT 2,1
45 UNION
46 SELECT 3,1
47 UNION
48 SELECT 4,2
49 UNION
50 SELECT 5,2
51 UNION
52 SELECT 6,3 

1、當 Item LEFT JOIN UOM ON xxx 時,結果返回所有Item記錄,ON xxx是表關聯時的條件,根據條件Item表記錄與UOM表記錄關聯,最終只有滿足關聯條件的UOM表記錄會保留

1 SELECT A.*,B.*
2 FROM  Item A
3 LEFT JOIN UOM B ON A.ParentUOM = B.ID

 

查詢結果:

 

2、ON條件不能過濾Item表記錄,即使ON條件中是Item.xxx。Item.xxx只是限定了Item表中哪些記錄參與到關聯過程,以便過濾UOM表記錄

1 SELECT A.*,B.*
2 FROM  Item A
3 LEFT JOIN UOM B ON A.ParentUOM = B.ID AND A.GroupNo = 10 

與1中產尋腳本不同是ON條件中增加 A.GroupNo = 10

查詢結果:

比較兩次查詢結果:2中的查詢結果,結果7-12因為GroupNo != 10,所以結果中UOM記錄全部為NULL

 

3、總結

LEFT JOIN 如果是想要在最終結果集過濾左表中的記錄,不能通過ON條件,需要使用WHERE條件

 

二、WHERE條件是在臨時表生成后,在對臨時表進行過濾時使用的條件

三、如果左表很大,而且查詢的結果相同時,使用ON條件可以減小中間臨時表的大小,使用ON條件效率比WHERE條件高


免責聲明!

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



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