サーチ…
SQLでのクエリ処理の論理的順序
/*(8)*/ SELECT /*9*/ DISTINCT /*11*/ TOP
/*(1)*/ FROM
/*(3)*/ JOIN
/*(2)*/ ON
/*(4)*/ WHERE
/*(5)*/ GROUP BY
/*(6)*/ WITH {CUBE | ROLLUP}
/*(7)*/ HAVING
/*(10)*/ ORDER BY
/*(11)*/ LIMIT
クエリが処理される順序と各セクションの説明。
VTは「仮想テーブル」の略で、クエリの処理時にさまざまなデータがどのように生成されるかを示します
FROM:FROM句の最初の2つのテーブルの間にデカルト積(クロス結合)が実行され、結果として仮想テーブルVT1が生成されます。
ON:オンフィルタがVT1に適用されます。 TRUEの行のみがVT2に挿入されます。
OUTER(結合):OUTER JOINが指定されている場合(CROSS JOINまたはINNER JOINとは対照的に)、一致していないテーブルの行がVT2の行に外部行として追加され、 VT3。 3つ以上のテーブルがFROM句に含まれる場合、すべてのテーブルが処理されるまで、最後の結合の結果とFROM句の次のテーブルの間に、ステップ1〜3が繰り返し適用されます。
WHERE:WHEREフィルタはVT3に適用されます。 TRUEの行のみがVT4に挿入されます。
GROUP BY:VT4からの行は、GROUP BY句で指定された列リストに基づいてグループ化されます。 VT5が生成される。
キューブ| ROLLUP:スーパーグループ(グループのグループ)がVT5から行に追加され、VT6が生成されます。
HAVING:HAVINGフィルタがVT6に適用されます。 TRUEのグループのみがVT7に挿入されます。
SELECT:SELECTリストが処理され、VT8が生成されます。
DISTINCT:重複した行がVT8から削除されます。 VT9が生成されます。
ORDER BY:VT9からの行は、ORDER BY句で指定された列リストに従ってソートされます。カーソルが生成されます(VC10)。
TOP:VC10の先頭から行数を指定します。テーブルVT11が生成され、呼び出し元に返されます。 LIMITは、PostgresやNetezzaなどの一部のSQL言語では、TOPと同じ機能を持ちます。