例: 自己結合に使用されるFROM句 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/vnq1596660420420.ditamap
dita:ditavalPath
ja-JP/vnq1596660420420.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

次の文は、部門の管理者より経験年数が長い従業員を返します。

     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値よりも大きいyrs_exp値も含まれている必要があります。

次の結果が返されます。

name

----

yrs_exp

------

dept_no

-------

name

----

yrs_exp

------

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