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 OUTERJOIN のいずれかです。何も指定しないと、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 |
|
1integer |
|
|
ROWSROW |
|
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 ...