1. 程式人生 > 資料庫 >Oracle多表查詢

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