次の文は、部門の管理者より経験年数が長い従業員を返します。
SELECT workers.name, workers.yrs_exp, workers.dept_no, managers.name, managers.yrs_exp FROM employee AS workers, employee AS managers WHERE managers.dept_no = workers.dept_no AND UPPER (managers.jobtitle) IN ('MANAGER' OR 'VICE PRES') AND workers.yrs_exp > managers.yrs_exp;
直前の文におけるFROM句により、処理するemployeeテーブルは2つの同一のテーブルであるかのように処理できます。1つはworkersという名前のテーブルで、もう1つはmanagersという名前のテーブルです。
通常の結合操作のように、dept_noを両方のテーブルに共通した値を持つ列として確立し、WHERE句で結合の条件を定義します。
この文は、最初にjobtitle列にMANAGERまたはVICE PRESの値のどちらかの入ったmanagers行を選択することから処理されます。これらの行は、次の結合条件に従って、マージ結合の操作を使用しながら、workers行に結合されます。
- workers行には、managers行のdept_no値と一致するdept_no値が含まれている必要があります。
- 一致するworkers行には、managers行のyrs_exp値よりも大きいyrsexp値も含まれている必要があります。
次の結果が返されます。
name ---- |
yrsexp ------ |
dept_no ------- |
name ---- |
yrsexp ------ |
---|---|---|---|---|
Greene W | 15 | 100 | Jones M | 13 |
Carter J | 20 | 200 | Watson L | 8 |
Aguilar J | 11 | 600 | Regan R | 10 |
Leidner P | 13 | 300 | Phan A | 12 |
Ressel S | 25 | 300 | Phan A | 12 |