本記事では、内部結合・左外部結合・右外部結合・完全外部結合・クロス結合の使い分けについて解説します。
内部結合と外部結合の違い
内部結合と外部結合のちがいは、以下の通りです。
- 内部結合:2つのテーブルの両方にあるデータのみを結合する
- 例:顧客テーブルと注文テーブルを結合して、注文のある顧客のデータを取得する
- 外部結合:どちらかのテーブルを基準にし、片方にないレコードも結合する
- 例:「すべての顧客」と「注文がある顧客の注文」も含める(注文がない顧客も含む)
内部結合(INNER JOIN)
内部結合とは、2つのテーブルから共通するデータのみを結合するやり方のことです。
![](https://prtn-life.com/wp-content/uploads/2024/07/sql-join-1.png)
たとえば、以下の2つのテーブルを内部結合した場合、どちらのテーブルにも存在するIDのレコードのみ保持されます。
![](https://prtn-life.com/wp-content/uploads/2024/07/sql-join-2-607x563.png)
外部結合(OUTER JOIN)
外部結合とは、2つのテーブルから、基準になるテーブルを決めて、もうひとつのテーブルになくても取り出す方法です。
左外部結合(LEFT JOIN)
左外部結合は、左側のテーブルにあるデータを全て取り出す方法です。
![](https://prtn-life.com/wp-content/uploads/2024/07/sql-join-3.png)
例えば、以下の2つのテーブルを左外部結合した場合、基準となるテーブル(テーブル1)に存在するレコードが全て保持されます。
結合後のテーブルは、テーブル2に存在しないデータは空欄になります。
![](https://prtn-life.com/wp-content/uploads/2024/07/sql-join-4-556x563.png)
右外部結合(RIGHT JOIN)
右外部結合は、右側のテーブルにあるデータを全て取り出す方法です。
![](https://prtn-life.com/wp-content/uploads/2024/07/sql-join-5.png)
例えば、以下の2つのテーブルを右外部結合した場合、基準となるテーブル(テーブル2)に存在するレコードが全て保持されます。
結合後のテーブルは、テーブル2を基準としているため、何かを注文したメンバーのみが抽出されます。
![](https://prtn-life.com/wp-content/uploads/2024/07/sql-join-6-615x563.png)
完全外部結合(FULL OUTER JOIN)
完全外部結合は、共通のキーになっているレコードを結合し、片方にしかないレコードも抽出する方法です。
![](https://prtn-life.com/wp-content/uploads/2024/07/sql-join-7.png)
例えば、以下の2つのテーブルを完全外部結合した場合、テーブル1とテーブル2の共通のキーになっているレコードは結合され、それ以外のレコードも抽出されます。
![](https://prtn-life.com/wp-content/uploads/2024/07/sql-join-8-517x563.png)
クロス結合(CROSS JOIN)
クロス結合は、2つのテーブルの全てのデータを全ての組み合わせで結合する方法です。
![](https://prtn-life.com/wp-content/uploads/2024/07/sql-join-9.png)
例えば、以下の2つのテーブルをクロス結合した場合、両テーブルに存在するレコードの全ての組み合わせで抽出されます。
![](https://prtn-life.com/wp-content/uploads/2024/07/sql-join-10-448x563.png)
まとめ
今回は、内部結合・左外部結合・右外部結合・完全外部結合・クロス結合についてそれぞれ解説しました。
筆者は最近ほとんどSQLを書くことはなかったのですが、今流行りの「ノーコードで業務アプリ開発」的な仕事をする機会があり、データの結合で「内部結合」「外部結合」などを設定する場面があったため復習として記事にまとめることにしました。
SQLをよく使う人や、情報処理試験の勉強をされている方にとっては当たり前の知識かもしれませんが、私のように普段SQLを使わない人でもノーコードアプリ開発等で「内部結合」「外部結合」などの用語に触れる機会があるかもしれません。
そのような方にとって参考になれば幸いです。
コメント