17.05 - 例: WHERE句の検索条件でのDEFAULT関数 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-175K-JPN
Language
日本語 (日本)

次の一連の例では、WHERE句の検索条件でのDEFAULT関数を示しています。

これらの例では、次のテーブル定義があることを前提にしています。

     CREATE TABLE table14 (
       col1 INTEGER,
       col2 INTEGER DEFAULT 10,
       col3 INTEGER DEFAULT 20,
       col4 CHARACTER(60) );

     CREATE TABLE table15 (
       col1 INTEGER ,
       col2 INTEGER NOT NULL,
       col3 INTEGER NOT NULL DEFAULT NULL,
       col4 INTEGER CHECK (col4 > 10) DEFAULT 9 );

     CREATE TABLE table16 (
       col1 INTEGER,
       col2 INTEGER DEFAULT 10,
       col3 INTEGER DEFAULT 20,
       col4 CHARACTER(60)  );

次の文では、DEFAULT関数は、col2のデフォルト値、つまり10と評価されます。

     SELECT col2, col3
     FROM table16
     WHERE col1 < DEFAULT(col2);

次の文は、WHERE句で明示的に定義された検索条件を使用する等価の文です。

     SELECT col2, col3
     FROM table16
     WHERE col1 < 10;

DEFAULT関数は、述部において列名の引数で指定できます。

次の文では、DEFAULT関数は、col3のデフォルト値、つまり20と評価されます。

     SELECT col2, col3
     FROM table16
     WHERE col1 + 9 > DEFAULT(col3)+ 8;

次の文は、WHERE句で明示的に定義された検索条件を使用する等価の文です。

     SELECT col2, col3
     FROM table16
     WHERE col1 + 9 > 20 + 8;

次の問合わせでは、DEFAULT関数はcol3のデフォルト値と評価され、返された値をサブクエリーの結果と比較して、結果を返します。

     SELECT col2, col3
     FROM table16
     WHERE DEFAULT(col3) < ANY (SELECT col2
                                FROM table14);

式内の比較演算子の各側に条件として1つの列指定と1つのDEFAULT関数がある場合に限り、比較述部で列名の引数を使用せずにDEFAULT関数を指定できます。

次の例では、列参照は1つだけで、DEFAULT関数は直接これと比較されます。したがって、DEFAULT関数はcol2のデフォルト値と評価されます。

     SELECT col2, col3
     FROM table16
     WHERE col2 > DEFAULT;

次の2つの文は、意味の上で等価です。

     SELECT col2, col3
     FROM table16
     WHERE col2 > DEFAULT
     AND   DEFAULT > col3;

     SELECT col2, col3
     FROM table16
     WHERE col2 > DEFAULT(col2)
     AND   DEFAULT(col3) > col3;

DEFAULT関数がNULLと評価される場合、既存の比較ルールに従って、IS NULLまたはIS NOT NULL以外の比較演算子とともに使用されたDEFAULT関数を含む条件は、不明な値と評価されます。

以下のテーブル定義を仮定します。

     CREATE TABLE table17 (
       col1 INTEGER,
       col2 INTEGER NOT NULL DEFAULT 10,
       col3 INTEGER DEFAULT NULL );

次の例では、DEFAULT関数はNULLと評価されます。述部はUNKNOWNで、WHERE条件はFALSEであるため、この問合わせでは行は返されません。

     SELECT col1
     FROM table17
     WHERE col1 = DEFAULT;

この例では、DEFAULT関数はNULLと評価されます。最初の条件であるDEFAULT(col3) > 5はUNKNOWNですが、2つ目の条件はTRUEです。したがって、WHERE条件はTRUEになり、文はすべての行をtable17から返します。

     SELECT col1, col2
     FROM table17
     WHERE DEFAULT(col3) > 5
     OR    DEFAULT(col3) IS NULL;

次の例では、DEFAULT関数はNULLと評価されます。述部はUNKNOWNで、WHERE条件はFALSEです。そのため、この文では行は返されません。

     SELECT col1
     FROM table17
     WHERE col2 < DEFAULT(col3) + 3;

この例では、DEFAULT関数は10と評価され、最初の条件はTRUEです。2つ目の条件DEFAULT(col2) IS NULLはFALSEです。したがって、WHERE条件はTRUEであり、この文ではすべての行がtable17から返されます。

     SELECT col1, col2
     FROM table17
     WHERE DEFAULT(col2) > 5
     OR    DEFAULT(col2) IS NULL;