バージョン 4.2.5
 —  ステートメント  —

選択式

SELECT selection table-expression

select-expression では、結果テーブルを指定します。 次のステートメントで使用されます。INSERT | SELECT

このドキュメントでは、次のトピックについて説明します。


選択

ALL

{scalar-expression [[AS] correlation-name]},

DISTINCT *

selection では、選択する項目を指定します。

ALL/DISTINCT

select-expression の結果から重複行が自動的に取り除かれることはありません。 取り除く処理を要求するには、キーワード DISTINCT を指定します。

DISTINCT に代わるのが ALL です。 指定がない場合は ALL とみなされます。

スカラー式

単純な列名の代わりに、または列名とともに、スカラー演算子および計算値を与えるスカラー関数を含む一般的な scalar-expressions を含めることもできます(「スカラー式」も参照)。

例:

SELECT NAME, 65 - AGE 
  FROM SQL-PERSONNEL 
  ...

相関名

結果の列に対するエイリアス名として、scalar-expressioncorrelation-name を割り当てることができます。

correlation-name は一意にする必要はありません。 結果の列に correlation-name を指定しない場合、対応する column-name が使用されます(結果の列が列名から派生する場合。派生しない場合は結果テーブルは名前を持ちません)。 結果の列の名前は、SELECT ステートメントの ORDER BY 節の列名などに使用できます。

アスタリスク表記 - *

FROM 節に指定された全テーブルのすべての列が選択されます。

例:

SELECT * 
  FROM SQL-PERSONNEL, SQL-AUTOMOBILES 
  ...

Top of page

テーブル式

FROM table-reference,
  [WHERE search-condition]
  [GROUP BY column-reference,]
  [HAVING search-condition]

table-expression では、どこから、どのような条件に従って行を選択するかを指定します。

FROM 節

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 JOINtable-referenceONjoin-condition

LEFT

RIGHT
FULL

joined-table では、"ジョイン" 処理による中間テーブルを指定します。

"ジョイン" には、INNERLEFT OUTERRIGHT OUTER、または FULL OUTER JOIN を使用できます。 何も指定しないと、INNER が有効になります。

複数の "ジョイン" 処理をネストできます。つまり、中間結果テーブルを作成するテーブル自体を JOIN(ジョイン)処理または subquery の中間結果テーブルにすることができます。次に後者に joined-table を含めたり、その FROM 節に他の subquery を指定したりすることもできます。

ジョイン条件

INNERLEFT 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 節

[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 節

[GROUP BYcolumn-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 節

[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 
  ...

Top of page