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 における変数と関数の昇格の詳細な例

推薦する

Vueコンポーネントのカスタムイベントの詳細な説明

目次要約する <テンプレート> <div> 要素 <h2>{{メ...

html 内の絶対パス URL と相対パス URL、サブディレクトリ、親ディレクトリ、ルート ディレクトリ

絶対 URL は、インターネット上の特定のファイルに必要なすべてのコンテンツを表すために使用されます...

htm 初心者ノート(初心者は必ず読んでください)

1. HTMLとは何かHTML (ハイパーテキスト マークアップ言語): ハイパーテキスト マーク...

MySQL ログインおよび終了コマンドの形式

mysql ログインのコマンド形式は次のとおりです。 mysql -h [hostip] -u [ユ...

HTML+CSSは、要素の位置までスクロールして読み込みアニメーション効果を表示します。

要素までスクロールするたびに読み込みアニメーションを追加するにはどうすればよいですか?初期パラメータ...

MySQLがlocalhost経由でデータベースに接続できない問題に対する完璧な解決策

問題:あるサーバー上の PHP プログラムは、localhost アドレス経由でデータベースに接続で...

Linux で Docker を使用して MySQL をインストールする手順

テスターとして、学習プロセス中に Linux でソフトウェアをインストールする必要が頻繁にある場合が...

CentOS 8 に MySql をインストールしてリモート接続を許可する方法

ダウンロードしてインストールします。まず、システムに MySQL または MariaDB があるかど...

1つのコマンドで、シェルの読み取りコマンドの共通パラメータを理解できます。

Shell で受信パラメータを受信する方法は 2 つあることがわかっています。 1 つはスクリプト...

UnityはMySQLに接続し、テーブルデータの実装コードを読み取ります

表は以下のとおりです。 Unity が読み取って呼び出すときのコード: データベース内の別のテーブル...

Zabbix は DingTalk のアラーム機能を画像付きで設定します

実装のアイデア:まず、アラーム情報にはitemidが必要です。これは前提条件です。情報に渡されるパラ...

更新とデータ整合性処理のためのMySQLトランザクション選択の説明

MySQL のトランザクションはデフォルトで自動的にコミットされます (autocommit = 1...

Vueはカードフリップ効果を実現します

この記事では、カードフリップ効果を実現するためのVueの具体的なコードを例として紹介します。具体的な...

MySQL 5.7 における基本的な JSON 操作ガイド

序文プロジェクトのニーズにより、ストレージ フィールドは JSON 形式で保存されます。プロジェクト...