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 にアップグレードする実用的な方法

推薦する

Vue3 がデータ監視を実装するためにプロキシを使用する理由の分析

Vue データの双方向バインディング原則ですが、この方法には欠点があり、配列とオブジェクトの部分的な...

docker-compose でデプロイしたときに MySQL にアクセスできなくなる問題の簡単な分析

Docker-ComposeとはCompose プロジェクトは、以前の fig プロジェクトから派生...

docker コンペ応募でよく使われるコマンドのまとめ

アカウントにログイン DOCKER_REGISTRY=registry.cn-hangzhou.al...

Linux に MySQL 8.0.19 をインストールするための詳細な手順と問題解決方法

最近Tencent Cloudサーバーを購入し、環境を構築しました。このメモは、これまで MySQL...

検索ナビゲーションバー付きの CSS サンプルコード

この記事では、CSS を使用して検索機能付きのナビゲーション バーを作成する方法を説明します。以下の...

LinuxサーバーにGRUBをインストールする手順

Linux サーバーに GRUB をインストールする方法クラウド移行ツールを使用して、CentOS ...

IDEA で mysql8.0.3 と mybatis-generator を使用する際に発生するバグ

1. プラグインを追加し、pomファイルの下に次の設定を追加します。 <!-- mybatis...

WeChatアプレットに2048ミニゲームを実装する詳細なプロセス

レンダリング サンプルコード今日は、WeChat アプレットを使用して 2048 ゲームを実装します...

CSS 円形ホローイングの実装(クーポン背景画像)

この記事では主に、クーポンの背景画像などでよく使われる CSS 円形ホローイングについて紹介し、皆さ...

CentOS7.5 MySQLのインストールチュートリアル

1. まずシステムにmysqlがインストールされているかどうかを確認します rpm -qa | gr...

Linuxでディスク使用量を確認する方法

1. dfコマンドを使用してディスク全体の使用量を表示します。 df コマンドは、ハードディスクのマ...

CentOS 上の Docker に Jupyter をインストールしてポートを開く方法

目次jupyterをインストールするDocker ポートマッピングjupyterをインストールするp...

Vue テンプレートのコンパイルの詳細

目次1. 解析する1.1 傍受のルール1.2 傍受プロセス部分1.3 パーサーの概要2. 最適化する...

WMLとは何ですか?

WML (ワイヤレス マークアップ言語)。これは HTML から派生したマークアップ言語ですが、W...

React Diff Principle の詳細な分析

目次差分アルゴリズムレイヤーごとの比較同じタイプのコンポーネントを比較する同じタイプの要素の比較子ノ...