この章では、自己結合として知られている、表[テーブル]とその表[テーブル]自体の間をどのように結合するかを説明します。特に再帰的結合の状況を説明します。このような種類の関連付けが、データ間での従属の説明をしていることを確認します。

Association récursive

図 2.1 : データベーススキーマ

1. 最上位

会社の上司の上司、すなわち上司の居ない従業員に関するデータが欲しいと仮定しましょう。

SELECT First_name, Last_name
FROM Worker
WHERE Boss_id IS NULL

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

{{h}}
{{r}}

2. ファーストレベル

Eddy Fisherが直属の上司の従業員に関するデータが欲しいと仮定しましょう。(これはまたサブクエリ―の使用によっても成されます。)

SELECT W2.First_name, W2.Last_name, W1.Last_name AS DirectBoss
FROM Worker AS W1, Worker AS W2
WHERE W2.Boss_id = W1.ID
      AND W1.First_name = 'Eddy' AND W1.Last_name ='Fisher'

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

{{h}}
{{r}}

3. セカンドレベル

上司が、Eddy Fisherに直接従属する従業員に関するデータが欲しいと仮定しましょう。言い換えれば、階層でのセカンドレベルに関するデータです。

SELECT W3.First_name, W3.Last_name, W2.Last_name AS DirectBoss
FROM Worker AS W1, Worker AS W2, Worker AS W3
WHERE W3.Boss_id = W2.ID
      AND W2.Boss_id = W1.ID
      AND W1.First_name = 'Eddy' AND W1.Last_name ='Fisher' 

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

{{h}}
{{r}}

まとめ

再帰的結合は、データ間での階層をデザインします。この階層は、構造的または、一時的な階層となりえます。(例:ジョブスケジューリング)

再帰的結合の場合の結合は、通常の結合 と同じように働きますが、同じ表[テーブル]を扱っているためエイリアスの使用が必要となります。