SQL 結合クエリの内部結合、外部結合、クロス結合の違いの詳細な説明

SQL 結合クエリの内部結合、外部結合、クロス結合の違いの詳細な説明

データベースを使用するアプリケーションを開発する場合、必然的にユニオンクエリを使用する必要があります。SQL でよく使用されるユニオンクエリには、内部結合、外部結合、クロス結合があります。私を含め、多くの人がこの 3 つの違いについてよく理解していない可能性があります。確認してみましょう。結合を使用してテーブルを接続する場合、欠陥のあるケースは内部結合です。また、開発で使用される左結合と右結合は外部結合に属し、外部結合には完全結合も含まれます。図を使用して、それらの違いをお知らせします。

テーブルは 2 つあり、左側のテーブルがテーブル A です。表Bは右側の表です。それぞれに 4 つのレコードがあり、そのうち 2 つは同じ名前です。

1. INNER JOINの結果はABの交差である

TableA から * を選択し、TableB を TableA.name = TableB.name に結合します。 

2. LEFT [OUTER] JOIN はテーブル A の完全なセットを生成し、一致するものがない場合、テーブル B の一致する値は null 値に置き換えられます。

TableA から * を選択し、TableB を LEFT OUTER JOIN し、TableA.name = TableB.name とします。 

3.RIGHT [OUTER] JOIN はテーブル B の完全なセットを生成し、一致するものがない場合、テーブル A の一致する値は null 値に置き換えられます。

TableA から * を選択し、TableB を TableA.name = TableB.name に右外部結合します。

この図は左結合に似ています。

4. FULL [OUTER] JOIN は A と B の結合を生成します。一致しないレコードの場合、値として null が使用されます。

TableA から * を選択し、TableB を TableA.name = TableB.name に完全外部結合します。

is NULL を使用すると、一致する値がないことが分かります。

TableA から * を選択し、TableB を TableA.name = TableB.name に完全外部結合します。
TableA.id が null であるか、TableB.id が null である

5. CROSS JOIN は、テーブル A とテーブル B のデータの N*M 結合、つまりデカルト積を実行します。たとえば、この例では 4*4=16 レコードが生成されます。開発プロセスではデータをフィルタリングする必要があるため、この方法はほとんど使用されません。

表Aから*を選択し、表Bにクロス結合します。

上記の比較により、内部結合、外部結合、クロス結合の違いを誰もが明確に理解できたと思います。

補充する

参加することが最善の選択である理由は何ですか? 「,」を使用してテーブルを接続すると、テーブル A とテーブル B は直接デカルト積を生成し、where を使用して結果をフィルタリングします。ただし、結合時にテーブル A とテーブル B が接続されると、結果は on 以降の条件に従ってフィルタリングされ、次に where 条件に従ってフィルタリングされます。

SQL 標準によれば、CROSS JOIN はデカルト積です。しかし、MySQL の場合、CROSS JOIN は INNER JOIN と同等です。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • MySQL における 10 進数型の使用法の簡単な紹介
  • あるテーブルのデータの列を別のテーブルの列にコピーするMySQLメソッド
  • MySQL Limitクエリのパフォーマンスを向上させる方法
  • MySQL マスター/スレーブ データベース同期構成と一般的なエラー
  • Mysql Explainコマンドの使用と分析
  • MySQLのSQL文はインデックスを使用しません
  • MySQLインデックスを正しく作成する方法
  • MySQL での replace と replace into の使い方の説明
  • MySQL スロークエリを通じて MySQL のパフォーマンスを最適化する方法
  • MySQL データベースの大文字と小文字の区別の問題

<<:  CentOS 7.4 で MySQL 5.7.28 バイナリモードをインストールする方法

>>:  Linux で PHP を 5.6 にアップグレードする実用的な方法

推薦する

全体的なユーザーエクスペリエンスを確保する方法

関連記事:ユーザーエクスペリエンスのためのウェブサイトデザイン今朝、GMail がまた不調になり、接...

tomcat9.exeをクリックするとクラッシュする問題を解決する方法

ある読者から連絡があり、ダウンロードが終了し、操作がまだ開始されていないのに、なぜ Tomcat の...

mysql 8.0.16 winx64.zip インストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.16 winx64.zipのインストールと設定方法の具体的なコード...

Vue3.0 手書き拡大鏡効果

達成される効果は、固定ズームが 2 倍になり、マウスが左側の画像領域に入るとマスク レイヤーが表示さ...

CentOS7 のシステム サービスに Nginx を追加する方法

導入コンパイル、インストール、問題の解決後、Nginx は正常に動作していますが、現時点では Ngi...

画像の下部の空白部分の問題を解決する

最近のプロジェクトに取り組んでいるとき、下の図に示すように、画像を参照すると常に下部に空白スペースが...

JavaScriptはキャンバスを使用して座標と線を描画します

この記事では、JavaScriptでキャンバスを使用して座標と線を描く具体的なコードを参考までに紹介...

CSSスクロールバーのスタイルをカスタマイズする方法の詳細な説明

この記事では、CSS スクロールバー セレクターを紹介し、Webkit ブラウザーと IE ブラウザ...

マークアップ言語 - 画像の置き換え

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

Vue でスロットを使用する方法についての簡単な説明

定義と使用方法:コンポーネントのテンプレートでスロットタグの定義を使用します。デフォルトの表示値は、...

VMware Workstation のインストール Linux (Ubuntu) システム

システムをコンピューターにインストールする方法がわからない場合は、Linux を学習したい場合は、仮...

Docker用国産イメージウェアハウスの使い方

1. 問題の説明何らかの理由により、中国でのDockerイメージのダウンロード速度は特に遅くなります...

MySQL 5.7.23 解凍バージョンのインストールチュートリアル(画像とテキスト付き)

MySQLインストーラをダウンロードする公式ダウンロードアドレス: http://dev.mysq...

情報製品の読書リストのインタラクティブなデザインに関する考えと経験の共有

リストは、テーブルをコンテナーとして使用するテキストまたはグラフの形式として定義されます。商品の種類...

Nginx がサーバーの生存状態をパッシブにチェックする詳細な説明

導入定期的にヘルスチェックを送信して、アップストリーム グループ内の HTTP サーバーのヘルスを監...