MySQL-sqlの論理クエリー処理

2454 ワード

SQL言語は他のプログラミング言語とは異なり、最も明らかな違いはコードを処理する順序に現れている.ほとんどのプログラミング言語では、コードは符号化によって処理されます.しかし、SQL言語では、最初に処理されるのはいつもFROM句です.次の表に、論理処理の順序と手順のシーケンス番号を示します.
論理クエリー処理のステップ連番
(8)SELECT (9)DISTINCT 
(1)FROM 
(3) JOIN 
(2)ON 
(4)WHERE 
(5)GROUP BY
(6)WITH(CUBE|ROLLUP)
(7)HAVING
(10)ORDER BY
(11)LIMIT

全11のステップが見られ,最初にFROM操作,最後にLIMIT操作が実行された.各操作によって、処理の入力として使用される仮想テーブルが生成されます.これらの仮想テーブルはユーザーに対して透過的であり、最後のステップで生成された仮想テーブルのみがユーザーに返されます.クエリーで自居を指定しない場合は、対応する手順はスキップされます.クエリー処理の各フェーズの説明は次のとおりです.
  • FROM:FROM句の中で左表と右表にデカルト積を行い、仮想表VT 1を生成する.
  • ON:仮想テーブルVT 1にON削除を適用し、該当する行だけが仮想テーブルVT 2に挿入される.
  • JOIN:OUTER JOIN(LEFT OUTER JOIN、RIGHT OUTER JOIN)が指定されている場合、表6の一致しない行が外部行として仮想表VT 2に追加され、仮想表VT 3が生成される.FROM句が2つ以上のテーブルを含む場合、前の接続で生成された結果テーブルVT 3と次のテーブルについて、すべてのテーブル位置が処理されるまで、ステップ1>~ステップ3>を繰り返し実行する.
  • WHERE:仮想テーブルVT 3にWHEREフィルタ条件を適用し、該当するレコードのみが仮想テーブルVT 4に挿入される.
  • GROUP BY:GROUP BY句中の列からVT 4中のレコードをグループ化してVT 5を生成する.
  • CUBE|ROLLUP:表VT 5に対してCUBEまたはROLLUP操作を行い、表VT 6を生成する.
  • HAVING:仮想テーブルVT 6にHAVINGフィルタを適用し、該当するレコードのみが仮想テーブルVT 7に挿入される.
  • SELECT:2回目のSELECT操作を行い、作成した列を指定し、大きな仮想テーブルVT 8に挿入します.
  • DISTINCT:重複データを取り出し、仮想テーブルVT 9を生成する.
  • ORDER BY:仮想テーブルVT 9のレコードをソート操作に従って仮想テーブルVT 10を生成します.
  • LIMIT:指定された行のレコードを取り出し、仮想テーブルVT 11を生成し、クエリー・ユーザーに返す.『MySQL技術内幕:SQLプログラミング』セクションから抜粋します.