Oracle多表查詢
一、多表聯接查詢
1.內聯接 (inner join)
2.外聯接
左外聯接 (left outer join) ;右外聯接 (right outer join) 完整外聯接 (full outer join)
3.交叉聯接(cross join 笛卡爾積)
二、內聯接
它根據表中共同的列來進行匹配,當兩個表存在主外來鍵關係的時候通常會用到內聯接查詢。
例如:查詢出公司的員工ID、員工姓名、所在部門ID、部門名稱
SELECT emp_id,emp_name,DEP.dep_id,dep_name FROM EMPLOYEE INNER JOIN DEP ON EMPLOYEE.dep_id=DEP.dep_id
三、左外聯接
它的結果集包括left outer join子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列均為空值。
例如:查詢出公司的員工姓名、月份、實發工資 SELECT E.emp_name,S.sal_ym,S.sal_disburse FROM EMPLOYEE E LEFT OUTER JOIN SALARY S ON E.emp_id = S.emp_id
四、右外聯接
右外聯接:RIGHT JOIN(RIGHT OUTER JOIN)是左聯接的反向聯接,將返回右表中的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值。
例如:查詢出公司的員工編號、職位編號、職位名稱
SELECT EMPLOYEE.emp_id, EMPLOYEE.job_id, JOB.job_name FROM EMPLOYEE RIGHT OUTER JOIN JOB ON EMPLOYEE.job_id = JOB.job_id
五、完整外聯接
完整外聯接:FULL OUTER JOIN,它返回左右表中的所有行,當某行在另一個表中沒有匹配行時,則另一個表的選擇列包含空值,如果表之間有匹配行,則整個結果集行包含基表的資料值。
例如:查詢出公司的員工編號、職位編號、職位名稱 SELECT EMPLOYEE.emp_id, JOB.job_name FROM EMPLOYEE FULL OUTER JOIN JOB ON EMPLOYEE.job_id = JOB.job_id。
六、交叉聯接(cross join 笛卡爾積)
交叉聯接:CROSS JOIN,沒有 WHERE 子句的交叉聯接將產生聯接所涉及的表的笛卡爾積。第一個表的行數乘以第二個表的行數等於笛卡爾積結果集的大小。如果新增一個 WHERE 子句,則交叉聯接的作用將同內聯接一樣。
例如:查詢出公司的員工姓名和職位名稱 SELECT E.emp_name || '.' || J.job_name FROM EMPLOYEE E CROSS JOIN JOB J
七、多表聯接查詢
例:現需要查詢出所有員工的姓名,所在的部門以及職位。
SELECT E.emp_name 姓名, D.dep_name 部門, J.job_name 職位 FROM EMPLOYEE E LEFT JOIN DEP D ON E.dep_id = D.dep_id LEFT JOIN JOB J ON E.job_id = J.job_id