相関SUBQUERYの使用 - Teradata Database - Teradata Vantage NewSQL Engine - 相関SUBQUERYの使用

Teradata Vantage™ SQLデータ操作言語

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/fbo1512081269404.ditamap
dita:ditavalPath
ja-JP/fbo1512081269404.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage
ルールと制限を以下に示します。
  • 相関サブクエリーを使用して、外部問合わせのテーブルとサブクエリーのテーブルの等価または非等価の組み合わせを指定することができます。

    例えば以下のSELECT文は、サブクエリー内に等価の条件を指定し、主問合わせ内に非等価の条件を指定しています。

          SELECT *
          FROM table_1
          WHERE x < ALL (SELECT y
                         FROM table_2
                         WHERE table_2.n = table_1.n);
  • 相関サブクエリーは深さ64の入れ子にすることができます。

    例えば以下のSELECT文は、3重の入れ子を指定します。

          SELECT *
          FROM table_1
          WHERE x = (SELECT y
                     FROM table_2
                     WHERE table_2.n = table_1.n
                     AND t2.m = (SELECT y
                                 FROM table_3
                                 WHERE table_3.n = table_2.m
                                 AND   table_1.l = table_3.l));
  • 相関サブクエリーは、外問合わせのFROM句内に指定されているテーブルと同じテーブルを参照することができます。

    内テーブルと外テーブルへの参照を区別するために、一方のテーブルの名前を相関名に変える必要があります。

    最初の例では外テーブルに別名が付けられるのに対して、2番目の例では内テーブルに別名が付けられます。

    また、最初の例では外部参照はa.nですが、2番目の例では外部参照はtable_1.nです。

          SELECT *
          FROM table_1 AS a
          WHERE x < (SELECT AVG(table_1.x)
                     FROM table_1
                     WHERE table_1.n = a.n);
    
          SELECT *
          FROM table_1
          WHERE x < (SELECT AVG(a.x)
                     FROM table_1 AS a
                     WHERE table_1.n = a.n);
  • 相関サブクエリーにSELECT AND CONSUME文を含めることはできません。
  • 相関サブクエリーにTOP n演算子を含めることはできません。
  • SELECTは、外問合わせ、主問合わせ、またはサブクエリーで指定できます。
    SELECTの指定 説明
    メイン クエリー その主問合わせで参照されるテーブルはすべて、主問合わせのSELECTのFROM句に指定しなければなりません。
    subquery そのサブクエリーで参照されるテーブルはすべて、サブクエリーのFROM句または外問合わせに指定しなければなりません。

    サブクエリーのselect式リストにおいて、外問合わせのFROM句のテーブルへの列参照が指定されている場合、その列参照は完全修飾の参照でなければなりません。

    修飾されていない列参照が相関条件に指定されている場合、現行サブクエリーに含まれるテーブルとビューから列がTeradata Databaseによって検索され、見つからない場合は、順次、その外側の問合わせのテーブルとビューの中から列が検索されていきます。

  • 相関サブクエリーは、次の条件でFROM句で指定することができます。
    サブクエリーで参照されるテーブルの参照場所 テーブル参照の状態
    サブクエリー テーブル参照はローカルでサブクエリーは非相関になります。
    外問合わせのFROM句 テーブル参照はローカルでなくサブクエリーは相関になります。
以下のルールは、相関サブクエリーでFROM句を指定する際に適用されます。
  • どのサブクエリーの指定にも、FROM句は必須です。
  • FROM句は、外問合わせでは必須ではありません。ただし、将来のリリースでANSI SQL:2011ルールが適用された場合、SELECT内で参照するすべてのテーブルをFROM句に指定する必要が生じるので、常にFROM句を指定するようにアプリケーションを作成しなければなりません。さらに重要な点として、FROM句にテーブルを明示的に指定すると、よりわかりやすくなるため、問合わせのコーディング時にエラーを防ぐ助けになります。

    Teradata Databaseは、FROM句に参照テーブルを指定しないと警告メッセージを返します。