SQL 解説書

副選択

>>-SELECT 文節-FROM 文節-+------------+------------------------->
                         '-WHERE 文節-'
 
>----+---------------+--+-------------+------------------------><
     '-GROUP BY 文節-'  '-HAVING 文節-'
 

副選択 は、全選択の構成要素の 1 つです。

副選択は、FROM 文節で指定される表、視点、 またはニックネームから派生する結果表を指定します。 この派生の方法は、各操作の結果が次の演算の入力になるような、 一連の操作として記述することができます。 (これは、副選択を記述する 1 つの方法にすぎません。 派生操作を実行するために使用される方式は、この記述とはまったく異なる場合があります。)

副選択の文節は以下の順序で処理されます。

  1. FROM 文節
  2. WHERE 文節
  3. GROUP BY 文節
  4. HAVING 文節
  5. SELECT 文節

SELECT 文節

             .-ALL------.
>>-SELECT----+----------+--------------------------------------->
             '-DISTINCT-'
 
>-----+-*--------------------------------------------------+---><
      |  .-,---------------------------------------------. |
      |  V                                               | |
      '----+-expression--+--------------------------+-+--+-'
           |             | .-AS-.                   | |
           |             '-+----+--new-column-name--' |
           '-exposed-name.*---------------------------'
 

SELECT 文節は、最終結果表の列を指定します。 列値は、選択リスト を R に適用することによって作成されます。 選択リストとは、SELECT 文節に指定された名前または式であり、 R は副選択のうち直前の操作の結果です。 たとえば、指定されている文節が SELECT、FROM、および WHERE だけの場合、 R は WHERE 文節の結果になります。

ALL
最終結果表の行すべてをそのまま保持し、冗長な重複を削除しません。 これはデフォルト値です。

DISTINCT
最終結果表の中に重複行があれば、 その中の 1 つを除き、それ以外のすべてを削除します。 DISTINCT を使用した場合、結果表のストリング列の最大長を 255 バイトより大きくすることはできません。 さらに、列を LONG VARCHAR、LONG VARGRAPHIC、DATALINK、LOB といったタイプにすることはできず、 それらのタイプのいずれかを基にした特殊タイプ、または構造タイプにすることもできません。 DISTINCT は、1 つの副選択で複数回使用することができます。 これには、SELECT DISTINCT、選択リストまたは HAVING 文節の列関数での DISTINCT の使用、 および副選択の副照会が含まれます。

2 つの行が互いに重複していると言えるのは、 最初の行の各値が 2 番目の行の対応する値に等しい場合だけです。 重複を判別する場合、2 つのヌル値は等しいものとみなされます。

選択リストの表記法

*
表 R の列を識別する名前のリストを表します。 リスト内の最初の名前は R の最初の列、2 番目の名前は R の 2 番目の列、 というようになります。

名前のリストは、その SELECT 文節を含むプログラムのバインド時に確立されます。 したがって、* (アスタリスク) では、 表参照を含むステートメントのバインド後に表に追加された列は識別されません。

expression
結果列の値を指定します。 "言語要素" に説明されているタイプの式でもかまいませんが、 通常、使用される式には列名が入っています。 選択リストで使用される各列名は、 R の列をあいまいなところなく識別するものでなければなりません。

new-column-name または AS new-column-name
列名の名前を指定または変更します。 この名前は修飾してはならず、固有である必要もありません。 列名の後の使用方法は、次のように限定されています。
  • AS 文節に指定された新しい列名 (new-column-name) は、 その名前が固有であれば、ORDER BY 文節で使用することができます。
  • 選択リストの AS 文節に指定された新しい列名を、 副選択の他の文節 (WHERE 文節、GROUP BY 文節、または HAVING 文節) で使用することはできません。
  • AS 文節に指定された新しい列名を、UPDATE 文節で使用することはできません。
  • AS 文節に指定された新しい列名は、 ネストした表式、共通表式、および CREATE VIEW の全選択の外部で認識されます。

name.*
結果表の列を指定する名前のリストを表します。 この名前は exposed-name によって示されます。 exposed-name は、表名、視点名、ニックネーム、 または相関名のいずれかにすることができ、FROM 文節で指定された表、視点、 またはニックネームを指定するものでなければなりません。 リスト内の最初の名前は表、視点、あるいはニックネームの最初の列、 2 番目の名前は表、視点、またはニックネームの 2 番目の列を識別する、 というようになります。

名前のリストは、その SELECT 文節を含むステートメントのバインド時に確立されます。 したがって、ステートメントのバインド後に表に追加された列は、 * によって識別されません。

SELECT の結果の列の数は、演算形式の選択リスト (つまり、 ステートメントの準備時に設定されたリスト) の式の数と同じであり、 500 を超えることはできません。

ストリング列に関する制限

選択リストの制限については、可変長文字ストリングの使用制限 を参照してください。

選択リストの適用

選択リストを R に適用した結果は、 GROUP BY または HAVING が使用されているかどうかによって異なる場合があります。 その結果について、次の 2 つのリストで説明します。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]