はじめに#
SQLでテーブル結合する際にはJOIN句を使いますが、それにはINNER JOINとOUTER JOINの2種類があります。OUTER JOINの方はあまり使ったことがなかったので、改めて勉強しなおしました。
INNER JOINとOUTER JOIN#
まずはじめに、テーブル結合について説明していきます。テーブル結合とは、データベースにある複数のテーブルを合体させて1つのテーブルとして扱うことです。例えば、このような2つのテーブルがあったとします。
とあるSNSのデータベースを想像してください。左がユーザー情報を保管するusersテーブル、右が投稿内容を保存するpostsテーブルです。
↓これを合体させるとこのようになります。
usersテーブルのidとpostsテーブルのuser_idが紐づいて、テーブルを合体させることができます。SQLではこのように書きます。
SELECT *
FROM
users
INNER JOIN posts
ON users.id = posts.user_id;
こうするとユーザーの情報と投稿内容情報を一気にとってくることができます。この手法を、INNER JOINと言います。注意しなければならないのは、佐藤さんはまだ投稿をしていないので、postsテーブルにデータがありません。結合するテーブルにデータがない場合、結合後のテーブルではそのレコードがまるまる削除されてしまいます。postsにデータはないけれども佐藤さんのデータも取ってきたい場合はこのように書きます。
SELECT *
FROM
users
LEFT OUTER JOIN posts
ON users.id = posts.user_id;
結果はこちらになります。
LEFT OUTER JOINを使うことで佐藤さんのデータも取ってくることができます。ただし、postsテーブルにはまだデータが存在していないため、値はnullとなります。
これらをベン図で表すとこのようになります。
INNER JOINのことを内部結合、OUTER JOINのことを外部結合と言います。LEFTが付くと左外部結合になります。ベン図を想像するとどっちがどっちか覚えやすいですね。
終わりに#
テーブル結合は必須の知識ですので、しっかり覚えておくようにしましょう!