2016-08-24 43 views
2

我一直使用連接很長一段時間,但它始終是舊的語法。現在我正在試圖弄清楚如何使用JOIN語法來完成基本的內部連接,並且很難搞清楚。在Oracle中使用連接語法連接3個表格

假設我有3張桌子。

員工:

EmployeeID  EmployeeName  DepartmentID 
1    John Smith   2 
2    Jane Doe   3 
3    Mark Brown   1 

部門:

DepartmentID  DepartmentName  AreaID 
1     Sales    2 
2     Marketing   1 
3     Opeations   3 

地區:

AreaID  AreaName 
1   Marketing 
2   Sales 
3   Opeartions 

我需要與他們的部門和地區的所有員工姓名的列表。

舊的語法,我會運行下面的查詢:

select e.EmployeeName, d.DepartmentName, a.AreaName 
from employees e, departments d, areas a 
where e.DepartmentID = d.DepartmentID 
and d.AreaID = a.AreaID 

隨着新的語法,看來我只能加入同部門的員工,而不是部門在同一個查詢的區域。或者我應該使用子查詢?

+0

選擇...從T1 T2一起上t1.c = t2.c加入T3上t2.c = t3.c – jarlh

+0

的主要區別是在「事物的秩序」 - 與舊,甲骨文專有的語法,您可以一次枚舉您加入的所有表,然後將所有連接條件放在'where'子句中。使用SQL標準語法,您可以命名要連接的前兩個表,然後立即添加連接條件('on ...')。然後你說'join third_table'和連接條件,顯示第三個表如何連接到前兩個表的已經存在的連接。等等。 – mathguy

回答

1

試試這個。

select e.EmployeeName, d.DepartmentName, a.AreaName 
from employees e join departments d on e.DepartmentID = d.DepartmentID 
        join areas a on d.AreaID = a.AreaID; 
0

你可以嘗試左側的接合部的EmployeesDepartmentsAreas表的順序。我們在Stack Overflow處謹慎處理,因此我們選擇LEFT JOIN而不是INNER JOIN,因爲它處理了可能沒有將員工分配給某個部門的情況,在這種情況下,查詢將顯示NA作爲值。

SELECT e.EmployeeName, 
     COALESCE(d.DepartmentName, 'NA'), 
     COALESCE(a.AreaName, 'NA') 
FROM Employees e 
LEFT JOIN 
Departments d 
    ON e.DepartmentID = d.DepartmentID 
LEFT JOIN Areas a 
    ON d.AreaID = a.AreaID 
0

我覺得this說明連接是非常有用的。 您的查詢將是這樣的:

SELECT e.EmployeeName, d.DepartmentName, a.AreaName 
FROM employees e 
INNER JOIN departments d on e.DepartmentID = d.DepartmentID 
INNER JOIN areas a on d.AreaID = a.AreaID 
0

你寫的代碼是內加入替代代碼。 您可以使用下面的代碼。 所以我所做的就是使用DepartmentID將Employee表連接到Department表,並使用AreaID將Employees表連接到Areas表。

Select e.EmployeeName 
, d.DepartmentName 
, a.AreaName 
from employees e 
INNER JOIN departments d 
, areas a 
ON e.DepartmentID = d.DepartmentID 
INNER JOIN areas a 
ON d.AreaID = a.AreaID