表的連接是指在一個SQL語句中通過表與表之間的關連從一個或多個表中檢索相關的數據大體上表與表之間的連接主要可分四種分別為相等連接外連接不等連接和自連接本文將主要從以下幾個典型的例子來分析Oracle表的四種不同連接方式:
相等連接
通過兩個表具有相同意義的列可以建立相等連接條件
只有連接列上在兩個表中都出現且值相等的行才會出現在查詢結果中
例 查詢員工信息以及對應的員工所在的部門信息;
SELECT * FROM EMPDEPT;
SELECT * FROM EMPDEPT
WHERE EMPDEPTNO = DEPTDEPTNO;
REM 顯示工資超過的員工信息以及對應的員工的部門名稱
外連接
對於外連接Oracle中可以使用(+)來表示i可以使用LEFT/RIGHT/FULL OUTER JOIN下面將配合實例一一介紹除了顯示匹配相等連接條件的信息之外還顯示無法匹配相等連接條件的某個表的信息
外連接采用(+)來識別
A) 左條件(+) = 右條件;
代表除了顯示匹配相等連接條件的信息之外還顯示右條件所在的表中無法匹配相等連接條件的信息
此時也稱為右外連接另一種表示方法是:
SELECT FROM 表 RIGHT OUTER JOIN 表 ON 連接條件
B) 左條件 = 右條件(+);
代表除了顯示匹配相等連接條件的信息之外還顯示左條件所在的表中無法匹配相等連接條件的信息
此時也稱為左外連接
SELECT FROM 表 LEFT OUTER JOIN 表 ON 連接條件
例 顯示員工信息以及所對應的部門信息
無法顯示沒有部門的員工信息
無法顯示沒有員工的部門信息
SELECT * FROM EMPDEPT WHERE EMPDEPTNO = DEPTDEPTNO;
直接做相等連接:
SELECT * FROM EMP JOIN DEPT ON EMPDEPTNO = DEPTDEPTNO;
REM 顯示員工信息以及所對應的部門信息顯示沒有員工的部門信息
SELECT * FROM EMPDEPT WHERE EMPDEPTNO(+) = DEPTDEPTNO;
SELECT * FROM EMP RIGHT OUTER JOIN DEPT ON EMPDEPTNO = DEPTDEPTNO;
REM 顯示員工信息以及所對應的部門信息顯示沒有部門的員工信息
SELECT * FROM EMPDEPT WHERE EMPDEPTNO = DEPTDEPTNO(+);
SELECT * FROM EMP LEFT OUTER JOIN DEPT ON EMPDEPTNO = DEPTDEPTNO;
不等連接
兩個表中的相關的兩列進行不等連接比較符號一般為><BETWEEN AND
REM SALGRADE
DESC SALGRADE;
SELECT * FROM SALGRADE;
REM 顯示員工的編號姓名工資以及工資所對應的級別
SELECT EMPNOENAMESALSALGRADE* FROM SALGRADEEMP
WHERE EMPSAL BETWEEN LOSAL AND HISAL;
REM 顯示雇員的編號姓名工資工資級別所在部門的名稱;
SELECT EMPNOENAMESALGRADEDNAME FROM EMPDEPTSALGRADE
WHERE EMPDEPTNO = DEPTDEPTNO AND EMPSAL BETWEEN LOSAL AND HISAL;
自連接
自連接是數據庫中經常要用的連接方式使用自連接可以將自身表的一個鏡像當作另一個表來對待從而能夠得到一些特殊的數據下面介紹一下自連接的方法:
將原表復制一份作為另一個表兩表做笛卡兒相等連接
例 顯示雇員的編號名稱以及該雇員的經理名稱
SELECT WORKERENAMEWORKERMGRMANAGEREMPNOMANAGERENAME FROM EMP WORKEREMP MANAGER
WHERE WORKERMGR = MANAGEREMPNO;
From:http://tw.wingwit.com/Article/program/Oracle/201311/16733.html