MySQL の左結合操作における on 条件と where 条件の違いの紹介

MySQL の左結合操作における on 条件と where 条件の違いの紹介

優先度

両方のケースで同じ条件を設定すると、異なる結果セットが生成される可能性があるのは、優先順位のためです。 on の優先度は where の優先度よりも高くなります。

まず、2 つの概念を明確にします。

  • LEFT JOIN キーワードは、右側のテーブル (table_name2) に一致する行がない場合でも、左側のテーブル (table_name1) のすべての行を返します。
  • データベースは、2 つ以上のテーブルを接続してレコードを返すときに、中間の一時テーブルを生成し、この一時テーブルをユーザーに返します。

左結合の場合、2 つの違いは次のとおりです。

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

テスト

表1: 表1

idいいえ
1 1 1 1
2 2 番目
3 3 ...

表2: 表2

いいえ名前
1 1 1ああ
2 番目bbb
3 ... ccc
テーブル1 a から a.id、a.No、b.name を選択し、テーブル2 b を (a.No = b.No かつ b.name='aaa') で左結合します。
テーブル1 a から a.id、a.No、b.name を選択し、テーブル2 b を (a.No = b.No) で結合します。ここで、b.name は 'aaa' です。

最初の結果セット:

|id |いいえ |名前|
|---|---|---|
|1 |n1 |aaa|
|2 |n2 |(ヌル)|
|3 |n3 |(ヌル)|

2番目の結果セット:

|id |いいえ |名前|
|---|---|---|
|1 |n1 |aaa|

最初の SQL ステートメントの実行プロセスは、まずテーブル b で名前が aaa である行 (on (a.No = b.No and b.name='aaa') ) を検索します。次に、テーブル a のデータを検索し (テーブル b のルールを満たしていない場合でも)、一時テーブルを生成してユーザーに返します。

2 番目の SQL ステートメントの実行プロセスは次のとおりです。最初に一時テーブルが生成され、次に where ステートメントが実行されて、b.name='aaa' が true ではない結果セットがフィルター処理され、最後に結果がユーザーに返されます。

on は最初に条件を満たさない行を除外し、次に他の操作を実行するため、on が最も高速であることは当然です。

複数のテーブルをクエリする場合、on は where よりも先に有効になります。システムはまず、テーブル間の結合条件に基づいて複数のテーブルを一時テーブルに結合し、次に where を使用してフィルタリングしてから計算します。計算後、having を使用して再度フィルタリングします。このことから、フィルタリング条件が正しい役割を果たすためには、まず条件がいつ有効になるかを理解し、次に条件をどこに配置するかを決定する必要があることがわかります。

JOIN に関係するテーブルの関連付け操作では、接続条件を満たさない行がクエリ範囲内にある必要がある場合、接続条件を WHERE の後ではなく ON の後に置く必要があります。接続条件を WHERE の後に置くと、LEFT、RIGHT などの操作はすべて無効になります。この場合、その効果は INNER 接続とまったく同じです。行の選択に影響しない条件については、ON または WHERE の後に置くだけです。

注意: すべての接続条件は ON の後に配置する必要があります。そうしないと、以前の LEFT と RIGHT の関連付けはすべて装飾として使用され、効果がありません。

要約する

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

以下もご興味があるかもしれません:
  • MySQL の左 (右) 結合での on と where フィルタリングの違いを分析する
  • MySQLクエリ条件におけるonとwhereの配置の違いの分析
  • MySQL の on と where における左結合設定条件の使用法の違いの分析
  • MySQL の ON と Where の違いの詳細な説明

<<:  js SMS認証コード入力ボックスを手動で実装する

>>:  VMware15 centos7 ブリッジモード ssh に突然アクセスできなくなる問題を解決する

推薦する

CSS3 で transform を使用した場合のフォントぼかしの解決方法の詳細な説明

この質問は非常に奇妙なので、あまり多くを語らずにコードに直接進みます。 .g-ダイアログラッパー{ ...

Linux curl フォームのログインまたは送信と Cookie の使用に関する詳細な説明

序文この記事では主に、curl を介してフォーム送信ログインを実装する方法について説明します。単一の...

MySQLデータベースを定期的に自動バックアップする方法

データは貴重なものであることは誰もが知っています。データをバックアップしなければ、データをそのまま放...

sed コマンドを使用して文字列を置換する Linux チュートリアル

文字列を置き換えるには、次の形式を使用する必要があります。 $ sed s/置換対象文字列/置換文字...

IDEA の Maven プロジェクトで MySQL 8.0 に接続して使用する方法に関するチュートリアル

まず、私の基本的な開発環境を見てみましょう。オペレーティングシステム: MacOS 10.13.5 ...

Dockerはローカルディレクトリとデータボリュームコンテナ操作をマウントします

1. DockerはローカルディレクトリをマウントしますDocker は、ホスト上のディレクトリをイ...

MySQLデータベースの使用仕様の概要

導入: MySQL データベースの仕様に関しては、皆さんも何らかのドキュメントを読んだことがあると思...

MySql テーブル、データベース、シャーディング、パーティショニングの知識の詳細な説明

1. はじめにデータベース内のデータ量が一定レベルに達すると、システムパフォーマンスのボトルネックを...

JavaScript タイピングゲーム

この記事では、タイピングゲームを実装するためのJavaScriptの具体的なコードを参考までに紹介し...

Navicat が MySql サーバーにリモート接続できない問題の解決策

Navicat が MySql サーバーにリモート接続できない問題の解決策は、先頭に書かれています:...

CSS マルチカラムレイアウトソリューション

1. 固定幅+適応型期待される効果: 左側は固定幅、右側は適応幅 共通コード: html: <...

要素テーブルの行と列のドラッグを実装する例

要素 ui テーブルにはドラッグ アンド ドロップによる並べ替え機能が組み込まれておらず、サードパー...

Linux でパスワードを入力せずに sudo コマンドを実行する方法

sudo コマンドを使用すると、信頼できるユーザーは別のユーザー (デフォルトでは root ユーザ...

スーパーバイザーウォッチドッグの使い方を3分で学ぶ

ソフトウェアとハ​​ードウェア環境centos7.6.1810 64ビット cat /etc/red...

知っておくべきHTML最適化テクニック

Web ページのパフォーマンスを向上させるために、多くの開発者は、JavaScript、画像の最適化...