16.20 - 再帰的WITH句 - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQLデータ操作言語

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Release Date
2019年3月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-162K-JPN
Language
日本語 (日本)

問合わせ定義で自身を参照できる、RECURSIVE名前付き問合わせです。名前付き問合わせリストは、少なくとも1つの非再帰(またはシード)文と、少なくとも1つの再帰文で構成されます。

RECURSIVE query_name
再帰的問合わせの名前。
column_name
指定された問合わせ定義中の列の名前。
UNION ALL
反復操作の結果を名前付き問合わせに追加するための演算子。

シード文

シード文は、名前付き問合わせで格納するための行データを他のテーブルから取り出す非再帰的SELECT文です。

DISTINCT
指定された式リストからの結果の重複するセットから、1行だけが返されます。
2行が重複するとみなされるのは、一方の行の各値が他方の行の対応する値と同じ場合だけです。
ALL
式リストの結果に、重複行を含むすべての行が返されます。これは、デフォルト値です。
*
シード文のFROM句で参照されるすべてのテーブルのすべての列が返されます。
table_nameによって修飾された場合、table_nameのみのすべての列が返されます。
expression
スカラーUDFを含む、任意の有効なSQL式。
AS
オプションのexpression_alias_nameを指定します。
expression_alias_name
式の別名。
table_name
テーブル、派生テーブル、またはビューの名前。
選択リストのtable_name.*を使用すると、FROM句で複数のテーブルが参照される場合に、どちらのテーブルから行が返されるかを定義できます。
FROM
この後にexpressionで参照するテーブル、ビュー、または派生テーブルの名前が続くことを指定します。
シード文のFROM句にTABLEオプションを指定することはできません。

単一テーブル

このオプションによって、シード文のFROM句に単一のテーブルを指定できます。

FROM句には、単一テーブルへの一連の参照を含めることができます。その場合、暗黙のうちに内部結合が作成されます。

シード文のFROM句にWITH RECURSIVE問合わせの名前を指定することはできません。

table_name
FROM句で参照される単一テーブル、派生テーブル、UDFテーブル、またはビューの名前。
AS
オプションのcorrelation_nameを指定します。
correlation_name
FROM句で参照されるテーブルの別名。

結合テーブル

シード文のFROM句の結合テーブルオプションを使用すると、前述のようにして複数のテーブルを明示的に結合することを指定できます。

joined_table
結合テーブルの名前。
INNER
一方のテーブルの修飾行が、結合条件に従って、別のテーブルの修飾行と結合される結合。
内部結合はデフォルト値の結合タイプです。
LEFT OUTER
FROM句に最初にリストされたテーブルとの外部結合。
LEFT OUTER JOINでは、左側のテーブル内の、2つのテーブルの内部結合の結果に返されない行が、nullで拡張されて外部結合の結果に返されます。
RIGHT OUTER
FROM句に2番目にリストされたテーブルとの外部結合。
RIGHT OUTER JOINでは、右側のテーブル内の、2つのテーブルの内部結合の結果に返されない行が、nullで拡張されて外部結合の結果に返されます。
FULL OUTER
行は両方のテーブルから返されます。
完全外部結合では、両方のテーブルの中の内部結合の結果に返されなかった行が、nullで拡張されて外部結合の結果に返されます。
JOIN
後に続く結合の対象となる2番目のテーブルの名前を指定します。
ON search_condition
結果の行が満たす必要がある1つまたは複数の条件式。
FROM句に外部結合を指定する場合には、ON条件句は必須です。
検索条件の行レベル セキュリティ制約に指定する値は、エンコード形式にする必要があります。
CROSS JOIN
制約のない結合または直積の結合。CROSS JOINは、FROM句に指定されたすべてのテーブルのすべての行を返します。
完全外部結合では、両方のテーブルの中の内部結合の結果に返されなかった行が、nullで拡張されて外部結合の結果に返されます。

派生テーブル

シード文のFROM句の派生テーブル オプションを使うと、基礎となるテーブル セットから選択されたデータから成るスプールを指定できます。派生テーブルは、ビュー テーブルのように動作します。

(subquery)
入れ子のSELECT文を指定します。
サブクエリーの中にSELECT AND CONSUME文を使用することはできません。
サブクエリーでNORMALIZEを指定できます。
AS
オプションのderived_table_nameを指定します。
derived_table_name
派生テーブルの名前。
column_name
列名。このフィールドでは列名のみを指定します。「テーブル名.列名」や「データベース名.テーブル名.列名」のような形式は指定しないでください。
UDT型の列は有効ですが、例外があります。
WHERE
後に続くシード文の検索条件を指定します。
search_condition
シード文によって返される行が満たしていなければならない条件付き検索式。
検索条件に行レベル セキュリティ制約の値を指定すると、この値はエンコード形式で表現しなければなりません。
GROUP BY
後に続く結果行の分類方法を指定します。
ordinary_group_set
シード文によって返される行をグループ分けする列式。
式は、LOB、ARRAYまたはVARRAYのタイプがある結果行をグループ化できません。
ordinary_grouping_setは、次の3つの一般カテゴリに分けられます。
  • column_name
  • column_position
  • column_expression
