前章では、1つの表[テーブル]のみからデータをどのように取得するかを説明しました。この章では、結合[JOIN]概念を用いて、たくさんの表[テーブル]からデータをどのように取得するかを確認していきます。2つの表の間の結合は、それぞれの間に関連性がある時のみ可能となります。

1. 単純結合

マーケティング部で働いている全ての従業員に関するデータが欲しいと仮定しましょう。各従業員の名前、苗字、部署のデータが取得したいです。

SELECT emp.First_name AS First, emp.Last_name AS Last, dep.Name AS Department
FROM Employee AS emp, Department AS dep
WHERE emp.Department_id = dep.ID AND dep.Name = 'Marketing'

下記の表が取得できます。

{{h}}
{{r}}

どのように結合[JOIN]が機能するかを少し見てみましょう。上記の例では、結合は WHERE 節内で以下の命令文によって成されます:emp.Department_id = dep.ID. 両方の表のデータは、1つの表で形成することによって、統合(合計)されます。結合は、Employee 表の外部キーDepartment_idDepartment 表の主キーの参照によって成されます。最後に、フィルターは以下のように表示される:dep.Name = 'Marketing' そして、それ故にこの条件を満たすレコードのみが保たれます。図 6.2が上記を説明しています。

SQL join clause

図 6.2 : SQL 結合構成

2. 複数結合

複数結合は、AND 節を用いることによって、単純結合と全く同じように機能します。 全ての会社のプロジェクトおよびそれぞれのプロジェクトに携わっている従業員の苗字と名前に関するデータが欲しいと仮定しましょう。この場合、Employee, Project, Involvementの名の付いた3つの表が該当しています

SELECT proj.Name AS Project, emp.Last_name AS lastName, emp.First_name AS firstName
FROM Employee AS emp, Involvement AS inv, Project AS proj
WHERE inv.Project_id = proj.ID AND inv.Employee_id = emp.ID

下記の表が取得出来ます。

{{h}}
{{r}}

図6.3  は、上記の複数結合がどのように構成されるかを示しています。

SQL join clause

Figure 6.3 : SQL multiple join construction

まとめ

データがたくさんの異なった表にある場合、結合[JOIN]が必要となり、SQLクエリではそれぞれの属性の前に表[テーブル]の名前の接頭が必要となります。(例:Project.ID) 実際に、異なった表が共通した属性名(例:ID)であることがあるかもしれない。この目的のために、上記の例では、より簡潔な表[テーブル]の名前にエイリアスを用いていることに気づくでしょう。SQLで結合を行うための別のシンタックス(構文規則)が存在します。下記は、INNER JOIN(内部結合)構文を使用することによって、上記の1番目の例と同等の方法で書かれます。

SELECT emp.First_name AS firstName, emp.Last_name AS lastName, dep.Name AS Department
FROM Employee AS emp
INNER JOIN Department AS dep ON emp.Department_id = dep.ID
WHERE dep.Name = 'Marketing'