Subquery を使用したAS句のカスタマイズ - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

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

Subquery は、ターゲット テーブルの定義とデータをカスタマイズするための強力な手段です。クエリー式を使用して、ターゲット テーブル定義のソース列を選択することができます。

副クエリーを使用してソース テーブルの列および収集された統計(オプション)をコピーする場合、1つ以上の列記述子を同時に指定しない限り、システムはそれらの列の属性をソース テーブルからターゲット テーブルにコピーしません。列記述子を指定した場合には、副クエリーで明示的に指定した列の属性だけがターゲット テーブルにコピーされます。

列記述子を指定しない場合、システムは選択されたソース列のデータ型(およびオプションで、収集された統計)、またはサブクエリー式で使用された列の結果としてのデータ型だけをターゲット テーブルにコピーします。FORMAT、DEFAULT、COMPRESSなどの属性は、明示的に指定しない限り、コピーされません。

列記述子は、ターゲット テーブルの列名に、1つ以上の列属性の指定を続けたものです。ターゲット テーブルの定義に列記述子を指定する場合、それが指定する列属性は、選択したソース列にある異なる属性を置き換えます。

システムは、サブクエリーの列記述子に明示的に指定されていないソース列の属性も、選択した列からターゲット テーブルにコピーするので、注意が必要です。例については、<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>を参照してください。

ソースは基本テーブル定義ではなくサブクエリーから派生しているため、次のことが当てはまります。
  • テーブルtのテーブル レベル属性はテーブルt1にはコピーされません。
  • テーブルtに定義されたインデックスは、テーブルt1にはコピーされません。
  • 明示的なプライマリ インデックスが指定されなかったため、システムはt1の最初の有効な列である列aを非固有プライマリ インデックスとして選択しました。
CREATE TABLE … ASのサブクエリー形式の制限には、いくつかの対処方法があります。
  • 副クエリー形式を使用しますが、ターゲット テーブルにはインデックスと他のテーブルの列記述子を明示的に指定します。
  • CREATE TABLE … ASのsubquery ではない形式を使用します。
  • サブクエリー形式を使用した後、ALTER TABLEを使用します。新しいテーブルに必要な属性を追加する方法については、ALTER TABLE (テーブルの基本的なパラメータ)を参照してください。
  • CREATE TABLE … ASのWITH DATAオプション(ソースの定義にサブクエリーを使用するAS … WITH NO DATAに関するルールを参照)を使用するか、新しいテーブルを作成してから、INSERT … SELECT文を使用して元のテーブルからデータを入力します。Teradata Vantage™ - SQLデータ操作言語、B035-1146を参照してください。
AS句で表わされるサブクエリーの使用規則を次に示します。
  • 有効な副クエリーのほとんどをAS句に指定できます。
  • 有効なsubquery に関する制限はどれも、AS句のsubquery の形式にも当てはまります。たとえば、次の制限が適用されます。
    • ORDER BY句は指定できません。
    • 再帰的ビュー定義内で指定される条件のWHERE、HAVING、QUALIFY、またはONの各句は、述部の副クエリー内のSAMPLE句を指定できません。
    • 次の表に、AS句とNAMED句のルールを示します。
      指定されるオプション 説明
      AS句とNAMED句の両方が指定されている AS句が優先され、ターゲット テーブルの列名はAS句に指定されている名前から派生します。
      列名が指定されていない ターゲット テーブルの派生列の名前を指定するために、式に指定された名前が使用されます。
  • Subquery には、次の制限が適用されます。
    サブクエリーに含まれるもの 説明
    列名 新しいテーブルの列名は、デフォルトで、選択された列の既存の名前になります。ただし、別の列名を指定していない場合に限ります。
    結合式 結合されるテーブルに重複する列名が含まれている場合、それらは完全修飾名を使用することによって区別される必要があります。
  • 副クエリー形式のAS句については、以下のコピー特性が定義されています。
    • データ型以外の列レベルの属性はコピーされません。
    • インデックスを含むテーブル レベルの属性はコピーされません。
    • CREATE TABLE文に明示的に値を指定しない限り、以下に挙げるユーザーまたはデータベース デフォルト属性がターゲット テーブルに使用されます。

      標準的なユーザー デフォルトおよびデータベース デフォルトを、次の表に示します。

      テーブル オプション 永久テーブルのデフォルト グローバル一時テーブルのデフォルト 揮発テーブルのデフォルト
      フォールバック
      フォールバック用に最適化されたプラットフォームでは、NO FALLBACKのオプションとNO FALLBACKのデフォルトは使用できません。
      なし なし なし
      永久ジャーナリング なし(変更前)

      なし(変更後)

      許可されていない 許可されていない
      トランザクション ジャーナリング なし ログ ログ
      参照整合性制約 なし 許可されていない 許可されていない
      CHECKまたはBETWEEN制約 なし なし 許可されていない
      COMPRESS列 なし なし 許可されていない
      DEFAULTおよびTITLE句 なし なし 許可されていない
      名前付きインデックス なし なし 許可されていない
      FREESPACEまたはDBSIZE ユーザーまたはデータベースのデフォルト ユーザーまたはデータベースのデフォルト ユーザーまたはデータベースのデフォルト
      ON COMMIT 適用なし 削除 削除