理解するポイントはここ! 外部結合と内部結合の違いを図で説明してみた
目次
こんにちは。井上です。
SQLを学ぶ際、序盤で躓きやすいポイントの1つに、内部結合・外部結合があります。似たような名前だし、最初の頃は直観的に理解をすることが中々難しかったりしますよね。
そこで、今回は図を使って直観的にこの二つを理解できるように解説してみようと思います。
違いを理解するポイントは「条件に合わないデータの扱い」
内部結合・外部結合の違いですが、一言で表すと結合条件に合わなかったデータをどう扱うかです。
内部結合 | 結合条件に合わないデータは結果に出てこない。 |
---|---|
外部結合 | 結合条件に合わないデータでも、結合元のテーブルのデータは結果に出る。 |
では、早速これらを図を使って説明していきます。
まず、下記のような「料理テーブル」と「冷蔵庫テーブル」をイメージしてください。料理テーブルはあなたがレシピを知っている料理、冷蔵庫テーブルは今家の冷蔵庫の中にある食材を表しています。
ここで、冷蔵庫の中の食材で料理を作るケースを考えてみましょう。この2つのテーブルを使用食材 = 食材を条件として結合してみます。すると、下記のように結びつくことが分かります。
さて、ここまでは内部結合・外部結合共に同じ動きをします。ここで、結合条件に合わないデータがありますよね?
このデータの取り扱いについて、違いを見ていきましょう!
内部結合(INNER JOIN)の場合
内部結合の場合、結合条件に合わないデータは結果に出てきません。よって、下記のような結合結果になります。
内部結合を使うことで、レシピを知っていて食材も冷蔵庫にある料理のデータを抽出することができます。レシピを新しく覚えたり、食材を買いに行かなくてもすぐ作ることができる料理を知りたい場合には、内部結合を使うといいですね。
外部結合(LEFT JOIN)の場合
外部結合にはLEFT JOINとRIGHT JOINがあります。まず、料理テーブル LEFT JOIN 冷蔵庫テーブルの場合を考えます。
LEFT JOINの場合は、結合時に先(左側)に書かれたテーブルをメインテーブルとします。今回のケースでは料理テーブルがメインテーブルになります。
そして、結合条件に合わないデータであっても、メインテーブルのデータであれば結果に出します(結合されるはずだった部分のデータはNULLになります)。
よって、下記のような結合結果になります。
LEFT JOINを使うことで、知っているレシピに対して材料が冷蔵庫にあるかを確認することができます。冷蔵庫テーブルのデータがNULLの場合、レシピを知っていても食材がないため、作るためには買い出しに行く必要があることが分かります。
外部結合(RIGHT JOIN)の場合
次に、料理テーブル RIGHT JOIN 冷蔵庫テーブルの場合を考えます。
RIGHT JOINの場合は、結合時に後(右側)に書かれたテーブルをメインテーブルとします。今回のケースでは冷蔵庫テーブルがメインテーブルになります。
そして、結合条件に合わないデータであっても、メインテーブルのデータであれば結果に出します(結合されるはずだった部分のデータはNULLになります)。
よって、下記のような結合結果になります。
RIGHT JOINを使うことで、冷蔵庫の食材に対して、それを使うレシピを知っているかを確認することができます。料理テーブルのデータがNULLの場合、食材があってもレシピを知らないため、食材を使うためには新たにレシピを調べる必要があることが分かります。
ちなみに、RIGHT JOINについては全てLEFT JOINに代替可能です。可読性を上げるために外部結合はLEFT JOINで統一されていることが多いため、RIGHT JOINを使うのは個人的にあまりオススメしません。
まとめ
条件に一致しないデータをどうしたいか、によってどの結合方法を使うかが変わってきます。最初はどの結合を使うのが最も適当か混乱することもあると思います。
そんな時には是非こちらの記事を思い出して、頭の中で簡単な図を頭で思い浮かべてみてください。