內聯接:只包含匹配的行,也就是只返回兩個資料集都有的部分對應的行
select * from table1
[inner] join table2
on table1.column = table2.column
外聯接擴充套件了內聯接,它還返回左邊或右邊的資料集中不匹配的資料,不匹配的資料以null顯示
左外聯接:包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行)以及右邊表中匹配的行
右外聯接:包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行)以及左邊表中匹配的行
select * from table1
left|right [outer] join table2
on table1.column = table2.column
全外聯接:包含兩個表的全部行,不管在另乙個表中是否存在匹配的行
例:create table dbo.one(
onepk int,
thing1 varchar(15)
create table dbo.two(
twopk int,
onepk int,
thing2 varchar(15)
insert dbo.one(onepk, thing1)
values(1, 'old thing')
insert dbo.one(onepk, thing1)
values(2, new thing')
insert dbo.one(onepk, thing1)
values(3, red thing')
insert dbo.one(onepk, thing1)
values(4, blue thing')
insert dbo.two(twopk, onepk, thing2)
values(1,0, 'plane')
insert dbo.two(twopk, onepk, thing2)
values(2,2, 'train')
insert dbo.two(twopk, onepk, thing2)
values(3,3, 'car')
insert dbo.two(twopk, onepk, thing2)
values(4,null, 'cycle')
內聯接:
select thing1, thing2
from dbo.one
join dbo.two
on one.onepk = two.onepk
結果:thing1 thing2
new thing train
red thing car
左外聯接:
select thing1, thing2
from dbo.one
left outer join dbo.two
on one.onepk = two.onepk
結果:thing1 thing2
old thing null
new thing train
red thing car
blue thing null
全外聯接:
select thing1, thing2
from dbo.one
full outer join dbo.two
on one.onepk = two.onepk
結果:thing1 thing2
null plane
new thing train
red thing car
null cycle
blue thing null
old thing null
在外聯接中設定條件:當使用內聯接時,在join子句還是where子句制定條件的效果相同,但對於外聯接情況並非如此。在join子句中制定條件時,sql server將返回外聯接表的所有行,然後根據指定的條件決定返回第二個表的哪些行。
select thing1, thing2
from dbo.one
left outer join dbo.two
on one.onepk = two.onepk
and one.thing1 = 'new thing'
結果:thing1 thing2
old thing null
new thing train
red thing null
blue thing null
如果在where字句中指定條件,sql server將首先執行聯接操作,然後根據where子句對聯接後的行進行篩選。
select thing1, thing2
from dbo.one
left outer join dbo.two
on one.onepk = two.onepk
where one.thing1 = 'new thing'
結果:thing1 thing2
new thing train
sql 左聯接,右聯接,內聯接的比較
首先需要解釋一下這幾個聯接的意思 2 left join 左聯接 返回包括左表中的所有記錄和右表中聯結字段相等的記錄。3 right join 右聯接 返回包括右表中的所有記錄和左表中聯結字段相等的記錄。inner join 等值連線 只返回兩個表中聯結字段相等的行。接下來,建立乙個資料庫,然後建立...
SQL聯接查詢
舉例有兩表資訊如下 以上兩種查詢方式等價,如下圖所示內聯接inner join只取兩表存在關聯關係的資料 注 inner join與join相同,inner可省略不寫。查詢結果如下 如下圖所示,左聯接 左外聯接 左表 user表 資料將會完全展示,右表 dept表 只展示與左表存在關聯關係的資料。注...
SQL聯接查詢
聯接查詢 join表操作符對兩個輸入表進行了操作。聯結有三種基本型別 交叉連線,內連線,外鏈結。這三種連線的區別是它們採用的邏輯查詢處理步驟各部相同,每種連線都有一套不同的步驟。交叉連線只有乙個步驟 笛卡爾積 內連線有兩個步驟 笛卡爾積,過濾 外鏈結有三個步驟 笛卡爾積,過濾,新增外部行。交叉連線 ...