MySQLクエリ条件におけるonとwhereの配置の違いの分析

MySQLクエリ条件におけるonとwhereの配置の違いの分析

導入

今日SQLを書いているときに、問題が発生しました。要件は、データを照会し、スコアと過去 1 週間の訪問回数の逆順に並べ替えることです。問題は、従来の書き方では、where 句に day >= xxx 条件を入れることです。一部のデータに過去 1 週間の訪問がない場合、このデータは見つかりません。解決策は、条件を LEFT JOIN に入れることです。

MySQL ステートメントの実行順序

まず最初に概念を説明します。MySQL ステートメントが実行される順序は、SQL ステートメントの順序ではありません。サンプルSQLはこちら

選択する
 < 選択リスト >
から
 < 左テーブル > < 結合タイプ >
JOIN < 右テーブル > ON < 結合条件 >
どこ
 < 条件 >
グループ化
 < グループリスト >
持つ
 < 条件がある >
注文する
 < 順序条件 >
LIMIT <制限数>

SQLの実行順序は以下のとおりです。

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

LEFT JOINの役割

結果セットの違いはSQLの優先順位だけでなく、LEFT JOINにも関係しています。

左結合を使用する場合、on の後の条件は右側のテーブルに対してのみ有効です。

  • on は一時テーブルを生成するときに使用する条件です。on 条件が機能するかどうかに関係なく、左側のテーブル (table_name1) の行が返されます。
  • 一時テーブルが生成された後に条件が使用される場所。この時点では、左結合が使用されているかどうかは関係ありません。条件を満たさない行はすべてフィルター処理されます。

上記は、内容をうまくまとめた 2 つの資料からの抜粋です (元のリンクは下にあり、その中に例文があります)。

参考文献:

  • ステップバイステップ: MySQL アーキテクチャの概要 -> クエリ実行プロセス -> SQL 解析順序
  • MySQLの左結合操作におけるon条件とwhere条件の違い
  • SQL でフィルター条件を on と where に配置する場合の違い。

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • MySQLはクエリ条件としてJSONフィールドの内容に基づいてデータを取得します(JSON配列を含む)
  • MySQLクエリ条件のnot inとinの違いと理由
  • Mysqlクエリ条件で文字列の末尾にスペースがあっても一致しない問題の詳細な説明
  • MySQLクエリ条件の一般的な使用法の詳細な説明
  • インデックスは MySQL クエリ条件で使用されますか?
  • MySQLはクエリ条件を最適化する方法を説明しています

<<:  Windows オペレーティング システムでの Linux 仮想マシンのインストールと構成のチュートリアル

>>:  Vue Element-ui テーブルはツリー構造テーブルを実現します

推薦する

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

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

WeChatアプレット認証ログインを処理するエレガントな方法

序文WeChat ミニプログラム プロジェクトでユーザー情報を取得し、ユーザー ログインを実装する場...

MySQL パーティション関数の詳細な説明と例の分析

まず、データベース パーティショニングとは何でしょうか?以前、MySQL のテーブル パーティショニ...

Nginx設定ファイルの詳細な説明

Nginx の主な設定ファイルは nginx.conf で、グローバル ブロック、イベント ブロック...

Navicat 8でMySQL用のデータベースを作成する方法

ウェブサイトを開発する場合、データを保存するためにデータベースを使用する必要があることがよくあります...

HTMLはシンプルで美しいログインページを作成します

まずは見てみましょう。 HTML ソースコード: XML/HTML コードコンテンツをクリップボード...

Dockerコンテナ終了エラーコードの手順

実行後、一部の Docker コンテナが終了することがあります。原因を調べるには、Docker コン...

Ubuntuで余分なカーネルを削除する方法

ステップ1: 現在のカーネルを表示する 読み取る $ uname -a Linux rew 4.15...

Alibaba Cloud Server への Web プロジェクトのデプロイについて (5 つの手順)

1.まずAlibaba Cloudのウェブサイトにログインしてアカウントを登録し、サーバータイプを...

Dockerアーキテクチャ入門

Docker には 3 つの基本概念が含まれています。イメージ: Docker イメージはルート フ...

Nginx ロケーション設定のチュートリアル (ゼロから)

基礎位置の一致順序は、「最初に正規表現に一致し、次に共通表現に一致」です。実際のロケーションの一致順...

ECMAscript の新機能の紹介

目次1. 関数パラメータのデフォルト値1.1 関数パラメータのデフォルト値の指定1.2 分離割り当て...

Vueはファイルのアップロードとダウンロードを実装します

この記事では、参考までにVueのファイルのアップロードとダウンロードの具体的なコードを紹介します。具...

建国記念日が近づいています。JS を使用して、建国記念日風のアバターを生成する小さなツールを実装します。実装プロセスの詳細な説明

目次1. ページレイアウト2. 画像のアップロードと表示3. キャンバスを初期化する4. テンプレー...

CSSスタイルのカスケーディングルールの詳細な説明

CSS スタイル ルール構文スタイルは、CSS の基本単位です。各スタイル ルールは、セレクターと宣...