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

推薦する

クラスタrpmを使用してMySQLをインストールするための詳細な手順

MySQLデータベースをインストールするa) MySQL ソースインストールパッケージをダウンロード...

html2canvasで画像が正常にキャプチャできない時の解決方法

質問まず、私が遭遇した問題についてお話しします。まず、そういった需要があるわけです。フロントエンドは...

Mysql マスタースレーブ同期 Last_IO_Errno:1236 エラー解決

Mysql マスタースレーブ同期の Last_IO_Errno:1236 エラーの原因は何ですか? ...

HTMLドキュメントタイプの詳細な説明

私のは: <!DOCTYPE html>ブログガーデン: <!DOCTYPE HT...

VMware仮想マシンにLinux(CentOS)をインストールするための詳細な構成手順

CentOS7をダウンロード私がダウンロードしたイメージはCentOS-7-x86_64-DVD-1...

Node.js の TCP 接続処理のコア プロセス

数日前、友人と Node.js の epoll とリクエスト処理に関する知識を交換しました。今日は、...

CSS で平均レイアウトを実現するためにネガティブ マージン テクノロジーを使用する方法

通常、IE ブラウザでの CSS の互換性の問題を解決するために、フロート レイアウトが使用されます...

type="file" の入力ボックスのスタイル変更の概要

入力タイプ「file」とは何ですか?これが何なのかは説明する必要はないと思います。誰もが知っているこ...

HTMLの基礎 HTMLの構造

HTML ファイルとは何ですか? HTML は Hyper Text Markup Language...

JavaScript のカンマ式が含まれている場合について

JavaScript の if ステートメントで英語のカンマ「,」が表示されることがあります。これは...

MySQL 5.7.24 圧縮パッケージのインストールと設定方法のグラフィックチュートリアル

この記事では、参考までにMySQL 5.7.24圧縮パッケージのインストールチュートリアルを紹介しま...

Win10にmysql8.0.15 winx64をインストールしてサーバーに接続する際に問題が発生しました

1. mysql-8.0.15をダウンロード、インストール、設定する1. 公式サイト (https:...

CSSを使用してファイルアップロードパターンを描画する

以下に示すように、あなたならどのようにそれを達成しますか: 通常、フォントアイコンを使用して中央にプ...

three.js で 3D ダイナミック テキスト効果を実現する方法

序文みなさんこんにちは。CSS ウィザードの alphardex です。以前、海外のウェブサイトを閲...

MySQLインデックスの失敗の典型的なケース

目次典型的なケース付録: 一般的なインデックス障害の状況典型的なケース次の構造を持つ 2 つのテーブ...