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 結合バッファの原理
|