SQLのさまざまな結合サマリーの詳細な説明

SQLのさまざまな結合サマリーの詳細な説明

SQL 左結合、右結合、内部結合、自然結合 さまざまな結合の概要

SQL には、左結合、右結合、内部結合、自然結合など、さまざまな結合があります。初心者は、これらが何なのか混乱するはずです。それらの違いと関係は何でしょうか? 図を使って説明しましょう。

上の図は、左結合、右結合、内部結合、完全外部結合の違いを示しています。これらを理解して区別するために、簡単な例を使ってみましょう。現在、Person と Address という 2 つのテーブルがあります。

--テーブル係
+ -- --------+-----------+----------+
|個人 ID |||
+ -- --------+-----------+----------+
| 1 ||サン|
| 2 |||
| 3 |||
| 4 |ヤン||
+ -- --------+-----------+----------+


--テーブルアドレス
+ ---------- +----------+---------------+-------+
|住所 ID |個人 ID |市区町村|都道府県|
+ ---------- +----------+---------------+-------+
| 1 | 2 |サンフランシスコ| CA |
| 2 | 3 |ロサンゼルス| CA |
| 3 | 1 |サンディエゴ| CA |
+ ---------- +----------+---------------+-------+

以下でそれぞれ見てみましょう:

左結合:テーブル (table1) のすべての行と、右テーブル (table2) の一致する行を返します。一致する行がない場合、右側の結果は NULL になります。

左の交差: 左のテーブルのすべての行と右のテーブルの一致する行を返します。一致するものがない場合、NULL を使用します。

SELECT * FROM Person LEFT JOIN Address ON Person.PersonId = Address.PersonId;
+ -- --------+------------+-----------+-----------+----------+---------------+-------+
|個人 ID ||姓 | 住所 ID |個人 ID |市区町村 |都道府県|
+ -- --------+------------+-----------+-----------+----------+---------------+-------+
| 2 | Li | Si | 1 | 2 |サンフランシスコ| CA |
| 3 ||| 2 | 3 |ロサンゼルス| CA |
| 1 ||サン| 3 | 1 |サンディエゴ| CA |
| 4 |ヤン|| NULL | NULL | NULL | NULL |
+ -- --------+------------+-----------+-----------+----------+---------------+-------+

右結合: 右側のテーブル (table2) のすべての行と、左側のテーブル (table1) の一致する行を返します。一致する行がない場合、左側の結果は NULL になります。

右交差: 右テーブルのすべての行と左テーブルの一致する行を返します。一致するものがない場合、NULL を使用します。

SELECT * FROM Person RIGHT JOIN Address ON Person.PersonId = Address.PersonId;
+ -- --------+------------+-----------+-----------+----------+---------------+-------+
|個人 ID ||姓 | 住所 ID |個人 ID |市区町村 |都道府県|
+ -- --------+------------+-----------+-----------+----------+---------------+-------+
| 1 ||サン| 3 | 1 |サンディエゴ| CA |
| 2 | Li | Si | 1 | 2 |サンフランシスコ| CA |
| 3 ||| 2 | 3 |ロサンゼルス| CA |
| NULL | NULL | NULL | 4 | 5 |メンフィス| TN |
+ -- --------+------------+-----------+-----------+----------+---------------+-------+

内部結合: 両方のテーブルの列が一致する限り、両方のテーブルからすべての行を選択します。

内部交差: 左側と右側のテーブルでキーワードが一致する行を選択します。

SELECT * FROM Person INNER JOIN Address ON Person.PersonId = Address.PersonId; + -- --------+------------+-----------+-----------+----------+---------------+--------+
|個人 ID ||姓 | 住所 ID |個人 ID |市区町村 |都道府県|
+ -- --------+------------+-----------+-----------+----------+---------------+-------+
| 1 ||サン| 3 | 1 |サンディエゴ| CA |
| 2 | Li | Si | 1 | 2 |サンフランシスコ| CA |
| 3 ||| 2 | 3 |ロサンゼルス| CA |
+ -- --------+------------+-----------+-----------+----------+---------------+-------+

完全結合: 左側のテーブル (table1) と右側のテーブル (table2) のすべての行を返し、LEFT 結合と RIGHT 結合の両方の結果を組み合わせます。

完全な交差: 左のテーブルのすべての行と右のテーブルのすべての行を返します。これは、左の交差と右の交差の結合です。

MySQL には Full Join コマンドがないため、Left Join と Right Join の結果を UNION することもできます。

SELECT * FROM Person LEFT JOIN Address ON Person.PersonId = Address.PersonId UNION
SELECT * FROM Person RIGHT JOIN Address ON Person.PersonId = Address.PersonId; + -- --------+------------+-----------+-----------+----------+---------------+--------+
|個人 ID ||姓 | 住所 ID |個人 ID |市区町村 |都道府県|
+ -- --------+------------+-----------+-----------+----------+---------------+-------+
| 2 | Li | Si | 1 | 2 |サンフランシスコ| CA |
| 3 ||| 2 | 3 |ロサンゼルス| CA |
| 1 ||サン| 3 | 1 |サンディエゴ| CA |
| 4 |ヤン|| NULL | NULL | NULL | NULL |
| NULL | NULL | NULL | 4 | 5 |メンフィス| TN |
+ -- --------+------------+-----------+-----------+----------+---------------+-------+

