ヘッダーをスキップ
Oracle TimesTen In-Memory Database SQLリファレンス・ガイド
リリース7.0
E05176-03
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

SELECT

SELECT文は、1つ以上の表からデータを取得します。取得されたデータは、結果表または問合せ結果と呼ばれる表の形式で表示されます。

アクセス制御

TimesTenインスタンスでアクセス制御が有効な場合、この文にはSELECT権限またはデータ・ストア・オブジェクトの所有権が必要です。TimesTenインスタンスでアクセス制御が有効で、かつSELECT FOR UPDATE句を指定する場合は、WRITE権限も必要です。

SQL構文

SELECT文の一般的な構文は、次のとおりです。

  SELECT [FIRST NumRows | ROWS M TO N] [ALL | DISTINCT] SelectList

   FROM TableSpec [,...]

   [WHERE SearchCondition]

   [GROUP BY Expression [,...]]

   [HAVING SearchCondition]

   [ORDER BY {ColumnID|ColumnAlias|Expression} [ASC | DESC]]

   [,...]

   [FOR UPDATE [OF [[Owner.]TableName.]ColumnName [,...] ]

       [NOWAIT | WAIT Seconds] ]

集合演算子UNION、UNION ALL、MINUSまたはINTERSECTを含むSELECT文の構文は、次のとおりです。

  SELECT [ROWS M TO N] [ALL] SelectList

   FROM TableSpec [,...]

    [WHERE SearchCondition]

    [GROUP BY Expression [,...]]

    [HAVING SearchCondition] [,...]

  {UNION [ALL] | MINUS | INTERSECT}

  SELECT [ROWS M TO N] [ALL] SelectList

    FROM TableSpec [,...]

     [WHERE SearchCondition]

     [GROUP BY Expression [,...]]

     [HAVING SearchCondition] [,...]
     [ORDER BY {ColumnID|ColumnAlias|Expression} [ASC | DESC]

パラメータ

SELECT文には、次のパラメータがあります。

パラメータ
説明
FIRST NumRows
取得する行の数を指定します。NumRowsには、正のINTEGERか動的パラメータのプレースホルダを指定する必要があります。動的パラメータのプレースホルダの構文は、?または:DynamicParameterです。動的パラメータの値は、文の実行時に設定されます。
ROWS M TO N
取得する行の範囲を指定します。Mは選択する先頭行、Nは選択する最終行です。行のカウントは行1から開始します。問合せSELECT ROWS 1 to N ...は、SELECT FIRST NumRowsと同じ行を返します(問合せが並べ替えられ、NNumRowsの値が同じである場合)。

MおよびN値には、正のINTEGERか動的パラメータのプレースホルダを指定する必要があります。動的パラメータのプレースホルダの構文は、?または:DynamicParameterです。動的パラメータの値は、文の実行時に設定されます。

ALL
問合せ結果の重複する行が削除されないようにします。ALLまたはDISTINCTのいずれも指定しない場合、ALLとみなされます。
DISTINCT
問合せ結果の各行が一意となるようにします。この比較では、NULL値はすべて同じとみなされます。重複行は評価されません。
SelectList
問合せ結果の列の導出方法を指定します。SelectListの構文の詳細は、「SelectList」を参照してください。
FROM TableSpec

SELECT文で参照される表を指定します。問合せごとの表の最大数は24です。

TableSpecは、行を選択する表を指定します。SELECT文のFROM句によって生成された導出表を指定することもできます。TableSpecの構文の詳細は、「TableSpec」を参照してください。

WHERE
SearchCondition

WHERE句は取得する行のセットを決定します。通常、SearchConditionがFALSEまたはNULLと評価された行は、処理対象となりません。ただし、SearchConditionは、外部結合を指定するために使用できます。外部結合では、外部表の行うち、関連する内部表に対するSearchConditionの評価がTRUEでない行も返され、内部表を参照する投影式がNULLに設定されます。

列およびROWID式に単項演算子(+)を使用して、外部結合を示すことができます。(+)演算子は、内部表を参照する結合条件のすべての列およびROWID式の後に指定する必要があります。(+)演算子を使用するにはいくつか条件があります。通常、これらの条件によって、作成できる外部結合問合せの種類は制限されます。(+)演算子はWHERE句に指定することができ、HAVING句には指定できません。2つの表を外部結合することはできません。外部結合条件をORで結ぶことはできません。

検索条件の詳細は、「検索条件」を参照してください。

GROUP BY
Expression [,...]
GROUP BY句には、1つまたは複数の式を指定して、SelectListに集計関数を指定したり、行のグループに関数を適用する場合に使用します。

複雑な式でも記述できます。たとえば、単一または複数の列を指定したり、集計関数、算術演算子、ROWID擬似列またはNULLを含めることができます。指定できるのは、日付関数、ユーザー関数、定数または動的パラメータです。

GROUP BY句を使用する場合、SelectListには集計関数およびGROUP BY句で参照される列のみを含めることができます。SelectListに*、TableName.*、またはOwner.TableName.*構成要素が含まれている場合は、*に含まれているすべての列をGROUP BY句に含める必要があります。グループ化された行では、NULL値は同じ値とみなされます。他のすべての列が同じである場合、列中のすべてのNULLは単一のグループにまとめられます。

GROUP BY句を省略した場合、問合せの結果全体が1つのグループとして扱われます。

HAVING

SELECT問合せでHAVING句を使用して、集計結果のグループをフィルタ処理できます。SELECT問合せにHAVING句が存在すると、問合せは集計問合せとなります。WHERE句を除くすべての句の集計関数のソース以外で参照されるすべての列は、GROUP BY句に指定する必要があります。

副問合せは、HAVING句で指定できます。

(+)
単純な結合(内部結合とも呼ばれる)では、SearchConditionで指定された結合条件を満たす結合表の行の組合せごとに1行が返されます。外部結合はこの演算子の拡張機能であり、結合された内部表での一致する行の有無に関係なく、外部表のすべての行が返されます。一致する行がなかった場合は、内部表を参照する投影式にNULL値が与えられます。
ORDER BY
指定した列または式に基づいて、問合せの結果行をソートします。ソート・キーとして使用する列を、優先順位の高いものから順に指定します。最大255の列を指定できます。列ごとに、ソート順序を昇順または降順で指定できます。ASCまたはDESCのいずれも指定しない場合は、昇順が適用されます。文字列は、ASCIIデータのASCII照合順番に従って比較されます。
ORDER BY句では、列の別名がサポートされています。列の別名は、ORDER BY句でのみ参照可能です。単一の問合せ内では、同じ名前を持つ、列の別名を複数宣言できますが、その別名を参照するとエラーが発生します。
ORDER BY句では、NCHAR型はサポートされていません。
ColumnID
SelectListの列に対応する必要があります。ソートする列を指定するには、その名前または序数を指定します。SelectListの最初の列の番号は1です。SelectListの列を参照する場合、それが単純な列でない場合は、列番号を使用する方が適切です。これには、集計関数、算術式、定数などが該当します。

ORDER BY句のColumnIDの構文は、次のとおりです。

{ColumnNumber | [[Owner.]TableName.] ColumnName}

ColumnAlias
ORDER BY句で使用されます。列の別名はSelectListの列と対応している必要があります。同じ別名で複数の列を識別することができます。

{* |  [Owner.]TableName.* |
  { Expression | [[Owner.]TableName.]ColumnName |
    [[Owner.]TableName.]ROWID
  }
  [[AS] ColumnAlias] } [,...]

FOR UPDATE
[OF [[Owner.]
TableName.]
ColumnName [,...]]
[NOWAIT | WAIT Seconds]

FOR UPDATE

  • 分離モードに関係なく、現在のトランザクションが終了するまで、要素(通常は行)のロックを保持します。その要素に対する他のすべてのトランザクションの操作は、トランザクションがコミットまたはロールバックされるまで実行されません。
  • FOR UPDATEは、結合、ORDER BY、GROUP BYおよびDISTINCT句で使用されます。オプティマイザが選択した表/行のロック方法に応じて、表または行のいずれかの更新ロックが取得されます。
  • FOR UPDATE OF句が指定されていないかぎり、UPDATEモードでは、WHERE句の条件を満たすすべての表の行がロックされます。この句ではロックする表を指定します。
  • 行ロックを使用する場合、FROM句の表リストの表のうち、条件を満たすすべての行は、更新モードでロックされます。条件を満たす行は、WHERE句を満たす行です。表ロックを使用する場合、条件を満たす行の有無にかかわらず、表は更新モードでロックされます。
  • シリアライズ可能な分離レベルと行ロックが有効になっている場合、条件を満たさない行は共有モードに切り換えられます。コミット読取り分離レベルと行ロックが有効になっている場合、条件を満たさない行のロックは解除されます。
  • SELECT...FOR UPDATEのロックは、SELECTのロックによってはブロックされません。

FOR UPDATE [OF [[Owner.]TableName.]ColumnName [,...] ]

  • オプションで、更新のためにロックされる表の列名を含めます。

[NOWAIT | WAIT Seconds]

  • 選択した行がロックされている場合の処理方法を指定します。
  • NOWAITでは、ロックを待機することなく、ロックを取得できない場合はエラーを返すよう指定します。
  • WAIT Secondsでは、ロック・タイムアウト設定を次のように指定します。
    • 指定された時間内にロックを取得できない場合、エラーが返されます。
    • ロック・タイムアウト設定は、秒または秒の小数部で表します。Secondsのデータ型はNUMBERで、0.0から1000000.0の値が有効です。
  • NOWAITおよびWAITのいずれも指定しない場合、トランザクションのロック・タイムアウト間隔が使用されます。
SelectQuery1
{UNION [ALL] | MINUS | INTERSECT}
SelectQuery2

SelectQuery1およびSelectQuery2の結果が結合されることを指定します。SelectQuery1およびSelectQuery2は、いくつかの制限を含む一般的なSELECT文です。

UNION演算子は、2つの問合せの結果を結合します。それぞれの問合せ文のSelectListには互換性がある必要があります。UNION ALLが指定されている場合は、両方のSELECT文の重複行が保持されます。指定されていない場合、重複行は削除されます。

MINUS演算子は、2番目の問合せではなく最初の問合せで返された行を1つの結果に結合します。

INTERSECT演算子は、両方の問合せで返された行のみを1つの結果に結合します。

両方のSELECT文で選択された対応するエントリのデータ型には、互換性が必要です。データ型を変換するには、CAST演算子を使用します。NULL値可能かどうかは一致している必要はありません。

結果内の列の長さは、列に対応する選択値のうち長い方になります。最終的な結果の列名は、最も左側で選択された列の名前になります。

集合演算子UNION、UNION ALL、MINUS、INTERSECTを使用して、複数の問合せを組み合せることができます。

集合演算子の一方または両方のオペランドに集合演算子を指定できます。複数の集合演算子やネストされた集合演算子は、左から右に評価されます。

同じ問合せで集合演算子を同時に指定できます。

集合演算子を指定するSELECT文には、次の制限があります。

  • SELECT文では、FIRST NumRowsを指定できません。
  • 集合演算子を使用できるのは、SELECT文、INSERT SELECT文、導出表またはビューの最も外側のみです。
  • 最終結果をソートするためにORDER BYを指定することはできますが、集合演算子の各オペランドで使用することはできません。ORDER BY句で指定できるのは、最も左側のSELECTの表の列名または列の別名のみです。
  • GROUP BYは、集合演算子の各SELECTオペランドをグループ化するために使用できますが、集合演算子の結果をグループ化するためには使用できません。
  • マテリアライズド・ビューや結合表では、集合演算子を使用できません。

説明

例5.123

次の例では、SELECT文で列の別名を使用します。

SELECT max(salary) AS max_salary
FROM employee WHERE employee.age < 30;

例5.124

次の例では、2つの表OrdersおよびLineItemsを使用します。

次のようにしてOrders表を作成します。

CREATE TABLE Orders(OrderNo INTEGER, OrderDate DATE, Customer CHAR(20));

CREATE TABLE LineItems(OrderNo INTEGER, LineNo INTEGER,
    Qty INTEGER, UnitPrice DECIMAL(10,2));

つまり、注文ごとにOrders表に1つのレコードがあり、注文の各明細を示すレコードがLineItemsにあります。

年頭以降に入力されたすべてのOrdersの合計を検索するには、HAVING句を使用して、2000年1月1日以降に入力された注文のみを選択します。

SELECT O.OrderNo, CUSTOMER, ORDERDATE, SUM(Qty * UnitPrice)

FROM Orders O, LineItems L

WHERE O.OrderNo=L.OrderNo

GROUP BY O.OrderNo, CUSTOMER, ORDERDATE

HAVING ORDERDATE >= DATE '2000-01-01';

例5.125

次の問合せは、次の条件を満たすTableAのすべての行をロックします。

また、この問合せは、次の条件を満たすTableBのすべての行もロックします。

WHERE句を指定しない場合、両方の表のすべての行がロックされます。

SELECT * FROM TableA, TableB

WHERE TableA.Column1 = TableB.Column1 AND TableB.Column2 > 5

FOR UPDATE

例5.126

次の問合せは、内部表t2が2つの外部表(t1およびt3)に対応しているため、エラーとなります。

SELECT * FROM t1, t2, t3

WHERE t1.x = t2.x(+) and t3.y = t2.y(+);

次に、有効な構文を示します。

SELECT * FROM t1, t2

WHERE t1.x = t2.x(+);

例5.127

外部結合条件はORで連結できないため、次の問合せはエラーとなります。

SELECT * FROM t1, t2, t3

WHERE t1.x = t2.x(+) OR t3.y = 5;

これに対し、次の問合せは有効です。

SELECT * FROM t1, t2, t3

WHERE t1.x = t2.x(+) AND (t3.y = 4 OR t3.y = 5);

例5.128

IN演算子を使用して(+)記号の付いた列を比較することはできません。たとえば、次の問合せはエラーとなります。

SELECT * FROM t1, t2, t3

WHERE t1.x = t2.x(+) AND t2.y(+) IN (4,5);

これに対し、次の問合せは有効です。

SELECT * FROM t1, t2, t3

WHERE t1.x = t2.x(+) AND t1.y IN (4,5);

例5.129

次の問合せでは、結合条件ごとに(+)演算子が指定されておらず、(+)が指定されていない条件は内部結合条件として扱われるため、外部結合ではなく内部結合が実行されます。

SELECT * FROM t1, t2

WHERE t1.x = t2.x(+) AND t1.y = t2.y;

例5.130

次の問合せのWHERE句には、外部結合の内部表の列と定数を比較する条件が含まれています。(+)演算子が指定されていないため、この条件は内部結合として扱われます。

SELECT * FROM t1, t2

WHERE t1.x = t2.x(+) AND t2.y = 3;

例5.131

2つの表を同時に外部結合できないため、次の問合せはエラーとなります。

SELECT * FROM t1, t2

WHERE x1 = x2(+) AND y2 = y1(+);

例5.132

student表内の現在の順序値を検索します。

SELECT seq.CURRVAL FROM student;

例5.133

次の問合せでは、(+)演算子が内部表t2の列x2に指定されていないため、条件x2 + y2(+) = 1は内部結合条件として扱われます。2つの表を同時に外部結合できないため、この文はエラーとなります。

SELECT * FROM t1, t2

WHERE x1 = x2(+) AND x2 + y2(+) = 1;

例5.134

(+)演算子が結合条件に指定されていないため、次の問合せで外部結合は実行されません。

SELECT * FROM t1, t2

WHERE x2(+) = 1;

例5.135

次の問合せのFROM句にはSELECT文が含まれているため、導出表が生成されます。

SELECT * FROM t1, (SELECT MAX(x2) MAXX2 FROM t2) tab2

WHERE t1.x1 = tab2.MAXX2;

例5.136

次の問合せは、2つのSELECT文の結果を結合します。

SELECT * FROM t1

WHERE x1 IN (SELECT x2 FROM t2)

UNION SELECT * FROM t1 WHERE x1 IN (SELECT x3 FROM t3);

例5.137

カテゴリ内の最高価格と同じ価格のすべての注文を選択します。

SELECT * FROM orders WHERE price = (SELECT MAX(price)

FROM stock WHERE stock.cat=orders.cat);

例5.138

この例では、INTERSECT集合演算子の使用方法を示しています。employees表にNULLのdepartment_idがあります。departments表では、department_idはNOT NULLの主キーとして定義されます。INTERSECT集合演算子を使用して返される行には、department_idがNULLのdepartments表の行は含まれません。

Command> SELECT department_id FROM employees INTERSECT SELECT department_id FROM departments;

< 10 >

< 20 >

< 30 >

< 40 >

< 50 >

< 60 >

< 70 >

< 80 >

< 90 >

< 100 >

< 110 >

11 rows found.

Command> SELECT DISTINCT department_id FROM employees;

< 10 >

< 20 >

< 30 >

< 40 >

< 50 >

< 60 >

< 70 >

< 80 >

< 90 >

< 100 >

< 110 >

< <NULL> >

12 rows found.

例5.139

この例では、最初の問合せでは返されるが、2番目の問合せでは返されない行を合わせて、MINUS集合演算子の使用方法を示します。employees表にNULLのdepartment_idを含む行のみが返されます。

Command> SELECT department_id FROM employees MINUS SELECT department_id FROM departments;

< <NULL> >

1 row found.

例5.140

次の例では、employees表の従業員の給与を合計し、SUBSTR式を使用して、職務権限ごとにデータをグループ化します。

Command> SELECT SUBSTR (JOB_ID, 4,10), SUM (SALARY) FROM EMPLOYEES

GROUP BY SUBSTR (JOB_ID,4,10);

< PRES, 24000 >

< VP, 34000 >

< PROG, 28800 >

< MGR, 24000 >

< ACCOUNT, 47900 >

< MAN, 121400 >

< CLERK, 133900 >

< REP, 273000 >

< ASST, 4400 >

9 rows found.

例5.141

この例では、GROUP BY句におけるSUBSTR式の使用方法およびHAVING句における副問合せの使用方法を示します。最初の10行が返されます。

Command> SELECT ROWS 1 TO 10 SUBSTR (JOB_ID, 4,10),department_id, manager_id, SUM (SALARY) FROM employees

>GROUP BY SUBSTR (JOB_ID,4,10),department_id, manager_id

> HAVING (department_id, manager_id) IN

> (SELECT department_id, manager_id FROM employees x

> WHERE x.department_id = employees.department_id)

> ORDER BY substr (job_id, 4,10),department_id,manager_id;

< ACCOUNT, 100, 108, 39600 >

< ACCOUNT, 110, 205, 8300 >

< ASST, 10, 101, 4400 >

< CLERK, 30, 114, 13900 >

< CLERK, 50, 120, 22100 >

< CLERK, 50, 121, 25400 >

< CLERK, 50, 122, 23600 >

< CLERK, 50, 123, 25900 >

< CLERK, 50, 124, 23000 >

< MAN, 20, 100, 13000 >

10 rows found.

例5.142

次の例では、更新のためにemployees表をロックし、ロックが取得できるまで10秒間待機します。ロックが10秒以内に取得できない場合、エラーが返されます。最初の5行が選択されます。

Command> SELECT FIRST 5 last_name FROM employees FOR UPDATE WAIT 10;

< King >

< Kochhar >

< De Haan >

< Hunold >

< Ernst >

5 rows found.

例5.143

この例では、更新のためにdepartments表をロックします。選択した行が別のプロセスにロックされており、ロックが取得できない場合はエラーが返されます。これは、NOWAITが指定されているためです。

Command> SELECT FIRST 5 last_name e FROM employees e, departments d WHERE e.department_id = d.department_id FOR UPDATE OF d.department_id NOWAIT;

< Whalen >

< Hartstein >

< Fay >

< Raphaely >

< Khoo >

5 rows found.

例5.144

HRスキーマを使用して、副問合せとFOR UPDATE句を同時に使用する例を示します。

Command> SELECT employee_id, job_id FROM job_history WHERE

         (employee_id, job_id) NOT IN (SELECT employee_id, job_id

         FROM employees) FOR UPDATE;

< 101, AC_ACCOUNT >

< 101, AC_MGR >

< 102, IT_PROG >

< 114, ST_CLERK >

< 122, ST_CLERK >

< 176, SA_MAN >

< 200, AC_ACCOUNT >

< 201, MK_REP >

8 rows found.

例5.145

SELECT ROWS M to NおよびSELECT FIRSTの動的パラメータのプレースホルダを使用する例を示します。

Command> SELECT ROWS ? TO ? Employee_id FROM Employees;

Type '?;' for help on entering parameter values.

Type '*;' to abort the parameter entry process.

Enter Parameter 1 (TT_INTEGER) > 1

Enter Parameter 2 (TT_INTEGER) > 3

< 100 >

< 101 >

< 102 >

3 rows found.

Command> SELECT ROWS :A TO :B Employee_id FROM Employees;

Type '?;' for help on entering parameter values.

Type '*;' to abort the parameter entry process.

Enter Parameter 1 (TT_INTEGER) > 1

Enter Parameter 2 (TT_INTEGER) > 3

< 100 >

< 101 >

< 102 >

3 rows found.

Command> SELECT FIRST ? Employee_id FROM Employees;

Type '?;' for help on entering parameter values.

Type '*;' to abort the parameter entry process.

Enter Parameter 1 (TT_INTEGER) > 3

< 100 >

< 101 >

< 102 >

3 rows found.

SelectList

SQL構文

SELECT文のSelectListパラメータの構文は、次のとおりです。

{* |  [Owner.]TableName.* |

  { Expression | [[Owner.]TableName.]ColumnName |

    [[Owner.]TableName.]ROWID | NULL

  }

  [[AS] ColumnAlias] } [,...]

パラメータ

SELECT文のSelectListには、次のパラメータがあります。

パラメータ
説明
*
問合せ結果の列として、FROM句に指定されたすべての表のすべての列を含めます。
[Owner.]TableName.*
指定した表のすべての列を結果に含めます。
Expression
複雑な式でも記述できます。たとえば、FROM句に指定されたいずれかの表の単一の列を指定したり、集計関数、算術演算子、複数の列またはNULLを含めることができます。Selectに集計問合せまたは集計式を指定した場合、GROUP BY句に指定されていない列名を指定することはできません。
[ [Owner.]Table.]
ColumnName
指定された所有者の指定された表の特定の列を含めます。順序のCURRVALまたはNEXTVAL列も指定できます。
[ [Owner.]Table.]
ROWID
指定された所有者の指定された表のROWID擬似列を含めます。
NULL
NULLを指定した場合、デフォルトではVARCHAR(0)のデータ型が生成されます。結果を別のデータ型に変換するには、CAST関数を使用します。ORDER BY句にはNULLを指定できます。
ColumnAlias
ORDER BY句で使用されます。列の別名はSelectListの列と対応している必要があります。同じ別名で複数の列を識別することができます。

{* |  [Owner.]TableName.* |
  { Expression | [[Owner.]TableName.]ColumnName |
    [[Owner.]TableName.]ROWID
  }
  [[AS] ColumnAlias] } [,...]

説明

例5.146

次の文は、部品が配送されるまでの平均日数を返します。

SELECT AVG(DeliveryDays)

FROM Purchasing.SupplyPrice;

次の文は、20日未満で配送されるすべての部品の部品番号および配送時刻が返されます。

SELECT PartNumber, DeliveryDays

FROM Purchasing.SupplyPrice

WHERE DeliveryDays < 20;

単一の部品で複数行が返される場合があります。

例5.147

次の文は、各部品の部品番号と平均価格を返します。

SELECT PartNumber, AVG(UnitPrice)

FROM Purchasing.SupplyPrice

GROUP BY PartNumber;

例5.148

この例では、結合によってカリフォルニア州の業者の名前と住所が返されます。行は、PartNumberの昇順で返されます。重複するPartNumbersを含む行は、VendorNameの昇順で返されます。

FROM句では、SelectListとWHERE句の両方で使用される、2つの相関名(vとs)を定義しています。

VendorNumberは、VendorsSupplyPriceで共通する唯一の列です。

SELECT PartNumber, VendorName, s.VendorNumber,

       VendorCity

FROM Purchasing.SupplyPrice s,

     Purchasing.Vendors v

WHERE s.VendorNumber = v.VendorNumber

AND VendorState = 'CA'

ORDER BY PartNumber, VendorName;

例5.149

この問合せでは、表Purchasing.Partsをそれ自身に結合して、シリアル番号が1133-P-01の部品と同じ販売価格の部品を特定します。

SELECT q.PartNumber, q.SalesPrice

FROM Purchasing.Parts p, Purchasing.Parts q

WHERE p.SalesPrice = q.SalesPrice AND

      p.SerialNumber = '1133-P-01';

例5.150

次に、特定の行のROWIDを取得する方法の例を示します。取得したROWIDの値は、後で別のSELECT文、DELETEまたはUPDATE文で使用できます。

SELECT ROWID

FROM Purchasing.Vendors
WHERE VendorNumber = 123;

例5.151

次に、列の別名を使用して、employees表からデータを取得する方法の例を示します。

SELECT max(salary) AS max_salary FROM employees;

TableSpec

SQL構文

SELECT文のTableSpecパラメータの構文は、次のとおりです。

{[Owner.]TableName [CorrelationName] | JoinedTable |

    DerivedTable}

単純な表指定の構文は、次のとおりです。

[Owner.]TableName

パラメータ

SELECT文のTableSpecには、次のパラメータがあります。

パラメータ
説明
[Owner.]TableName
参照する表を指定します。
CorrelationName

CorrelationNameは、直前で指定した表へのシノニムを指定します。その表の列にアクセスする際、文の中で実際の表名ではなく相関名を使用します。相関名は、基本名の構文ルールを満たしている必要があります(「基本名」を参照)。

単一のUPDATE文のすべての相関名は、一意である必要があります。

DerivedTable
SELECT問合せの評価から導出された表を指定します。このSELECT問合せには、FIRST NumRowsまたはRows M to N句を指定できません。
JoinedTable

表の結合を定義する問合せを指定します。JoinedTableの構文の詳細は、「JoinedTable」を参照してください。

DerivedTable

SQL構文

導出表は、FROM句のSELECT文の結果で、別名を持ちます。

DerivedTableの構文は、次のとおりです。

(Subquery) [CorrelationName]

パラメータ

SELECT文のTableSpec句のDerivedTableには、次のパラメータがあります。

パラメータ
説明
Subquery
副問合せの詳細は、「副問合せ」を参照してください。
CorrelationName
CorrelationNameは、問合せで参照されるあらゆる表名と異なっている必要があります。CorrelationNameはオプションです。

説明

導出表を使用する場合は、次の制限が適用されます。

JoinedTable

SQL構文

JoinedTableには、CROSS JOIN、INNER、LEFTまたはRIGHT OUTER JOINから導出された表を指定します。

JoinedTableの構文は、次のとおりです。

{CrossJoin | QualifiedJoin}

CrossJoinは、次のようになります。

TableSpec1 CROSS JOIN TableSpec2

QualifiedJoinは、次のようになります。

TableSpec1 [JoinType] JOIN TableSpec2 ON SearchCondition

QualifiedJoinパラメータでは、JoinTypeの構文は、次のようになります。

{INNER | LEFT [OUTER] | |RIGHT [OUTER]}

パラメータ

SELECT文のTableSpec句のJoinedTableには、次のパラメータがあります。

パラメータ
説明
CrossJoin
2つの表にCROSS JOINを実行します。戻り値は、入力表のデカルト積となる結果表です。結果は、次の構文を持つ問合せと同じになります。

SELECT Selectlist FROM Table1, Table2

QualifiedJoin
JoinがJoinType型の結合結果になることを指定します。
TableSpec1

JOIN句の最初の表を指定します。

TableSpec2

JOIN句の2番目の表を指定します。

JoinType JOIN
実行する結合の種類を指定します。サポートされている種類は、次のとおりです。
INNER
LEFT [OUTER]
RIGH [OUTER]

INNER JOINは、SearchConditionを満たす2つの表の行を結合した結果表を返します。

LEFT OUTER JOINは、SearchConditionに一致する結合行と、SearchConditionがTRUEに評価されなかった最初の表の行および2番目の表のすべての行を返します。

RIGHT OUTER JOINは、SearchConditionに一致する結合行と、SearchConditionがTRUEに評価されなかった2番目の表の行および最初の表のすべての行を返します。

ON SearchCondition
JOINパラメータで使用する検索基準を指定します。このSearchConditionが参照できるのは、現在条件を満たしているJOIN内で参照されている表のみです。

説明

t LEFT JOIN (t2 INNER JOIN t3 ON x2=x3) ON (x1 = x2 + x3)
例5.152

次の文は表t1およびt2を結合して、t1の行でx1が10未満のものをすべて返します。

SELECT * FROM t1 LEFT JOIN t2 ON x1=x2 WHERE x1<10;

関連項目

CREATE TABLE
INSERT
INSERT SELECT
UPDATE