SQL中常用的聯接

2022-09-20 07:09:09 字數 2562 閱讀 3986

內聯接:只包含匹配的行,也就是只返回兩個資料集都有的部分對應的行

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表操作符對兩個輸入表進行了操作。聯結有三種基本型別 交叉連線,內連線,外鏈結。這三種連線的區別是它們採用的邏輯查詢處理步驟各部相同,每種連線都有一套不同的步驟。交叉連線只有乙個步驟 笛卡爾積 內連線有兩個步驟 笛卡爾積,過濾 外鏈結有三個步驟 笛卡爾積,過濾,新增外部行。交叉連線 ...