【SQL】テーブルを複数結合する方法!3つ以上の場合のJOIN句の使い方

【SQL】テーブルを複数結合する方法!3つ以上の場合のJOIN句の使い方

この記事からわかること

  • selectで抽出する時に複数のテーブルを結合する方法
  • 3つ以上のテーブル を結合する方法
  • JOIN句の使い方
  • 内部結合外部結合違い

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

今回はSQL文を使ったテーブルの結合方法と3つ以上を結合する構文をまとめて行きたいと思います。

2つのテーブルを結合する方法

以下のようなテーブルがある前提で話を進めていきます。

テーブル1

テーブル2

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

テーブル2

テーブル3

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の前部分です。

SELECT * FROM テーブル1 
LEFT OUTER JOIN テーブル2 ON テーブル1.user_id = テーブル2.user_id

この場合は左側(テーブル1)が全件出力され、テーブル2にも存在するレコードは結合されます。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index