直接看範例!
DECLARE @T TABLE (
Id VARCHAR(1)
,Value INT
)
DECLARE @T1 TABLE (
Id VARCHAR(1)
,Value INT
)
DECLARE @T2 TABLE (
Id VARCHAR(1)
,Value INT
)
INSERT INTO @T
VALUES (
'A'
,1
)
,(
'A'
,2
)
,(
'A'
,3
)
INSERT INTO @T1
VALUES (
'A'
,3
)
,(
'B'
,4
)
,(
'A'
,4
)
SELECT * FROM @T
SELECT * FROM @T1
SELECT * FROM @T2
如此就代表著, @T.Id = A 會JOIN @T1.Id = A,但只發生在@T.Id = 3處
JOIN @T1 t1 ON t0.Id = t1.Id AND t0.Value = 3 AND t1.Value = 4
SELECT * FROM @T t0 JOIN @T1 t1 ON t0.Id = t1.Id AND t0.Value = 3 AND t1.Value = 4
如此就代表著, @T.Id = A 會JOIN @T1.Id = A,但只發生在@T.Id = 3處且@T1.Id = 4處
"可以想成,強制讓@T.Id = 3 能夠JOIN @T1.Id = 4"
也就是ON 是 JOIN 連接的條件,只有裡面那些條件都符合,才能連接;而WHERE 是拿來篩選的 => ON 條件拿來連接資料的條件;WHERE 條件拿來篩選資料的條件
看FULL JOIN的資料更能體會其用法:
SELECT * FROM @T t
FULL JOIN
@T1 t1
ON t.Id=t1.Id
SELECT * FROM @T t
FULL JOIN
@T1 t1
ON t.Id=t1.Id
AND t.Value = 3
AND t1.Value = 4
SELECT * FROM @T t
FULL JOIN
@T1 t1
ON t.Id=t1.Id
AND t.Value IN (2,3)
SELECT * FROM @T t
FULL JOIN
@T1 t1
ON t.Id=t1.Id
WHERE t1.Value = 4
如下,想要找出t不是NULL的,卻因為FULL JOIN後造成(B,4)也被刪除了。
SELECT * FROM @t t
FULL JOIN
@t1 t1
ON t.Id=t1.Id
SELECT * FROM @t t
FULL JOIN
@t1 t1
ON t.Id=t1.Id
WHERE t.Value IS NOT NULL
SQL Server Analytics Service 1
SEO(1) Github(2) Title Tag(2) ML(1) 李宏毅(1) SQL Server(18) Tempdb(1) SSMS(1) Windows(1) 自我成長(2) Excel(1) python Flask(1) python(5) Flask(2)
Max Chen (159)