3.6.2. SELECT コマンド
SELECT コマンドは、任意の数の関係のレコードを取得するために使用されます。
SELECT コマンドには以下の句を含めることができます。
OPTION 句を除き、前述のすべての句は SQL 仕様で定義されます。この仕様は、これらの句が論理的に処理される順序も指定します。処理はステージごとに行われ、各ステージは一連の行を以下のステージに渡します。処理モデルは論理的で、データベースエンジンが処理を実行する方法を示していませんが、SQL の仕組みを理解するのに便利なモデルです。SELECT コマンドは、以下の段階における句を処理します。
- ステージ 1: WITH 句
- 一覧表示されている順序ですべての項目からすべての行を収集します。後続の WITH 項目とメインのクエリーは、テーブルであるかのように WITH 項目を参照できます。
- ステージ 2: FROM 句
- クエリーに関連するすべてのテーブルからすべての行を収集し、それらを Cartesian 製品に論理的に結合し、すべてのテーブルのすべての列が含まれる 1 つの大きなテーブルを生成します。結合条件および結合条件は、結合構造に一致しない行をフィルターするために適用されます。
- ステージ 3: WHERE 句
- FROM ステージのすべての出力行に基準を適用し、行数を減らします。
- ステージ 4: GROUP BY 句
- GROUP BY 列の一致する値を持つ行のセットをグループ化します。
- ステージ 5: HAVING 句
- 行の各グループに基準を適用します。基準は、グループ内の定数値を持つ列にのみ適用できます(グループ化列またはグループ全体に適用される集約関数)。
- ステージ 6: SELECT 句
- クエリーから返される列式を指定します。式は、行のグループに基づいて集約関数を含め、この時点以降は存在しなくなります。出力列は、列のエイリアスまたはエンジンによって決定される暗黙的な名前を使用して名前が付けられます。SELECT DISTINCT が指定されている場合は、SELECT ステージから返される行で重複削除が実行されます。
- ステージ 7: ORDER BY 句
- SELECT ステージから返された行を必要に応じて並べ替えます。指定した順序で複数のコラムのソート(昇順または降順)をサポートします。出力列は SELECT ステージから返される列と同じで、名前は同じになります。
- ステージ 8: LIMIT 句
- 指定された行のみを返します(skip 値および制限値)。
上記のモデルは、SQL の仕組みを理解するのに役立ちます。たとえば、SELECT 句がエイリアスを列に割り当てると、後続の ORDER BY 句がこれらのエイリアスを使用して列を参照する必要があることが理にかなっています。処理モデルに関する知識がないと、混乱を生じさせる可能性があります。モデルを若干見ると、HER ステージは SELECT ステージの後に発生した唯一のステージで、このステージには列の名前が付けられていることが明確になります。WHERE 句は SELECT の前に処理されるため、列には名前が付けられておらず、エイリアスは認識されていません。
明示的な表構文 TABLE x
は SELECT * FROM x
のショートカットとして使用できます。