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 における ${param} と #{param} の違い

${param}によって渡されるパラメータは、テーブル名やフィールド名を渡すなど、SQL文の一部と...

MySQL 8.0.14 のインストールと設定方法のグラフィックチュートリアル (一般)

MySQLサービス8.0.14のインストール(一般)の参考までに、具体的な内容は次のとおりです。イ...

MySQLで日付と時刻を照会する方法

序文:プロジェクト開発では、一部のビジネス テーブル フィールドで日付と時刻の型が使用されることが多...

Docker を使用して静的 Web サイト アプリケーションを作成する (複数の方法)

静的ウェブサイトをホストできるサーバーは数多くあります。この記事では、nginx、apache、to...

仮想マシン VMware に Kali Linux をインストールする最新の超詳細なグラフィック チュートリアル

目次1. システムイメージファイルをダウンロードする2. 新しい仮想マシンを作成する3. Kali ...

CSS ファンタスティックボーダーアニメーション効果の実装

今日、私はブログサイト shoptalkshow を閲覧していて、非常に興味深いこのインターフェース...

超大型フォントを使用した 40 の Web ページ デザイン

今日の Web デザインでは、非常に大きなフォントが表示される傾向があります。これらのオープンソース...

CentOS 8 に Docker をインストールする詳細なチュートリアル

1. 以前のバージョン yum 削除 docker docker-client docker-cli...

MySQLデータベース最適化技術の簡単な紹介

成熟したデータベース アーキテクチャは、最初から高可用性、高スケーラビリティなどの機能を備えて設計さ...

mysql インストーラ コミュニティ 8.0.12.0 インストール グラフィック チュートリアル

このチュートリアルでは、参考のためにmysqlインストーラコミュニティ8.0.12.0のインストール...

MYSQL における char と varchar の違い

CHAR 型と VARCHAR 型は似ていますが、主に格納場所、末尾のスペース、取得方法が異なります...

Centos7 MySQL データベースのインストールと設定のチュートリアル

1. システム環境yum updateアップグレード後のシステムバージョンは[root@yl-web...

Navicat for MySQL チュートリアル

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

JavaScriptイベント実行メカニズムの深い理解

目次序文ブラウザJS非同期実行の原理ブラウザのイベントループ実行スタックとタスクキューマクロタスクと...

Windows 10 Home Edition に Docker for Windows をインストールする

0. 背景ハードウェア: Xiaomi Notebook Air 13/Inter Core i7-...