自己結合は、同じテーブルの複数の行にある情報を結びつけて単一の結果のテーブルを作ります。すなわち、テーブルをそのテーブル自身に結合します。
例: 自己結合
例えば、次の問合わせは、勤続年数が上司より長い従業員の氏名を調べます。
SELECT workers.name, workers.yrs_exp, workers.dept_no, managers.name, managers.yrsexp FROM employee AS workers, employee AS managers WHERE managers.dept_no = workers.dept_no AND managers.job_title IN ('Manager', 'Vice Pres') AND workers.yrs_exp > managers.yrs_exp;
この操作は、employeeテーブルを、1つはWorkers、もう1つはManagerという2つのテーブルとして取り扱います。こうするには、FROM句でテーブルの別名を使用します。
ANSIでは、テーブルの別名を相関名または 範囲変数ともいいます。
これらの架空のテーブルには同じ列があるため(name、yrs_exp、dept_no)、各列の名前は、FROM句で定義されているテーブルの別名で修飾する必要があります(例えば、"workers.dept_no")。
WHERE句は、次のことを実行します。
- 両方のテーブルに対してキーを設定する(dept_no)
- managersテーブルに属している従業員を検索する(最初のAND)
- 両方のテーブルから列挙する作業員と管理者を限定する(2番目のAND)
この自己結合の結果として考えられるのは、以下のとおりです。
name | yrs_exp | dept_no | name | yrs_exp |
Greene W | 15 | 100 | Jones M | 13 |
Carter J | 20 | 500 | Watson L | 8 |
Smith T | 10 | 700 | Watson L | 8 |
Aguilar J | 11 | 600 | Regan R | 10 |
Leidner P | 13 | 300 | Phan A | 12 |
Russell S | 25 | 300 | Phan A | 12 |