【SQL Server】INNER JOINとLEFT JOINの違いとは?初心者向けにわかりやすく解説!

スポンサーリンク

SQLを勉強していると、目にするのが「JOIN」。
最初に見たとき、「INNER JOIN? LEFT JOIN?なにが違うの……」と戸惑った方、多いのではないでしょうか。

実際、JOINはとても便利な機能なんですが、種類ごとの違いをちゃんと理解していないと、「なんか思った通りにデータが取れないぞ……?」なんてことも起きがちです。

この記事では、INNER JOINとLEFT JOINの違いを、初心者の方にも分かりやすく、図や具体例を交えながら丁寧に解説していきます。
「なるほど、そういうことか!」とスッキリしてもらえるように、ひとつひとつ丁寧に進めていきますので、どうぞ安心して読み進めてくださいね。

JOINの基本:複数テーブルをつなぐ仕組み

まずは、「JOINって何なの?」というところから押さえておきましょう。

データベースでは、情報がいくつかのテーブルに分かれて保存されていることがほとんどです。たとえば、「顧客の情報」は「顧客テーブル」に、「その顧客がした注文」は「注文テーブル」に…といった具合ですね。

このバラバラに管理された情報を、「ある共通のルール」でつなぎ合わせることで、ひとつのまとまったデータとして取り出す。
これが、JOINの役割なんです。

言い換えれば、JOINは「点と点を線で結ぶ」ようなもの。
それぞれのテーブルにある“共通のカラム(列)”を使って、「この顧客はこの注文をしたよ」と関係づけていくんです。

このあとご紹介する INNER JOINLEFT JOIN は、その「つなぎ方」に違いがある、というわけですね。

INNER JOINとは?

では、さっそく「INNER JOIN」から見ていきましょう。

INNER JOINは、「両方のテーブルに共通して存在するデータだけを取り出す」というJOINです。

たとえば、「顧客テーブル」と「注文テーブル」があったとして、注文をしたことがある顧客だけを知りたいとき。
そんなときにINNER JOINを使えば、“顧客情報”と“注文情報”の両方が揃っている行だけを引っ張ってきてくれます。

イメージとしては、2つの円が重なっている部分――その交わっている“重なりゾーン”だけを取り出すような感覚ですね。

実際のSQLはこんな感じ

SELECT 顧客.名前, 注文.注文日
FROM 顧客
INNER JOIN 注文 ON 顧客.ID = 注文.顧客ID;

このクエリでは、注文テーブルに“対応する注文”が存在している顧客だけが結果に含まれます。
つまり、「注文履歴のある顧客一覧」が取得できる、というわけです。

LEFT JOINとは?

次にご紹介するのが「LEFT JOIN」です。
こちらは、INNER JOINとは少し考え方が違います。

LEFT JOINは、「左側のテーブルにあるデータはすべて取得しつつ、右側のテーブルに一致するデータがあれば、それも一緒に取り出す」というJOINです。

つまり、「顧客テーブル」のようなメインとなるデータをすべて取得した上で、その中に「注文テーブル」とつながる情報があれば一緒に表示する、というイメージ。

たとえば、「全顧客の一覧と、もし注文していればその注文日も表示したい」というときには、このLEFT JOINがぴったりです。

実際のSQLはこんな感じ

SELECT 顧客.名前, 注文.注文日
FROM 顧客
LEFT JOIN 注文 ON 顧客.ID = 注文.顧客ID;

このクエリでは、「全顧客」と「その顧客がした注文(もしあれば)」を一度に表示できます。
つまり、「注文の有無にかかわらず、全顧客の情報が見たい」ようなケースで重宝するのが、このLEFT JOINというわけです。

INNER JOINとLEFT JOINの違いを比較

ここまでで、INNER JOINとLEFT JOINの「単体の使い方」はイメージできたかと思います。
では、この2つは具体的にどう違うのか? あらためて比較してみましょう。

比較ポイントINNER JOINLEFT JOIN
結果に含まれる行両方のテーブルに一致するデータのみ左側のテーブルの全データ+一致する右側のデータ
一致しない右側のデータ表示されないNULL として表示される
用途完全にマッチしたデータだけが必要な場合主テーブルのすべての情報を見たい場合(右は任意)

このように、「どのJOINを使うか」で得られる情報が変わってくるんです。
だからこそ、JOINの選び方はとっても重要なんです。

まとめ

SQL ServerにおけるJOINは、複数のテーブルを組み合わせて、より意味のあるデータを取得するための大切な仕組みです。
なかでも INNER JOINLEFT JOIN は、実務でも頻繁に使われる基本のJOIN句。

それぞれの違いをまとめました。

  • INNER JOIN は、両方のテーブルに共通して存在するデータだけを取り出す
     →「一致したデータだけでいい」という場面に最適
  • LEFT JOIN は、左側(主テーブル)の全データを取得しつつ、右側に一致するデータがあれば一緒に取り出す
     →「主データをすべて表示したい。相手がいれば追加したい」というときに活躍

また、LEFT JOINは一致しない右側のデータが NULL として返ってくるため、「足りない情報を検出する」なんて使い方もできます。

JOINの選び方ひとつで、結果がガラッと変わるのがSQLの面白さであり、怖さでもあります。
今回の内容が、JOINの使い分けに悩む方の一助となれば幸いです。

SQL Server
スポンサーリンク
なんくるをフォローする

コメント

タイトルとURLをコピーしました