SELECT selection table-expression |
select-expression では、結果テーブルを指定します。 次のステートメントで使用されます。INSERT | SELECT
このドキュメントでは、次のトピックについて説明します。
ALL |
{scalar-expression [[AS ] correlation-name]},
|
||||
DISTINCT |
* |
selection では、選択する項目を指定します。
select-expression の結果から重複行が自動的に取り除かれることはありません。 取り除く処理を要求するには、キーワード DISTINCT
を指定します。
DISTINCT
に代わるのが ALL
です。 指定がない場合は ALL
とみなされます。
単純な列名の代わりに、または列名とともに、スカラー演算子および計算値を与えるスカラー関数を含む一般的な scalar-expressions を含めることもできます(「スカラー式」も参照)。
例:
SELECT NAME, 65 - AGE FROM SQL-PERSONNEL ...
結果の列に対するエイリアス名として、scalar-expression に correlation-name を割り当てることができます。
correlation-name は一意にする必要はありません。 結果の列に correlation-name を指定しない場合、対応する column-name が使用されます(結果の列が列名から派生する場合。派生しない場合は結果テーブルは名前を持ちません)。 結果の列の名前は、SELECT
ステートメントの ORDER BY
節の列名などに使用できます。
FROM
節に指定された全テーブルのすべての列が選択されます。
例:
SELECT * FROM SQL-PERSONNEL, SQL-AUTOMOBILES ...
FROM table-reference, |
|
[WHERE search-condition]
|
|
[GROUP BY column-reference, ]
|
|
[HAVING search-condition]
|
table-expression では、どこから、どのような条件に従って行を選択するかを指定します。
FROM table-reference, |
table-name [correlation-clause] | ||
[TABLE ] subquery correlation-clause
|
||
joined-table | ||
TABLE function-name (scalar-expression,...) correlation-clause
|
FROM
節に指定したテーブルには、選択リストに使用した列が含まれている必要があります。
単一テーブルを指定するか、サブクエリまたは "ジョイン" 処理(下記参照)による中間テーブルを生成できます。
さまざまなテーブル(つまり、DDM)を 1 つの FROM
節にアドレス指定できるだけでなく、subqueries を指定した場合は table-expression に複数の FROM
節を含めることができるため、関連する基準データベースの識別には、式全体の最初の FROM
節に指定した最初の DDM のデータベース ID(DBID)が使用されます。
TABLE function-name
節は SQL 拡張セットに属し、column-name リストを含む correlation-clause が必要になります。
table-name にはオプションで correlation-clause を割り当てることができます。 subquery の場合は、correlation-clause を割り当てる必要があります。
[AS ] correlation-name [(column-name,...)]
|
correlation-clause は、キーワード AS
(オプション)と correlation-name で構成され、オプションで column-name リストが続きます。 column-name リストは SQL 拡張セットに属します。
table-reference | INNER |
OUTER JOIN table-referenceON join-condition |
||||||
LEFT |
||||||||
RIGHT |
||||||||
FULL |
joined-table では、"ジョイン" 処理による中間テーブルを指定します。
"ジョイン" には、INNER
、LEFT OUTER
、RIGHT OUTER
、または FULL OUTER
JOIN
を使用できます。 何も指定しないと、INNER
が有効になります。
複数の "ジョイン" 処理をネストできます。つまり、中間結果テーブルを作成するテーブル自体を JOIN
(ジョイン)処理または subquery の中間結果テーブルにすることができます。次に後者に joined-table を含めたり、その FROM
節に他の subquery を指定したりすることもできます。
INNER
、LEFT OUTER
、および RIGHT OUTER
ジョインの場合:
search-condition |
FULL OUTER
ジョインの場合:
full-join-expression = full-join-expression [AND ]
|
column-name | |||||
VALUE |
(column-name , )
|
||||
COALESCE |
join-expression 内には、column-names および scalar-function VALUE
(または同義語 COALESCE
)のみを使用できます。 詳細については、column-name を参照してください。
[WHERE search-condition] |
WHERE
節を使用して行に対する選択条件(search-condition)を指定します。
例:
DEFINE DATA LOCAL 01 NAME (A20) 01 AGE (I2) END-DEFINE ... SELECT * INTO NAME, AGE FROM SQL-PERSONNEL WHERE AGE = 32 END-SELECT ...
詳細については、search-condition を参照してください。
[GROUP BY column-reference, ]
|
GROUP BY
節では、FROM
節に指定されたテーブルをグループに再配列します。これで、各グループ内のすべての行は GROUP BY
列に対して同じ値を持ちます。
選択リストの各 column-reference は、GROUP BY
列にするか、または aggregate-function 内に指定する必要があります。 集積関数は個々のグループ(テーブル全体ではない)に適用されます。 結果テーブルにはグループと同じ数の行が含まれます。
詳細については、column-reference および aggregate-function を参照してください。
例:
DEFINE DATA LOCAL 1 #AGE (I2) 1 #NUMBER (I2) END-DEFINE ... SELECT AGE , COUNT(*) INTO #AGE, #NUMBER FROM SQL-PERSONNEL GROUP BY AGE ...
GROUP BY
節の前に WHERE
節を指定した場合、グループ化が行われる前に WHERE
節を満たさないすべての行が削除されます。
[HAVING search-condition] |
HAVING
節を指定する場合、GROUP BY
節も指定する必要があります。
WHERE
節を使用して結果テーブルから行を削除する場合のように、HAVING
節では search-condition を基準にしてグループを削除します。HAVING
節の Scalar-expressions はグループごとに単一の値にする必要があります。
詳細については、scalar-expression および search-condition を参照してください。
例:
DEFINE DATA LOCAL 1 #NAME (A20) 1 #AVGAGE (I2) 1 #NUMBER (I2) END-DEFINE ... SELECT NAME, AVG(AGE), COUNT(*) INTO #NAME, #AVGAGE, #NUMBER FROM SQL-PERSONNEL GROUP BY NAME HAVING COUNT(*) > 1 ...