Natural Join:結合する 2 つのテーブルの共通列に基づいて、暗黙的な結合句を作成します。共通列とは、両方のテーブルで同じ名前を持つ列です。NATURAL JOIN は、INNER join 、LEFT OUTER join 、または RIGHT OUTER join のいずれかです。デフォルトは INNER joinです。

自然な交差: 左テーブルと右テーブルの共通列に基づいて暗黙的な結合操作を作成します。共通列とは、2 つのテーブルで同じ列名を持つ 2 つの列です。自然な交差は、内側の交差、左の交差、または右の交差になります。デフォルトは内部です。

SELECT * FROM Person NATURAL JOIN Address;

+ -- --------+-----------+-----------+-----------+---------------+--------+
|個人 ID |||住所 ID |市区町村|都道府県|
+ -- --------+-----------+-----------+-----------+---------------+--------+
| 1 ||サン| 3 |サンディエゴ| CA |
| 2 | Li | Si | 1 |サンフランシスコ| CA |
| 3 ||| 2 |ロサンゼルス| CA |
+ -- --------+-----------+-----------+-----------+---------------+--------+

最後に、以下の等号の両側のキーワードは同等であることに注意してください。

左結合 B = 左外部結合 B
右結合 B = 右外部結合 B
完全結合 B = 完全外部結合 B
A 内部結合 B = A 結合 B

SQLの各種結合サマリーの詳細な説明はこれで終わりです。SQLの各種結合サマリーに関するより関連性の高いコンテンツについては、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLの結合の基本原理についての簡単な説明
  • SQL文におけるJOINの使用シナリオの分析
  • MYSQL データベースの基礎 - 結合操作の原理
  • MySQL の無効な左結合の問題を解決する方法とその使用上の注意
  • MySQLの左結合を内部結合に素早く変換するプロセス
  • コード標準では、SQL ステートメントに結合が多すぎないようにする必要があるのはなぜですか?
  • MySQL の効率的なクエリの左結合とグループ化 (プラス インデックス)
  • MySQL 結合バッファの原理

<<:  複数のdiv内のテーブルのtdwidth設定は同じで、揃えることができません

>>:  CSS3 グラデーション背景の互換性の問題

推薦する

Python Flask WeChat アプレットのログインプロセスとログイン API 実装コード

1. まずは効果を見てみましょうインターフェース要求によって返されるデータ: 2. 公式ログインフロ...

Angular 依存性注入の説明

目次概要1. 依存性注入2. Angularの依存性注入フレームワーク概要依存性注入: デザインパタ...

MySQL で explain ステートメントを使用する基本的なチュートリアル

目次1. 概要1. 説明文テスト2. 結果の各列の説明2. ID列の説明1. 環境整備2. expl...

js での遅延読み込みとプリロードの具体的な使用法

遅延読み込み(レイジー読み込み)とプリロードは、Web 最適化によく使用される手段です。 。 1. ...

CSS でデジタル ページング効果のコードと手順を実装する方法

かなりの数のウェブサイトがデジタルページング効果を使用しています。たとえば、このサイトのページングも...

Taobao の商品画像切り替え効果を実現する JavaScript

JavaScriptの服装アルバム切り替え効果(Taobao商品画像切り替えに似ています)、参考ま...

Vueでフォーム検証を実装する方法

1. インストールと使用まず、Vue プロジェクトにインストールします。 npm インストール --...

JavaScript 関数呼び出し、適用、バインド メソッドのケース スタディ

要約する1. 類似点どちらも、ターゲット関数が実行されると内部の this ポインターを変更できます...

VUE 入門 イベント処理の学習

目次1. 関数バインディング2. パラメータと$eventを使用する3. 1つのイベントに複数の関数...

非常に詳細な MySQL8.0.22 のインストールと設定のチュートリアル

みなさんこんにちは。今日は、MySQL 8.0.22 のインストールと構成について学習します。注意深...

CSS3は、大きな円のドット分布と回転効果を実現するためにtransform-originを使用します。

まず、transform-origin 属性を使用する必要があります。transform 属性は必ず...

Dockerを使用して外部からアクセス可能なMySQLを構築する詳細な説明

MySQL 8.0をインストールする docker run -p 63306:3306 -e MYS...

Linux 圧縮ファイルコマンド zip の使用例

「.zip」形式は、Windows システムでファイルを圧縮するために使用されます。実際、「.zip...

MySQLインデックスを正しく作成する方法

インデックス作成は大学図書館の書誌インデックスの構築に似ており、データ検索の効率を向上させ、データベ...