MySQL SELECT実行順序の簡単な理解

MySQL SELECT実行順序の簡単な理解

SELECT ステートメントの完全な構文は次のとおりです。

(7)選択 
(8) DISTINCT <選択リスト>
(1)<left_table>から
(3)<結合タイプ> JOIN <右テーブル>
(2)ON <結合条件>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) HAVING <having_condition>
(9) ORDER BY <order_by_condition>
(10) LIMIT <制限数>

注: 構文の前のシーケンス番号はSELECTの実行順序です

MySQL の SELECT 実行順序は 10 のステップに分かれています。上記のように、最初に実行される操作は FROM 操作であり、最後に実行される操作は LIMIT 操作です。各操作では、処理の入力として使用される仮想テーブルが生成されます。これらの仮想テーブルはユーザーに対して透過的ですが、結果として返されるのは最後の仮想テーブルのみです。ステートメントに句が指定されていない場合、対応するステップはスキップされます。

クエリ処理の各段階を詳しく見てみましょう。

a.customer_id、COUNT(b.order_id) を total_orders として選択します。
 テーブル1から
 LEFT JOIN テーブル2 AS b
 a.customer_id = b.customer_id の場合
 ここで、a.city = 'hangzhou'
 GROUP BY a.customer_id
 count(b.order_id) < 2 である
 ORDER BY total_orders DESC;

1. FORM: FROM の左側のテーブルと右側のテーブルの直積を計算して、仮想テーブル VT1 を生成します。

2. ON: 仮想テーブル VT1 に対して ON フィルタリングを実行し、<join-condition> を満たす行のみが仮想テーブル VT2 に記録されます。

3. JOIN: OUTER JOIN(左結合、右結合など)が指定されている場合、保持テーブル内の一致しない行が外部行として仮想テーブル VT2 に追加され、仮想テーブル VT3 が生成されます。

4. WHERE: WHERE 条件に基づいて仮想テーブル VT3 をフィルタリングします。 <where-condition> を満たすレコードのみが仮想テーブル VT4 に挿入されます。

5. GROUP BY: group by 句の列に従って VT4 のレコードをグループ化し、VT5 を生成します。

6. HAVING: 仮想テーブル VT5 に HAVING フィルタリングを適用し、<having-condition> を満たすレコードのみが仮想テーブル VT6 に挿入されます。

7. SELECT: 選択操作を実行し、指定された列を選択して仮想テーブル VT7 に挿入します。

8. DISTINCT: VT7 内の重複レコードを削除します。仮想テーブル VT8 を生成します。

9. ORDER BY: 仮想テーブル VT8 内のレコードを <order_by_list> に従って並べ替えて、仮想テーブル VT9 を生成します。

10. LIMIT: 指定された行のレコードを取り出し、仮想テーブル VT10 を生成し、結果を返します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL 選択最適化ソリューションに関する簡単な説明
  • MySQL で結果を選択して更新を実行する例のチュートリアル
  • MySQLの読み書き分離により挿入後にデータが選択されなくなる問題を解決
  • MySQL SELECT文の実行方法
  • サブクエリ最適化における MySQL 選択の実装
  • MySQL 学習ノート: 完全な SELECT ステートメントの使用例と詳細な説明
  • MySQL の選択、挿入、更新バッチ操作ステートメントのコード例
  • 更新とデータ整合性処理のためのMySQLトランザクション選択の説明
  • MySQL における単一テーブルと複数テーブル、およびビューと一時テーブルに対する Update と Select の違い
  • MySQL セレクトキャッシュメカニズムの使用に関する詳細な説明
  • MySql データベースでの Select の使用法の概要
  • MySQLでSELECT文が実行される仕組み

<<:  Linux コマンドにおける Ctrl+z、Ctrl+c、Ctrl+d の違いと使い方

>>:  JavaScript における変数と関数の昇格の詳細な例

推薦する

MySQLストアドプロシージャを変更する詳細な手順

序文実際の開発では、ビジネス要件が変更されることが多いため、ストアド プロシージャの特性を変更するこ...

MySQL の日付と時刻の加算と減算のサンプル コード

目次1.MySQLは時間間隔を加算または減算します2. 日付を減算する最近、MySQL を見直してい...

Vue3 + TypeScript 開発の概要

目次Vue3 + TypeScript 学習1. 環境設定1.1 最新のVue scaffoldin...

MySQL 5.7.17 のインストールと設定方法のグラフィックチュートリアル (Win7 の場合)

Windows 7 で MySQL 5.7.17 をインストールする方法についてのグラフィック チ...

JavaScript における変数と関数の昇格の詳細な例

js 実行字句解析フェーズ: 形式パラメータ解析、変数宣言解析、関数宣言解析の 3 つの部分が含まれ...

forループ内のvarの問題の解決

序文var は ES5 における変数宣言方法です。var で変数を宣言するとループ変数がグローバル変...

JavaScript 配列のマージのケーススタディ

方法1: var a = [1,2,3]; var b = [4,5] b を連結します。 コンソー...

純粋な CSS でフォ​​ーム検証を実装するためのサンプル コード

日常業務において、フォームの検証は非常に一般的な設計要件です。ログイン ボックスや登録ボックス、アン...

MySQL で 1000 万件のレコードをすばやくクエリする方法

目次通常のページングクエリ最適化する方法大きなオフセット使用ID制限大量データ問題の最適化通常のペー...

Vueのref属性の詳細な説明

要約するこの記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS....

JS での new の手書き実装

目次1 新しいオペレータの紹介2 新しいものは何をしましたか? 3 新しい演算子の実装をシミュレート...

Mysql の一般的なベンチマーク コマンドの概要

mysqlslap共通パラメータの説明–auto-generate-sql システムはテスト用のSQ...

MySQLにおける時刻日付型と文字列型の選択について

目次1. DATETIMEとTIMESTAMPの使用1. 類似点2. 相違点3. 選択2. varc...

mysql 8.0.12 winx64 のダウンロードとインストールのチュートリアル

MySQL 8.0.12のダウンロードとインストールのチュートリアルは参考までに、具体的な内容は次の...

AngularでTweenMaxアニメーションライブラリを使用する際の問題と解決策

最近何もすることがないのでCSSをいじっていますより良いアニメーションライブラリTweenMaxを見...