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ミニプログラムについて

推薦する

単一のdivの正多角形変換を実現する純粋なCSS

前回の記事では、beforeとafterの擬似要素を使用してMaterial Designスタイルの...

Dockerを使用してコンテナリソースを制限する方法

覗き見の問題サーバーでは、IIS サービスが複数のサイトを展開していると仮定すると、サイトの 1 つ...

ES6実装クラスのプライベート変数の書き方をいくつか詳しく説明します

プライベート変数のクロージャ実装プライベート変数は共有されないnew キーワードにより、 perso...

JavaScript でフォロー広告を実装するためのサンプルコード

フローティング広告は、ウェブサイト上で非常に一般的な広告形式です。フローティング広告は、ユーザーの閲...

Vueコンポーネントの7つの通信方法についての深い理解

目次1. props/$emit導入コードサンプル2.Vスロット導入コードサンプル3.$refs/ ...

mysql8.0 パスワードを忘れた場合の修正とネットコマンドのサービス名が無効になる問題

cmdにnet start mysqlと入力すると、プロンプトが表示されます: サービス名が無効です...

JavaScript における Arguments オブジェクトの使用に関する詳細な説明

目次序文議論の基本概念議論の役割実パラメータと仮パラメータの数を取得する実際のパラメータ値を変更する...

MySQL サービスに iptables ファイアウォール ポリシーを追加するためのソリューション

MySQL データベースが Centos7 システムにインストールされており、オペレーティング シス...

Linux での透過的巨大ページの使用と無効化の概要

導入コンピューティングのニーズが拡大し続けるにつれて、アプリケーションのメモリに対する需要も増加して...

Docker メモリ監視とストレステストの方法

起動していたDockerコンテナはメモリを使い果たした状態になっており、再起動せずにコンテナのメモリ...

MySQL 5.7.17 圧縮パッケージのインストールと設定方法のグラフィックチュートリアル

インターネット上にはMySQL 5.7.17のインストールチュートリアルがほとんどなく不十分なので、...

MySQL インデックスの正しい使い方とインデックスの原理の詳細な説明

1. はじめになぜインデックスが必要なのでしょうか?一般的なアプリケーション システムでは、読み取り...

CentOS システムの rpm インストールと Nginx の設定

目次CentOS rpm のインストールと Nginx の設定導入rpm パッケージのインストールサ...

Nginx proxy_redirect の使用方法の詳細な説明

今日、Apache の nginx リバース プロキシを実行していたときに、ちょっとした問題に遭遇し...