2011-12-20 5 views
2
SELECT department_name AS dept_name, 
     last_name, project_number 
FROM departments dpt 
    JOIN employee emp 
     ON dpt.department_number = emp.department_number 
    LEFT JOIN projects prj 
     ON emp.employee_id = prj.employee_id 
ORDER BY department_name 

LEFT JOINの部分と、2番目の結合であるため、LEFT JOIN部分とその動作方法について混乱しています。 「左」のテーブルの従業員ですか、それとも部門ですか?このクエリの「左」となるテーブル

答えて

7

実際には、「左側」はdepartmentsemployeeを結んだ結果です。結合は左結合であるため、x JOIN y JOIN z(x JOIN y) JOIN zに相当します。

+0

素晴らしいです。私のためにそれをクリアしてくれてありがとう。 – Sackling

+0

@Sackling:どうぞよろしく! – ruakh

3

両方ともです。または、むしろ、「左」側は、結合に先立つ結合式の結果です。

実際には、クエリオプティマイザは物事を幾分並べ替えます。しかし、論理的な観点からは、最初から最後までそれぞれの式を1回ずつ実行することを想像してください。これは、操作の左側でこれまでに計算された結果全体を使用します。オプティマイザは、2つの結合を交換するか、以前のwhere句からフィルタを適用することを決定しますが、結果の関係を変更する方法でこれを行うことはありません。

0

このクエリでは、各部門に少なくとも1人の従業員がおり、従業員にはゼロ個以上のプロジェクトがあることを前提としています。

関連する問題