這些都是兩個連接的。
left join兩個連接,左表全總的,右表符合條件的記錄選出來,不符合條件的用null填。
right join兩個連接,右表全總的,左表符合條件的記錄選出來,不符合條件的用null填。
inner join兩個連接,左表和右表都符合條件的才選出來。
left join兩個連接,左表全總的,右表符合條件的記錄選出來,不符合條件的用null填。
right join兩個連接,右表全總的,左表符合條件的記錄選出來,不符合條件的用null填。
inner join兩個連接,左表和右表都符合條件的才選出來。
LEFT [OUTER] JOIN指定在结果集中包含左表中所有不满足联接条件的行,且在由内联接返回所有的行之外,将另外一个表的输出列设为 NULL。RIGHT [OUTER] JOIN指定在结果集中包含右表中所有不满足联接条件的行,且在由内联接返回的所有行之外,将与另外一个表对应的输出列设为 NULL。CROSS JOIN指定两个表的矢量积。这将返回相同的行,就好像在旧式的非 SQL-92 式联接中并没有指定 WHERE 子句。
select * from b,c where b.id=c.id
和
select * from b join c on b.id=c.id
有什么区别吗?
select * from b,c where b.id=c.id
和
select * from b join c on b.id=c.id
有什么区别吗?一样的
問題:
select * from b,c where b.id=c.id
和
select * from b join c on b.id=c.id
有什么区别吗?
結倫:兩者沒有什麼區別,只不過是書寫的不同
inner join:等聯結,意思是說只有左表與右表有匹配記錄,左右表才會顯示;否則都不顯示left join: 左聯結,意思是說以左表為主,如果左表與右表有匹配記錄,左右表都顯示;如果左表與右表沒有匹配記錄,左表顯示一條,右表顯示為NULLright join:右聯結,意思是說以右表為主,如果左表與右表有匹配記錄,左右表都顯示;如果左表與右表沒有匹配記錄,右表顯示一條,左表顯示為NULL(與左聯結相反)join:等聯結,意思是說只有左表與右表有匹配記錄,左右表才會顯示;否則都不顯示(等同於inner join,它是inner join的簡寫,如果只寫join,sql server自動把它當作inner join處理)
insert @a select 10,'A' union all select 50,'K'
declare @b table(iid int,pds_name varchar(10))
insert @b select 10,'A' union select 20,'C' union all select 30,'D'
--交集
select a.iid,b.iid
from @a a inner join @b b on a.iid=B.iid
--@b表减交集
select a.pds_name,b.iid,b.pds_name
from @a a right join @b b on a.iid=b.iid where a.pds_name is null
--@a表减交集
select a.pds_name,b.iid,b.pds_name
from @a a left join @b b on a.iid=b.iid where b.pds_name is null