MySQLステートメントの記述と実行順序を理解するだけです

MySQLステートメントの記述と実行順序を理解するだけです

MySQL ステートメントの書き込み順序と実行順序には大きな違いがあります。

書き順、mysql の一般的な書き順は次のとおりです。

選択
<返されるデータ列>
から
<テーブル名>
<結合、左結合、右結合...> 結合
<テーブルを結合>
の上
<結合条件>
どこ
<where条件>
グループ化
<グループ化条件>
持つ
<グループ化後のフィルター条件>
並び替え
<並べ替え条件>
制限
<行数制限>

ただし、実行順序は次のとおりです。

から
<テーブル名> # 直積
の上
<フィルタリング条件> #直積の仮想テーブルをフィルタリングする
<結合、左結合、右結合...> 結合
<join table> # 仮想テーブルにデータを追加するために使用する結合を指定します。たとえば、left join は、left テーブルの残りのデータを仮想テーブルに追加します。
どこ
<where condition> #上記の仮想テーブルをフィルタリングする
グループ化
<グループ化条件> #Group
<sum() およびその他の集計関数> #判断の際、having 節で使用されます。文章では、このタイプの集計関数は、having 判断で記述されます。
持つ
<グループ化フィルター> # グループ化された結果を集計してフィルター処理する
選択
<戻りデータリスト> #集計関数を除き、返される単一の列はgroup by句に含まれている必要があります
明確な
並び替え
<ソート条件> #ソート
制限
<行数制限>

部分的な説明:

1. from: select * from table_1, table_2; 結果は select * from table_1 join table_2; と同じになります。どちらもデカルト積を求めるために使用されます。

これは、2 つのテーブルの直積を直接計算して、仮想テーブル VT1 を取得するために使用されます。これは、すべての SELECT ステートメントによって実行される最初の操作です。その他の操作はこのテーブルに対して実行され、これが from 操作によって完了します。

2. オン: VT1 テーブルから適格なデータをフィルタリングして VT2 テーブルを形成します。

3. 結合: この結合タイプのデータを VT2 テーブルに追加します。たとえば、左結合では、左テーブルの残りのデータが仮想テーブル VT2 に追加され、VT3 テーブルが形成されます。テーブルの数が 2 より大きい場合は、手順 1 ~ 3 が繰り返されます。

4. ここで、フィルターを実行して(集計関数は使用できません)、VT4 テーブルを取得します。

5. group by: VT4 テーブルをグループ化して VT5 テーブルを取得します。select や having などの後続の処理ステートメントで使用される列は、group by 条件に含める必要があります。含まれていない場合は、集計関数を使用する必要があります。

6. グループ化されたデータをフィルタリングして VT6 テーブルを取得します。

7. select: VT7 テーブルを取得するための列を返します。

8. distinctive: 重複を削除して VT8 テーブルを取得するために使用されます。

9. order by: VT9 テーブルをソートして取得するために使用されます。

10. limit: 必要な行数を返し、VT10 を取得します。

知らせ:

グループ化条件では、各列は有効な列である必要があり、集計関数にすることはできません。

Null値もグループとして返​​されます。

集計関数を除き、SELECT 句内の列は、GROUP BY 条件に含まれている必要があります。

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

以下もご興味があるかもしれません:
  • SQL と MySQL のステートメント実行順序の分析
  • SQL文の実行順序の図による説明
  • SQL ステートメント実行の詳細な説明 (MySQL アーキテクチャの概要 -> クエリ実行プロセス -> SQL 解析順序)
  • SQLクエリの実行順序をゼロから学ぶ
  • Mysql系SQLクエリ文の書き順と実行順を詳しく解説

<<:  Baota Linux パネル コマンド リスト

>>:  JavaScript によるデータ視覚化: ECharts マップの作成

推薦する

LinuxのCPU負荷とCPU使用率の詳細な説明

CPU 負荷と CPU 使用率これらは両方とも、ある程度、マシンの忙しさを反映できます。 CPU 使...

全画面ページのスクロール効果を実現するJavaScript

JavaScript DOM を読み終えた後、解釈型 JavaScript スクリプト言語に対する...

Dockerコンテナとホストマシン間の8時間の差の問題を解決する

デプロイに docker-compose を使用すると、出力ログと関連イベントが検証されて出力される...

カルーセル効果を書くためのjs

この記事では、カルーセルマップの効果を実現するためのjsの具体的なコードを参考までに共有します。具体...

JS は複数のタブを切り替えるカルーセルを実装します

カルーセルアニメーションは、ページの外観とインタラクティブなパフォーマンスを向上させることができます...

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

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

HTML 背景画像と背景色_PowerNode Java アカデミー

1. HTML 画像 <img> 1. <img> タグとその src 属性...

ブラウザでビデオプレーヤーを実装するための基本的な考え方とコード

目次序文ブラウザにおけるオーディオとビデオに関する知識のまとめビデオエンコーディング包装形態オーディ...

ins タグと del タグの属性と使用法

insとdel は、HTML 4.0 で導入され、文書の作成時に作成者が共同作業できるようにし、また...

UbuntuにProtobuf 3をインストールするための詳細なチュートリアル

いつインストールするかprotoc コマンドを使用しても Protoc が見つからない場合は、インス...

React 手書きタブ切り替え問題

親ファイル React をインポートし、{useState} を 'react' か...

Reactを使用する際の7つの落とし穴のまとめ

目次1. コンポーネントの肥大化2. 状態を直接変更する3. プロパティは数値を渡す必要があるが文字...

HTML リンク アンカー タグと SEO におけるその役割の概要

<a> タグは主に、ハイパーリンクまたはアンカー リンクとも呼ばれるリンクとブックマーク...

MySQL外部キーの3つの関係例の詳細な説明

この記事では、例を使用して、MySQL 外部キーの 3 つの関係について説明します。ご参考までに、詳...

CSS3で実装された6つの境界遷移効果

6つの効果実装コードhtml <h1>CSS 境界遷移</h1> <セ...