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 グラデーション背景の互換性の問題

推薦する

Node+Express テストサーバーのパフォーマンス

目次1 テスト環境1.1 サーバーハードウェア1.1.1 t2.マイクロ1.1.2 c5.large...

両端の CSS レイアウトのサンプルコード (親の負のマージンを使用)

最近、開発中に両端が揃ったレイアウトに遭遇しました。レイアウトはパーセンテージに基づいていました。以...

よく使われる Docker コマンドと例の概要と分析

目次1. コンテナライフサイクル管理(1)ドッカー実行(2)スタート/ストップ/リスタート(3)ドッ...

cocoscreatorプレハブの詳しい説明

目次プレハブプレハブの作り方プレハブの役割1. 同じタイプのノードをバッチで作成する2. 特定の時間...

CSS における重要なカスケード概念の詳細な説明

最近、プロジェクトの過程で問題に遭遇しました。メニューバーを常に上部に表示し、後続の要素をその下に表...

NodeJSとブラウザにおけるこのキーワードの違い

序文JavaScript を学習した人なら誰でも、さまざまな環境で this がどこを指すかという問...

Alibaba Cloud Serverにプログラムをデプロイし、ドメイン名を使用して直接アクセスする方法の詳細な説明

何もすることがなかったので、学習用に最も安いAlibaba Cloudサーバーを購入しました。年間3...

JavaScript 文字列オブジェクトメソッド

目次文字列オブジェクトのメソッド方法 1: indexOf() (推奨)方法 2: search()...

「@INC で ExtUtils/MakeMaker.pm が見つかりません」というエラーを解決する

mha4mysql をインストールする場合の手順は、おおよそ次のようになります: unzip、per...

Docker-Composeコマンドの使い方の詳しい説明

Docker コンテナはさまざまな方法で管理およびデプロイできます。 Docker コマンドを直接使...

Windows で IP アドレスを指定してサーバーへのリモート アクセスを設定する方法

当社には、外部ネットワークからの干渉を受けることが多いサーバーが多数あります。侵入者はポート 338...

mysql8.0.11をインストールしてrootパスワードを変更し、navicat for mysqlに接続するアイデアの詳細な説明

1.1. ダウンロード:公式ウェブサイトから zip パッケージをダウンロードします。私は 64 ビ...

Docker を使用して Redis マスター スレーブ レプリケーション クラスターを構築する

マスタースレーブレプリケーションモードのクラスターでは、通常、1 つのマスターノードと 2 つ以上の...

MySQLのconcat関連関数の詳細な説明

1. concat() 関数機能: 複数の文字列を 1 つの文字列に連結する構文: concat(s...