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

推薦する

よくある CSS エラーと解決策

コードをコピーコードは次のとおりです。 IE6 と FF の違い: background:orang...

PHP-HTMLhtml 重要な知識ポイントメモ(必読)

1. フレームセット、フレーム、iframeを使用して複数のウィンドウを実現する2. 画像上のマッ...

Chromeの最小フォントサイズ制限12pxに対する最終的な解決策

ウェブサイトを作成するユーザーの多くが、このような問題に遭遇すると思います。Chrome のデフォル...

Dockerは終了状態で起動します

docker run後、ステータスは常にExitedになります解決:パラメータを追加: -it do...

Centos サーバーで nginx を設定する方法の例

セキュアターミナルMobaXterm_Personalをダウンロードまず、安全なターミナルをダウンロ...

JavaScript は自由に移動するウィンドウのマウス制御を実装します

この記事では、フリーウィンドウのマウス制御を実現するためのJavaScriptの具体的なコードを参考...

Mac で Docker を使用して Oracle をデプロイする方法

Mac で Docker を使用して Oracle をデプロイする方法まずdockerをインストール...

HTML ページの部分更新の実装コード

イベント応答の更新: 要求されたときのみ更新1. JS HTML DOM または jQuery を介...

ネイティブ js はカスタム スクロール バー コンポーネントを実装します

この記事の例では、カスタムスクロールバーコンポーネントを実装するためのjsの具体的なコードを参考まで...

CSS3 のエラスティック レイアウトでの em の使用の概要: 1em は何ピクセルですか?

私は長い間 CSS を使用してきましたが、Web 要素の関連属性を設定するために常に「px」を使用し...

Vueは動的コンポーネントを使用してTAB切り替え効果を実現します

目次問題の説明Vueの動的コンポーネントとはアプリケーションシナリオの説明実装手順ステップ 1 (新...

MySQL で行を列に変換したり、列を行に変換したりする詳細な例

mysql 行から列へ、列から行へ難しい文章ではないので、詳しく説明はしません。文章を読むときは、一...

一般的なMySQLストレージエンジンの長所と短所

目次すべてのストレージエンジンを表示InnoDB ストレージ エンジンMyISAM ストレージエンジ...

Centos での Python のアップグレードと Mongodb ドライバーのインストールに関する問題

Python バージョンを確認します (python -V)。2.7 未満の場合は、アップグレードす...

要素の水平方向の中央揃えを実現する3つの方法と、固定レイアウトとフローレイアウトの概念の理解

CSS でテキストを中央揃えにするプロパティは非常に簡単に実現できます。text-align:cen...