リマインダーとして、結合 は、別の表[テーブル]の主キーに一致する外部キーのあるレコードを結びつけます。
幾つかの場合で、しかしながら一致が起こる時のみではなく、総合データセットを保持していることが必要となります。そこで外部結合を使用する必要があります。
1. 外部結合
従業員と彼らが参加しているプロジェクトに関するデータが欲しいと仮定しましょう。この場合、従業員に関する総合データセット、すなわち、どのプロジェクトにも参加していない従業員に関するデータセットもまた欲しいです。
SELECT emp.First_name, emp.Last_name, inv.Employee_id, inv.Project_id
FROM Employee AS emp
LEFT JOIN Involvement AS inv ON emp.ID = inv.Employee_id
下記の表が取得出来ます。
{{h}} |
---|
{{r}} |
2. 定量化
全ての従業員それぞれがいくつのプロジェクトに参加しているかに関するデータを取得したいと仮定しましょう。
SELECT emp.First_name, emp.Last_name, COUNT( inv.Employee_id ) AS NbOfProjects
FROM Employee AS emp
LEFT JOIN Involvement AS inv ON emp.ID = inv.Employee_id
GROUP BY inv.Employee_id
下記の表が取得出来ます。
{{h}} |
---|
{{r}} |
3. 図解
図 1.2 は、 normal join が、両方の表[テーブル]でのデータマッチングをまとめて表示しています。
図 1.3 は、表のデータも含む、別の表[テーブル]とはマッチングしていない外部結合を表示しています。(この場合左側)
4. RIGHT OUTER JOIN
Right outer joinhは、 left outer joinと同じコンセプトです。これを示すために、right outer joinを使って上記の1番目の例を行ってみましょう。
SELECT emp.First_name, emp.Last_name, inv.Employee_id, inv.Project_id
FROM Involvement AS inv
RIGHT JOIN Employee AS emp ON emp.ID = inv.Employee_id
下記の表が取得できます。
{{h}} |
---|
{{r}} |
まとめ
外部結合は、2つの異なった表からと、さらに他の表と一致しないキーを持つデータの集約に使用することが出来る。例としては、プロジェクトに参加している従業員に関するデータだけでなく、まだどのプロジェクトにも参加していない従業員に関するデータもまた欲しいです。