1. 程式人生 > >內連接和外連接區別

內連接和外連接區別

等值連接 區別 基礎 select bsp 就是 val ora 常見

表t_user1,t_user2,t_user3,各有id,name兩列

id

name

1

10A

2

20A

id

name

1

10B

3

30B

id

name

1

10C

4

40C

連接分為兩種:內連接與外連接。

A.內連接

內連接,即最常見的等值連接,例:

SELECT *
FROM t_user1,t_user2
WHERE t_user1.id = t_user2.id


結果

id

name

id

name

1

10A

1

10B

B.外連接

外連接分為左外連接,右外連接和全外連接。

1. 左外連接 left outer join 或者 left join(左表的外連接)

左外連接就是在等值連接的基礎上加上主表中的未匹配數據,例:

SELECT *
FROM t_user1
LEFT OUTER JOIN t_user2
ON t_user1.id = t_user2.id

Oracle 支持另一種寫法

SELECT *
FROM t_user1 ,t_user2
WHERE t_user1.id=t_user2.id(+)

結果:

id

name

id

name

1

10A

1

10B

2

20A

三個表做左外連接

SELECT *
FROM t_user1
LEFT OUTER JOIN t_user2
ON t_user1.id=t_user2.id
LEFT OUTER JOIN t_user3
ON t_user1.id=t_user3.id

Oracle 支持的另外一種寫法

SELECT *
FROM t_user1,t_user2,t_user3
WHERE t_user1.id=t_user2.id(+)
AND t_user1.id=t_user3.id(+)

結果:

id

name

id

name

id

name

1

10A

1

10B

1

10C

2

20A

2. 右外連接 right outer join 或者 right join

右外連接是在等值連接的基礎上加上被連接表的不匹配數據

SELECT *
FROM t_user1
RIGHT OUTER JOIN t_user2
ON t_user1.id=t_user2.id

Oracle支持的另一種寫法

SELECT *
FROM t_user1,t_user2
WHERE t_user1.id(+)=t_user2.id

結果:

id

name

id

name

1

10A

1

10B

3

30B

3.全外連接 full outer join 或者 full join

全外連接是在等值連接的基礎上將左表和右表的未匹配數據都加上

SELECT *
FROM t_user1
FULL OUTER JOIN t_user2
ON t_user1.id=t_user2.id

全外連接的等價寫法,對同一表先做左連接,然後右連接

SELECT t_user1.*,t_user2.*
FROM t_user1
LEFT OUTER JOIN t_user2
ON t_user1.id = t_user2.id
UNION
SELECT t_user1.*,t_user2.*
FROM t_user2
LEFT OUTER JOIN t_user1
ON t_user1.id = t_user2.id

結果:

id

name

id

name

1

10A

1

10B

2

20A

3

30B

內連接和外連接區別