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 5.7.19 無料インストール版 (64 ビット) の設定方法に関する詳細なチュートリアル

公式サイトから mysql-5.7.19-winx64 をダウンロードします。これはシステムの 64...

LinuxにMySQLをインストールし、外部ネットワークアクセスを構成する例

設定手順1. DNSが設定されているかどうかを確認するDNSが設定されていない場合は、前の記事を参照...

計算機機能を実現するjsバージョン

この記事の例では、計算機機能を実装するためのjsの具体的なコードを参考までに共有しています。具体的な...

vue3 学習ノートにおける axios の使用の変更の概要

目次1. axioの基本的な使い方2. クロスドメインの問題を解決するには? 3. パッケージ4. ...

モバイル署名機能を実装するJavaScript

この記事では、モバイル署名機能を実装するためのJavaScriptの具体的なコードを参考までに共有し...

HTML の入力の readonly 属性と disabled 属性の違いについて簡単に説明します。

「読み取り専用」と「無効」はどちらも、ユーザーがフォーム フィールドの内容を変更できないようにしま...

display または visibility を通じて HTML 要素を表示または非表示にする

場合によっては、特定の条件に基づいて Web ページ内の HTML 要素を表示するか非表示にするかを...

MySQL における 10 進数型の使用法の簡単な紹介

MySQL でサポートされている浮動小数点型は、 FLOAT 、 DOUBLE 、およびDECIMA...

1 つの記事で Vuex を理解する

目次概要Vuex の 4 つの主要オブジェクト状態の使用突然変異の使用ゲッターの使用アクションの使用...

Windows に MySQL 8.0.16 をインストールする手順とエラーの解決方法

1. はじめに: mysql8以降は、これまでよく使われていたバージョンと比べてかなり変更点が大きい...

MySQL遅延レプリケーションライブラリ方式の詳細な説明

簡単に言えば、遅延レプリケーションとは、スレーブ データベースがマスター データベースより 1 時間...

Linux で大きなファイルの指定された内容を見つける方法

大きなことも小さなことも考えて、方向転換しましょう。 Linux では非常に大きなファイルに遭遇する...

Node.js+expressメッセージボード機能実装例

目次メッセージボード必要なライブラリオープンソースプロジェクトプロジェクト構造メッセージボードnod...

mysql8.0.19 winx64バージョンのインストール問題を解決する

MySQL は、スウェーデンの会社 MySQL AB によって開発されたオープンソースの小規模なリレ...

CSS 線形グラデーション凹型長方形遷移効果の実装

この記事では、線形グラデーションの凹四角形の遷移効果の難しさやアイデアについて説明します。主に、凹四...