empty_grouping_set
引数を持たない、隣接するLEFT PARENTHESIS、RIGHT PARENTHESISのペア。この構文は、計算されたグループ合計の総計を要求するために使用します。
rollup_list
結果行を単一の次元の1つ以上の詳細レベルで報告するROLLUP式。
式は、LOB、ARRAYまたはVARRAYのタイプがある結果行をグループ化できません。
cube_list
結果行を複数の次元の1つ以上の詳細レベルで報告するCUBE式。
式は、LOB、ARRAYまたはVARRAYのタイプがある結果行をグループ化できません。
grouping_sets_specification
結果行を次のいずれかの方法で報告するGROUPING SETS式。
  • 単一の次元(完全なROLLUPを指定しない)
  • 複数の次元(完全なCUBEを指定しない)
HAVING
後に続くSELECT文内の条件句を指定します。
search_condition
結果の行が満たす必要がある1つまたは複数の条件式。
検索条件に行レベル セキュリティ制約の値を指定すると、この値はエンコード形式で表現しなければなりません。
QUALIFY
このキーワードの後に条件句が続くことを指定し、WHERE句から行をフィルタにかけます。QUALIFYとHAVINGとの相違点は、QUALIFYのフィルタリングでは、フィルタがデータ上にある多種類の順序付き分析機能の実行結果に基づいていることです。
search_condition
結果の行が満たす必要がある1つまたは複数の条件式。
検索条件に行レベル セキュリティ制約の値を指定すると、この値はエンコード形式で表現しなければなりません。
ORDER BY
結果行をソートする順序。
expression
シード文のSELECT式リスト内の式を、名前、または式リスト内の式の数値の位置を指定する定数によって参照します。
column_name
SELECT文のORDER BY句で使用される列(複数可)の名前。これらの列を、昇順または降順にすることができます。
column_name_alias
問合わせのSELECT式リストに指定されている列名の別名。この列で、結果の行がソートされます。
column_name_aliasをソート値として指定する場合、その列が選択リストで指定されているかどうかにかかわらず、その列の別名を問合わせのFROM句で参照されているテーブルに定義されている列の名前と同じ名前にすることはできません。システムは常に、ユーザーが指定する列の別名よりも、基礎となる物理的な列の名前を優先して参照します。
問合わせの選択リスト内で、ソート列をcolumn_position値で指定できます。
column_position
ORDER BY句で指定される列の位置数値。昇順または降順にできます。
ASC
結果が昇順でソートされます。
ソート フィールドが文字列の場合、システムは現在のセッションの照合順序の定義に従って、昇順で整列します。
デフォルトの順序はASCです。
DESC
結果が降順でソートされます。
ソート フィールドが文字列の場合、システムは現在のセッションの照合順序の定義に従って、降順でソートします。

再帰文

再帰文は、名前付き問合わせと他のテーブルの結合から行データを取り出すためのSELECT文です。

再帰的問合わせの再帰文にNORMALIZEを含めることはできません。

*
再帰文のFROM句で参照されるすべてのテーブルのすべての列が返されます。
table_nameで修飾したときには、table_nameのすべての列だけが返されることを指定します。
expression
任意の有効なSQL式。ただし、次のものを除きます。
  • 集約関数
  • 順序付き分析関数
AS
オプションのexpression_alias_nameを指定します。
expression_alias_name
expressionの別名。
table_name
名前付き問合わせの名前、またはテーブルまたはビューの名前。
選択リストのtable_name.*を使用すると、FROM句で複数のテーブルが参照される場合に、どちらのテーブルから行が返されるかを定義できます。
FROM
このキーワードの後に、expressionの派生元となる名前付き問合わせおよび1つ以上のテーブルまたはビューの名前が続きます。
再帰文のFROM句にTABLEオプションを指定することはできません。

暗黙結合

再帰文のFROM句のこのオプションは、RECURSIVE問合わせの名前と、1つ以上の単一テーブルの参照とを指定し、その暗黙内部結合を作成する場合に使用します。

query_name
FROM句で参照する名前付き問合わせ。
AS
オプションのcorrelation_nameを指定します。
correlation_name
FROM句で参照される問合わせ名の別名。
table_name
FROM句で参照される単一テーブルまたはビューの名前。
AS
オプションのcorrelation_nameを指定します。
correlation_name
FROM句で参照されるテーブル名の別名。

明示結合

シード文のFROM句の結合テーブルオプションを使用すると、下記のとおり複数のテーブルを明示的に結合することを指定できます。

query_name
FROM句で参照する名前付き問合わせ。
join_table_name
結合テーブルの名前。
INNER JOIN
一方のテーブルの修飾行が、結合条件に従って、別のテーブルの修飾行と結合される結合。
内部結合はデフォルト値の結合タイプです。
LEFT OUTER
FROM句に最初にリストされたテーブルとの外部結合。
LEFT OUTER JOINでは、左側のテーブル内の、2つのテーブルの内部結合の結果に返されない行が、nullで拡張されて外部結合の結果に返されます。
RIGHT OUTER
FROM句に2番目にリストされたテーブルとの外部結合。
RIGHT OUTER JOINでは、右側のテーブル内の、2つのテーブルの内部結合の結果に返されない行が、nullで拡張されて外部結合の結果に返されます。
JOIN
後に続く結合の対象となる2番目のテーブルの名前を指定します。
joined_table
結合テーブルの名前。
ON search_condition
結果の行が満たす必要がある1つまたは複数の条件式。
検索条件の行レベル セキュリティ制約に指定する値は、エンコード形式にする必要があります。
FROM句に外部結合を指定する場合には、ON条件句は必須です。

WHERE句

WHERE
再帰文で検索条件を指定するキーワード。
search_condition
再帰文によって返される行が満たしていなければならない条件付きの検索式を指定します。
検索条件の行レベル セキュリティ制約に指定する値は、エンコード形式にする必要があります。