サーチ…


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は「仮想テーブル」の略で、クエリの処理時にさまざまなデータがどのように生成されるかを示します

  1. FROM:FROM句の最初の2つのテーブルの間にデカルト積(クロス結合)が実行され、結果として仮想テーブルVT1が生成されます。

  2. ON:オンフィルタがVT1に適用されます。 TRUEの行のみがVT2に挿入されます。

  3. OUTER(結合):OUTER JOINが指定されている場合(CROSS JOINまたはINNER JOINとは対照的に)、一致していないテーブルの行がVT2の行に外部行として追加され、 VT3。 3つ以上のテーブルがFROM句に含まれる場合、すべてのテーブルが処理されるまで、最後の結合の結果とFROM句の次のテーブルの間に、ステップ1〜3が繰り返し適用されます。

  4. WHERE:WHEREフィルタはVT3に適用されます。 TRUEの行のみがVT4に挿入されます。

  5. GROUP BY:VT4からの行は、GROUP BY句で指定された列リストに基づいてグループ化されます。 VT5が生成される。

  6. キューブ| ROLLUP:スーパーグループ(グループのグループ)がVT5から行に追加され、VT6が生成されます。

  7. HAVING:HAVINGフィルタがVT6に適用されます。 TRUEのグループのみがVT7に挿入されます。

  8. SELECT:SELECTリストが処理され、VT8が生成されます。

  9. DISTINCT:重複した行がVT8から削除されます。 VT9が生成されます。

  10. ORDER BY:VT9からの行は、ORDER BY句で指定された列リストに従ってソートされます。カーソルが生成されます(VC10)。

  11. TOP:VC10の先頭から行数を指定します。テーブルVT11が生成され、呼び出し元に返されます。 LIMITは、PostgresやNetezzaなどの一部のSQL言語では、TOPと同じ機能を持ちます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow