程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle_多表連接

Oracle_多表連接

編輯:Oracle教程

盜亦有道:http://www.blogjava.net/hello-yun/archive/2011/04/08/347890.html

表TESTA,TESTB,TESTC,各有A, B兩列:

TESTA(A,B) |    TESTB(A,B)   |    TESTC(A,B)

001      10A    |    001     10B     |    001    10C

002      20A    |    003     30B     |    004    30C

 

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

 

A.內連接:

 

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

 

SELECT * 
FROM TESTA,TESTB
WHERE TESTA.A=TESTB.A


結果:

TESTA(A,B)    |    TESTB(A,B)

001    10A     |     001     10B

 

B.外連接

 

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

 

1. 左外連接 left outer join 或者 left join

 

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

 

SELECT *
FROM TESTA 
LEFT OUTER JOIN TESTB 
ON TESTA.A=TESTB.A

 

Oracle 支持另一種寫法

 

SELECT * 
FROM TESTA,TESTB
WHERE TESTA.A=TESTB.A(+)

 

結果:

TESTA(A,B)    |    TESTB(A,B)

001     10A    |     001     10B

002     20A    |    

 

三個表做左外連接

 

SELECT *
FROM TESTA 
LEFT OUTER JOIN TESTB 
ON TESTA.A=TESTB.A
LEFT OUTER JOIN TESTC
ON TESTA.A=TESTC.A

 

Oracle 支持的另外一種寫法

 

SELECT *
FROM TESTA,TESTB,TESTC
WHERE TESTA.A=TESTB.A(+)
AND TESTA.A=TESTC.A(+)

 

結果:

TESTA(A,B)    |     TESTB(A,B)    |     TESTC(A,B)

001     10A     |      001     10B    |      001    10C

002     20A     |

 

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

 

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

 

SELECT *
FROM TESTA 
RIGHT OUTER JOIN TESTB 
ON TESTA.A=TESTB.A

 

Oracle支持的另一種寫法

 

SELECT *
FROM TESTA,TESTB
WHERE TESTA.A(+)=TESTB.A

 

結果:

 

TESTA(A,B)    |    TESTB(A,B)

 

001     10A     |     001     10B

                       |    003      20B

 

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

 

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

 

SELECT * 
FROM TESTA 
FULL OUTER JOIN TESTB
ON TESTA.A=TESTB.A

 

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

 

SELECT  TESTA.*,TESTB.*
FROM TESTA
LEFT OUTER JOIN TESTB
ON TESTA.A=TESTB.A
UNION
SELECT TESTA.*,TESTB.*
FROM TESTB
LEFT OUTER JOIN TESTA
ON TESTA.A=TESTB.A

 

結果:

 

TESTA(A,B)    |    TESTB(A,B)

 

 

001     10A     |     001     10B

002     20A     |  

        |     003     20B

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved