こんにちは。
未来電子テクノロジーのインターン生です。(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
を用いて、下のようなコードを書きます。
members.sql
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
を使います。
members.sql
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
を用いて結合するクエリについてまとめました。
もし間違いなどがありましたら、訂正しますので、ご指摘のほどよろしくお願いいたします。