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

推薦する

JS を使用して航空機戦争の小さなゲームを実装する

この記事の例では、参考のために航空機戦争ゲームを実装するためのJSの具体的なコードを共有しています。...

Centos システムの指定された場所に Nginx をインストールする方法

Centos システムの指定された場所に Nginx をインストールするにはどうすればいいですか?は...

Facebook 出会い系サイトデザインのユーザー エクスペリエンス分析

<br />関連記事: Facebookの情報アーキテクチャの分析 元記事: http:...

MySQL 8.0.11 Mac 用インストール ガイド

MACはmysql8.0をインストールします。具体的な内容は次のとおりです。 1. ダウンロードアド...

ウェブサイトにダークモード切り替え機能を持たせるための純粋なCSSフリー実装コード

序文ダーク モードの概念は、 MacOS系統のMojaveに由来し、ユーザーが選択できる 2 つのス...

Dockerは指定されたメモリで操作を実行します

次のように: -m, --memory メモリ制限。形式は数値と単位です。単位は b、k、m、g の...

MySQL 一時テーブルの簡単な使用法

MySQL 一時テーブルは、一時的なデータを保存する必要がある場合に非常に便利です。一時テーブルは現...

MySQLで最新のトランザクションIDを照会する方法

前に書いた内容: ビジネス ロジックの判断を行うために、最新のトランザクション ID を表示する必要...

Linux でユーザーにルート権限を追加する方法の概要

1. ユーザーを追加します。まず、adduser コマンドを使用して共通ユーザーを追加します。コマン...

MySQL 派生テーブル(Derived Table)の簡単な使用例分析

この記事では、例を使用して、MySQL 派生テーブルの簡単な使用方法を説明します。ご参考までに、詳細...

Mysql で期間の交差をクエリする方法

MySQLクエリ期間の交差使用シナリオデータベース テーブルには、starttime と endti...

nginxリバースプロキシを使用するときに長時間接続を維持する方法

・【シーン説明】 HTTP1.1 以降、HTTP プロトコルは永続的な接続 (長い接続とも呼ばれます...

仕事でよく使うLinuxコマンドまとめ

仕事では、docker や kubernetes などのオープンソース ツールをさらに活用しましょう...

HTML テーブルタグチュートリアル (27): セルの背景画像属性 BACKGROUND

セルの背景画像を設定でき、任意の GIF または JPEG 画像ファイルを使用できます。基本的な構文...

MySQL データベースの 1045 エラーの解決方法

ローカル データベースがサーバー データベースに接続されているときに発生する 1045 の問題を解決...