在Oracle中使用连接语法连接3个以上的表

时间:2016-08-24 10:47:03

标签: sql oracle join

我已经使用了很长一段时间的连接,但它始终是旧的语法。现在,我试图弄清楚如何使用JOIN语法进行基本的内连接,并且无法搞清楚它。

我们说我有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

使用新语法似乎我只能加入部门的员工,而不能加入同一查询区域的部门。或者我应该使用一个子选择?

3 个答案:

答案 0 :(得分:0)

您可以尝试依次加入EmployeesDepartmentsAreas表格。我们在Stack Overflow上一丝不苟,因此我们选择了LEFT JOIN而不是INNER JOIN,因为它处理了员工可能没有被分配到某个部门的可能性,在这种情况下查询会显示NA 1}}作为值。

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

答案 1 :(得分: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

答案 2 :(得分:0)

您编写的代码是 Inner Join 的替代代码。 您可以使用以下代码。 所以我所做的是使用DepartmentID将Employee表连接到Department表,并使用AreaID将Employee表连接到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