【SQL】テーブルを複数結合する方法!3つ以上の場合のJOIN句の使い方
この記事からわかること
- selectで抽出する時に複数のテーブルを結合する方法
- 3つ以上のテーブル を結合する方法
- JOIN句の使い方
- 内部結合と外部結合の違い
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
今回はSQL文を使ったテーブルの結合方法と3つ以上を結合する構文をまとめて行きたいと思います。
2つのテーブルを結合する方法
以下のようなテーブルがある前提で話を進めていきます。
テーブル1
- user_id(主キー)
- 氏名
テーブル2
- user_id(外部キー→テーブル1)
- 性別
1つのテーブルから値にマッチするデータを取り出す時は以下のようなSQL文になります。
SELECT * FROM テーブル1 WHERE user_id=値
// 結果:user_id,氏名
これが2つのテーブルから値にマッチするデータを結合して取り出すにはJOIN句を使って以下のようにします。
SELECT * FROM テーブル1
JOIN テーブル2 ON テーブル1.user_id = テーブル2.user_id
WHERE テーブル1. user_id = 値
// 結果:user_id,氏名,性別
注意点
JOIN句で結合した後にWHEREやORDER BYなどでカラムを選択する場合「テーブル名.カラム名」と指定しないとエラーになります。
3つのテーブルを結合する方法
テーブル1
- user_id(主キー)
- 氏名
テーブル2
- user_id(外部キー→テーブル1)
- 性別
テーブル3
- user_id(外部キー→テーブル1)
- 年齢
- 生年月日
3つのテーブルを結合するときは2つ結合した場合のSQL文に続けてJOIN句を追加するだけです。
SELECT * FROM テーブル1
JOIN テーブル2 ON テーブル1.user_id = テーブル2.user_id
JOIN テーブル3 ON テーブル1.user_id = テーブル3.user_id
WHERE テーブル1.user_id = 値
// 結果 user_id,氏名,性別,年齢,生年月日
各テーブルの抜き出すカラムを指定する
テーブルの全てのカラムではなく抜き出すカラムを指定したい場合は、select後のカラム部分を変更します。
ここに取得したいテーブル.カラム
の形式で記述した値のみ抜き出すことができます。テーブルのカラム全てであればテーブル.*
でOKです。
SELECT * FROM テーブル1.*,テーブル2.* ,テーブル3.年齢
JOIN テーブル2 ON テーブル1.user_id = テーブル2.id
JOIN テーブル3 ON テーブル1.user_id = テーブル3.id
WHERE テーブル1.user_id = 値
// 結果 user_id,氏名,性別,年齢
テーブルの結合方法の種類と違い
データベースから値を抜き出す時に複数のテーブルからマッチするものを取り出したい。でも各々のテーブルから抜き出したデータを後から組み合わせるより、抜き出す前に組み合わせた方が効率的で簡単です。
それを可能にするのが「テーブル結合」です。SQLではSELECT文のJOIN句
を使って実装します。このテーブル結合には「内部結合」と「外部結合」の2種類があります。
内部結合とは(INNER JOIN句)
内部結合とは2つのテーブルからそれぞれ特定のカラムを指定し、両者の値が一致するレコードのみを連結することです。SQL分はINNER JOIN句
を使用します。
つまりお互いのテーブルに存在し合うものだけが結合して返されます。
SELECT * FROM テーブル1
INNER JOIN テーブル2 ON テーブル1.user_id = テーブル2.user_id
外部結合とは(OUTER JOIN句)
外部結合とは2つのテーブルからそれぞれ特定のカラムを指定し、両者の値が一致するレコードは連結して、一致しないレコードはそのまま返す結合方法です。SQL分はOUTER JOIN句
を使用します。
つまりお互いのテーブルに存在し合うものを結合したものと一方のテーブルに存在しなかったレコード全件を結合して返されます
また外部結合の際は主とする(全件返す)テーブルを選択します。指定方法はOUTER JOIN
の前部分です。
- LEFT OUTER JOIN:左外部結合
- RIGHT OUTER JOIN:右外部結合
- FULL OUTER JOIN:完全外部結合
SELECT * FROM テーブル1
LEFT OUTER JOIN テーブル2 ON テーブル1.user_id = テーブル2.user_id
この場合は左側(テーブル1)が全件出力され、テーブル2にも存在するレコードは結合されます。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。