SELECT selection table-expression |
select-expression
では、結果テーブルを指定します。これは、以下の Natural SQL ステートメントで使用します。INSERT
| SELECT
| UPDATE
このドキュメントでは、次のトピックについて説明します。
selection
は、選択する結果セットテーブルの列を指定します。
構文要素の説明:
構文要素 | 説明 |
---|---|
ALL|DISTINCT |
重複行の削除:
|
scalar-expression |
スカラ式:
単純な列名の代わりに、または列名とともに、スカラ演算子および計算値を与えるスカラ関数を含む一般的なスカラ式を含めることもできます(「スカラ式」も参照)。 例: SELECT NAME, 65 - AGE FROM SQL-PERSONNEL ... |
AS |
オプションキーワード AS は、列に correlation-name を導入します。
|
correlation-name |
相関名:
結果の列に対するエイリアス名として、
|
* |
アスタリスク表記:
結果テーブルのすべての列が選択されます。 例: SELECT * FROM SQL-PERSONNEL, SQL-AUTOMOBILES ... |
from-clause [where-clause] |
[group-by-clause] [having-clause] |
[order-by-clause] [fetch-first-clause] |
table-expression
では、どこから、どのような条件に従って行を選択するかを指定します。
以下では次のトピックについて説明します。
FROM table-reference,…
|
この節では、結果セットを作成するテーブルを指定します。
table-name [[ |
FROM
節に指定したテーブルには、選択リストに使用した列が含まれている必要があります。
単一テーブルを指定するか、サブクエリまたは "ジョイン" 処理(下記参照)による中間テーブルを生成できます。
さまざまなテーブル(つまり、DDM)を 1 つの FROM
節にアドレス指定できるだけでなく、subqueries
を指定した場合は table-expression
に複数の FROM
節を含めることができるため、関連する基準データベースの識別には、式全体の最初の FROM
節に指定した最初の DDM のデータベース ID(DBID)が使用されます。
table-name
にはオプションで correlation-clause
を割り当てることができます。subquery
の場合は、correlation-clause
を割り当てる必要があります。
table-reference |
|
JOIN table-referenceON join-condition |
||||||
(joined-table) |
joined-table
では、"ジョイン" 処理による中間テーブルを指定します。
"ジョイン"は、INNER
、LEFT
OUTER
、RIGHT OUTER
または FULL OUTER
JOIN
のいずれかです。何も指定しないと、INNER
が有効になります。
複数の "ジョイン" 処理をネストできます。つまり、中間結果テーブルを作成するテーブル自体を "ジョイン" 処理または subquery
の中間結果テーブルにすることができます。次に後者に joined-table
を含めたり、その FROM
節に他の subquery
を指定したりすることもできます。
INNER
、LEFT OUTER
、および RIGHT
OUTER
ジョインの場合:
search-condition |
FULL OUTER
ジョインの場合:
full-join-expression =
full-join-expression [AND ]
|
column-name | |||||
|
(column-name, )
|
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 ...
詳細については、「検索条件」を参照してください。
[GROUP BY column-reference,]
|
GROUP BY
節では、FROM
節に指定されたテーブルをグループに再配列します。これで、各グループ内のすべての行は GROUP BY
列に対して同じ値を持ちます。
選択リストの各 column-reference
は、GROUP BY
列にするか、または 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
節のスカラ式は、グループごとに単一の値にする必要があります。
詳細については、「スカラ式」および「検索条件」を参照してください。
例:
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 ...
ORDER BY |
sort-key |
|
, | ||||
INPUT
SEQUENCE |
|||||||
ORDER
OF table-designator |
column-name | ||
integer | ||
sort-key-expression |
FETCH FIRST |
1 integer |
ROWS ROW |
ONLY |
例 1
DEFINE DATA LOCAL 01 #NAME (A20) 01 #FIRSTNAME (A15) 01 #AGE (I2) ... END-DEFINE ... SELECT NAME, FIRSTNAME, AGE INTO #NAME, #FIRSTNAME, #AGE FROM SQL-PERSONNEL WHERE NAME IS NOT NULL AND AGE > 20 ... DISPLAY #NAME #FIRSTNAME #AGE END-SELECT ... END
例 2:
DEFINE DATA LOCAL 01 #COUNT (I4) ... END-DEFINE ... SELECT SINGLE COUNT(*) INTO #COUNT FROM SQL-PERSONNEL ...