MySQL ステートメントの実行順序と書き込み順序の例の分析

MySQL ステートメントの実行順序と書き込み順序の例の分析

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

選択 
DISTINCT <選択リスト>
<左テーブル> から
<結合タイプ> JOIN <右テーブル>
ON <結合条件>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
ORDER BY <order_by_condition>
LIMIT <制限数>

実行順序:

from →join →on →where →group by →having →select →order by →limit

(1)各キーワードの役割:

from: どのデータテーブルからデータを取得しますか? 結合がある場合は、FROM 句の最初の 2 つのテーブルに対して直積 (クロス結合) を実行して、一時テーブル (n×m 行) を生成します。

on: 上記の一時テーブルを条件付きでフィルタリングする

左/右 (結合): 左または右のテーブルを補足して、完全な状態に保ちます。関連するテーブルが複数ある場合、中間テーブルは次のテーブルに対して上記の 2 つの手順を続行します。

  • where: テーブル内のデータをフィルタリングするための条件
  • グループ化: 上記のフィルタリングされたデータをグループ化する方法

合計: 集計関数

  • 有: 上記のグループ化されたデータをフィルタリングするための条件
  • 選択: 結果セット内のどの列を表示するか、または列の計算結果を表示する

明確な:

  • order by: 返されたデータを表示する順序
  • limit: 返されるクエリ結果の数を制限する

(2)onとwhereの違い:

  • a.on 以降のスクリーニング条件は、主に関連テーブルに対するものであり、メインテーブルのスクリーニング条件には適用されません。
  • b. 接続が完了した後にフィルタリングする場合は、where の後に条件を置く必要があります。関連テーブルを別の方法で処理する必要があります。条件付きクエリの後に接続する場合は、クエリを on の後に置く必要があります。
  • c. メイン テーブルのフィルター条件は、on の後ではなく where の後に配置する必要があります。

(3)havingとwhereの違い:

  • a.having は、グループ化された結果をフィルタリングするために、group by の後にのみ使用できます (つまり、having を使用するための前提条件はグループ化です)。
  • b.where は group by の前、つまり having の前に来なければなりません。
  • where の後の条件式では集計関数は使用できませんが、having は使用できます。

(4)countの使用

count(列名) を使用し、列に null 値がある場合、count(*) は計算されますが、count(列名) は計算されません。

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

以下もご興味があるかもしれません:
  • T-SQLクエリステートメントの実行順序の分析
  • SQL ステートメント実行の詳細な説明 (MySQL アーキテクチャの概要 -> クエリ実行プロセス -> SQL 解析順序)
  • DjangoはネイティブのMySQLステートメントを実行してプロセス分析を実装します
  • SQL文の解析と実行のプロセスと原理

<<:  Linux で環境変数 JAVA_HOME を変更/設定する方法について簡単に説明します。

>>:  クラウド決済を実装するWeChatミニプログラムについて

推薦する

フォアマン Ubuntu16 クイックインストール

クイックスタートガイドForeman インストーラーは、完全に機能する Foreman セットアップ...

Navicat for MySQL チュートリアル

まず、Navicat for MySQL をダウンロードしてインストールする必要があります。正規版の...

MySQL 5.7 JSON 型の使用の詳細

JSON は、言語に依存しないテキスト形式を使用する軽量のデータ交換形式で、XML に似ていますが、...

Vue イメージ ドラッグ アンド ドロップ ズーム コンポーネントの使用方法の詳細な説明

Vueイメージドラッグアンドドロップズームコンポーネントの具体的な使い方は参考までに。具体的な内容は...

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

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

PSSHを使用してLinuxサーバーを一括管理する

pssh は、多数のマシンでのバッチ ssh 操作に使用される、Python で実装されたオープン ...

超シンプルな QPS 統計手法 (推奨)

過去 N 秒間の QPS 値の統計 (1 秒あたりの選択、挿入などを含む) mysql> se...

httpsウェブサイトにリファラーhttpsとhttpジャンプリファラーを送信させる方法

この記事では、HTTP プロトコルのリファラーのメタデータ パラメータの提案について説明します。この...

MySQL データのバックアップと復元のサンプル コード

1. データのバックアップ1. mysqldumpコマンドを使用してバックアップするmysqldum...

Vue のドロップダウン ボックスのセカンダリ リンク効果を実装するためのサンプル コード

1. 成果を達成する 2. バックエンドから返されるデータ形式 「リスト」: [ { "i...

MySQLスケーラブル設計の基本原則

目次序文1. スケーラビリティとは何ですか?スケールアウトの利点:スケールアウトのデメリット:スケー...

Linux でローカル コンピューターとリモート サーバーのポートが接続されているかどうかを確認する方法

以下のように表示されます。 1. ssh -v -p [ポート番号] [ユーザー名]@[IPアドレス...

Vueのデータ応答性原則の詳細な説明

この記事は主に、Vue のレスポンシブ ソース コードを理解していない、または触れたことがない人向け...

SQL ROW_NUMBER() および OVER() メソッドのケーススタディ

構文フォーマット: row_number() over(partition by grouping ...

FileZilla を使用して FTP ファイル サービスを素早く構築する方法

ファイルの保存とアクセスを容易にするために、FTPサービスが特別に構築されています。 FTP サーバ...