顯示來自多個表的資料——JOIN
表關係簡介
一、語法
-
SELECT 欄位列表
-
FROM TABLE1
-
[CROSS JOIN TABLE2 ] |
-
[NATURAL JOIN TABLE2 ] |
-
[JOIN TABLE2 USING (欄位名) ] |
-
[JOIN TABLE2 ON (TABLE.COLUMN_NAME = TABLE2.COLUMN_NAME) ] |
- [(LEFT | RIGHT | FULL OUT) JOIN TABLE2 ON (TABLE1.COLUMN_NAME = TABLE2.COLUMN_NAME) ];
二、自然連線
如果不希望參照被連線表的所有同名列進行等值連線,自然連線將無法滿足要求,可以在連線時使用USING子句來設定用於等值連線的列(參照列)名。
不允許在參照列上使用表名或者別名作為字首
2、ON
- --99語法
- SELECT EMPNO, ENAME, SAL, EMP.DEPTNO, DNAME
- FROM EMP
- JOIN DEPT
- USING (DEPTNO);
- --92語法
- SELECT EMPNO, ENAME, SAL, EMP.DEPTNO, DNAME
- FROM EMP, DEPT
- WHERE EMP.DEPTNO = DEPT.DEPTNO;
如果要參照非同名的列進行等值連線,或想設定任意的連線條件,可以使用On子句
- SELECT EMPNO, ENAME, SAL, EMP.DEPTNO, DNAME
- FROM EMP
- JOIN DEPT
- ON (EMP.DEPTNO = DEPT.DEPTNO);
三、自連線
自己和自己做連結
- --99語法
- SELECT WORKER.LAST_NAME EMP, MANAGER.LAST_NAME MGR
- FROM EMPLOYEES WORKER
- JOIN EMPLOYEES MANAGER
- ON (WORKER.MANAGER_ID = MANAGER.EMPLOYEE_ID);
- --92語法
- SELECT WORKER.LAST_NAME EMP, MANAGER.LAST_NAME MGR
- FROM EMPLOYEES WORKER, EMPLOYEES MANAGER
- WHERE WORKER.MANAGER_ID = MANAGER.EMPLOYEE_ID;
四、非等值連線
-
--99語法
-
SELECT E.LAST_NAME, E.SALARY, J.GRADE_LEVEL
-
FROM EMPLOYEES E
-
JOIN JOB_GRADES J
-
ON E.SALARY BETWEEN J.LOWEST_SAL AND J.HIGHEST_SAL;
-
-
--92語法
-
SELECT E.LAST_NAME, E.SALARY, J.GRADE_LEVEL
-
FROM EMPLOYEES E, JOB_GRADES J
- WHERE E.SALARY BETWEEN J.LOWEST_SAL AND J.HIGHEST_SAL;
五、INNER|OUTER 連線
兩個表連線,只返回匹配的行,被稱為內連線。
2、LEFT OUTER | RIGHT OUTER 連線
- --查詢所有員工以及其部門名字
- --99語法
- SELECT LAST_NAME, DEPARTMENT_NAME
- FROM EMPLOYEES E
- INNER JOIN DEPARTMENTS D
- ON E.DEPARTMENT_ID = D.DEPARTMENT_ID;
- --92語法
- SELECT LAST_NAME, DEPARTMENT_NAME
- FROM EMPLOYEES E, DEPARTMENTS D
- WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID;
兩個表在連線過程中除了返回滿足連線條件的行以外還返回左(或右)表中不滿足條件的行,這種連線稱為左(或右)外連線。
3、FULL OUTER 連線
- --哪些部門沒有員工,看出部門名字
- --99語法
- SELECT DEPARTMENT_NAME
- FROM EMPLOYEES E
- RIGHT JOIN DEPARTMENTS D
- ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
- WHERE LAST_NAME IS NULL;
- --92語法
- SELECT DEPARTMENT_NAME
- FROM EMPLOYEES E, DEPARTMENTS D
- WHERE E.DEPARTMENT_ID(+) = D.DEPARTMENT_ID
- AND LAST_NAME IS NULL;
兩個表在連線過程中除了返回滿足連線條件的行以外還返回兩個表中不滿足條件的行,這種連線稱為全外聯接。
- --99
- SELECT E.LAST_NAME, D.DEPARTMENT_ID, D.DEPARTMENT_NAME
- FROM EMPLOYEES E
- FULL OUTER JOIN DEPARTMENTS D
- ON E.DEPARTMENT_ID = D.DEPARTMENT_ID;
- --92
- SELECT E.LAST_NAME, D.DEPARTMENT_ID, D.DEPARTMENT_NAME
- FROM EMPLOYEES E, DEPARTMENTS D
- ON E.DEPARTMENT_ID(+) = D.DEPARTMENT_ID(+);
六、笛卡爾積
笛卡爾集會在下面條件下產生:
1、連線條件被遺漏
2、連線條件不正確
3、所有表中的所有行互相連線
-
--99語法
-
SELECT E.LAST_NAME, D.DEPARTMENT_ID, D.DEPARTMENT_NAME
-
FROM EMPLOYEES E
-
CROSS JOIN DEPARTMENTS D;
-
-
--92語法
-
SELECT E.LAST_NAME, D.DEPARTMENT_ID, D.DEPARTMENT_NAME
- FROM EMPLOYEES E, DEPARTMENTS D;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24851054/viewspace-2145429/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle OCP(07):顯示來自多個表的資料Oracle
- 當查詢的資料來自多個資料來源,有哪些好的分頁策略?
- 字典表資料在表單中顯示的方法請教!
- 顯示資料庫中所有表的記錄數資料庫
- 我想用jsp顯示資料表表頭的值?可是顯示出來是亂碼!JS
- element table不顯示任何資料,無資料倒是顯示出無資料的了
- 將SQL Server中所有表的列資訊顯示出來SQLServer
- 報表載入大資料時顯示進度條大資料
- ALV報表不能正確顯示資料問題
- java實現將資料庫資料轉化成excel表格顯示出來Java資料庫Excel
- 自定義show_space過程來顯示資料段的利用資訊
- App Annie:最新資料顯示34%的iOS應用營收來自美國APPiOS營收
- perf 的資料用火焰圖顯示
- ASPxGridView的資料繫結顯示View
- 修改資料庫的日期顯示格式資料庫
- 顯示資料庫中表的主鍵資料庫
- Pandas 資料顯示不全?快來了解這些設定技巧! ⛵
- 資料顯示設定攻略
- 〈%# 〉與〈%= 〉的區別,顯示資料與繫結資料
- easyui datetimebox 如何只顯示 月份,不顯示具體的資料UI
- eMarketer:資料顯示越來越多的郵件經由手機開啟
- 為什莫從資料庫中取出的圖片不能顯示出來資料庫
- win10怎樣顯示隱藏的資料夾_win10隱藏檔案怎麼顯示出來Win10
- XML入門指南(9)使用XSL來顯示XML資料(轉)XML
- MySQL顯示連線的資料庫名MySql資料庫
- 資料庫顯示圖片的問題資料庫
- win10 如何顯示隱藏資料夾_win10 如何顯示隱藏的資料夾Win10
- win10隱藏的資料夾怎麼找出來 顯示隱藏資料夾步驟Win10
- 顯示資料庫所有引數資料庫
- Devexpress 報表 顯示devExpress
- 資料顯示50%的美國人通過網路提交納稅申報表
- 自定義來電顯示
- oracle left outer join(左聯接)顯示全部的課堂收藏資訊Oracle
- 一個很好的指令碼,用來顯示cbo的統計資訊指令碼
- win10怎麼顯示隱藏資料夾 win10顯示隱藏資料夾的方法Win10
- Juniper:資料顯示全球語音助理達到25億個
- vtk單視窗顯示多個源資料程式碼
- win10 如何顯示資料夾大小 win10如何直接顯示資料夾大小Win10