こんにちは。
未来電子テクノロジーのインターン生です。(2020年1月退社)
今回は複数のデータを結合するSQLクエリについて書いていきます。
例として、下の二つの表Members、TestScoresを結合する場合を考えます。
Table: Members
| Name | Sex | Age |
|---|---|---|
| Tom | Male | 18 |
| Kate | Female | 31 |
| Susie | Female | 43 |
| Sam | Male | 22 |
Table: TestScores
| Name | English | Math |
|---|---|---|
| Tom | 54 | 76 |
| Susie | 65 | 25 |
| Sam | 48 | 92 |
データ間で対応している行だけを結合する場合
両データの対応している行(上の例の場合、Tom、Susie、Samの3行)のみを結合する場合、INNER JOINを用いて、下のようなコードを書きます。
SELECT *
FROM Members
INNER JOIN TestScores
ON Members.Name = TestScores.Name;
実行結果は以下のようになります。
| Name | Sex | Age | English | Math |
|---|---|---|---|---|
| Tom | Male | 18 | 54 | 76 |
| Susie | Female | 43 | 65 | 25 |
| Sam | Male | 22 | 48 | 92 |
TestScoresにはKateの行がありませんので、Kateの行は切り落とされます。
データ間で対応していない行も結合する場合
Kateの行も含めて結合するには、LEFT JOINを使います。
SELECT *
FROM Members
LEFT JOIN TestScores
ON Members.Name = TestScores.Name;
上のように書くと、以下の実行結果が得られます。
| Name | Sex | Age | English | Math |
|---|---|---|---|---|
| Tom | Male | 18 | 54 | 76 |
| Kate | Female | 31 | ||
| Susie | Female | 43 | 65 | 25 |
| Sam | Male | 22 | 48 | 92 |
TestScoresの中にはKateの行がありませんが、Kateの行も結合されました。
このとき、LEFT JOINは、左側の表のすべての行を残し、右側の表の対応する行を結合します。この際、右側の表の中に対応する行がない場合、その部分は空白で埋められます。
RIGHT JOINはその逆です。
FULL JOINは、両側の表にあるすべての行を残して結合します。
まとめ
今回は、SQLで複数の表を、JOINを用いて結合するクエリについてまとめました。
もし間違いなどがありましたら、訂正しますので、ご指摘のほどよろしくお願いいたします。