SQLを勉強していると、目にするのが「JOIN」。
最初に見たとき、「INNER JOIN? LEFT JOIN?なにが違うの……」と戸惑った方、多いのではないでしょうか。
実際、JOINはとても便利な機能なんですが、種類ごとの違いをちゃんと理解していないと、「なんか思った通りにデータが取れないぞ……?」なんてことも起きがちです。
この記事では、INNER JOINとLEFT JOINの違いを、初心者の方にも分かりやすく、図や具体例を交えながら丁寧に解説していきます。
「なるほど、そういうことか!」とスッキリしてもらえるように、ひとつひとつ丁寧に進めていきますので、どうぞ安心して読み進めてくださいね。
JOINの基本:複数テーブルをつなぐ仕組み
まずは、「JOINって何なの?」というところから押さえておきましょう。
データベースでは、情報がいくつかのテーブルに分かれて保存されていることがほとんどです。たとえば、「顧客の情報」は「顧客テーブル」に、「その顧客がした注文」は「注文テーブル」に…といった具合ですね。
このバラバラに管理された情報を、「ある共通のルール」でつなぎ合わせることで、ひとつのまとまったデータとして取り出す。
これが、JOINの役割なんです。
言い換えれば、JOINは「点と点を線で結ぶ」ようなもの。
それぞれのテーブルにある“共通のカラム(列)”を使って、「この顧客はこの注文をしたよ」と関係づけていくんです。
このあとご紹介する INNER JOIN や LEFT 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 JOIN | LEFT JOIN |
---|---|---|
結果に含まれる行 | 両方のテーブルに一致するデータのみ | 左側のテーブルの全データ+一致する右側のデータ |
一致しない右側のデータ | 表示されない | NULL として表示される |
用途 | 完全にマッチしたデータだけが必要な場合 | 主テーブルのすべての情報を見たい場合(右は任意) |
このように、「どのJOINを使うか」で得られる情報が変わってくるんです。
だからこそ、JOINの選び方はとっても重要なんです。
まとめ
SQL ServerにおけるJOINは、複数のテーブルを組み合わせて、より意味のあるデータを取得するための大切な仕組みです。
なかでも INNER JOIN と LEFT JOIN は、実務でも頻繁に使われる基本のJOIN句。
それぞれの違いをまとめました。
また、LEFT JOINは一致しない右側のデータが NULL
として返ってくるため、「足りない情報を検出する」なんて使い方もできます。
JOINの選び方ひとつで、結果がガラッと変わるのがSQLの面白さであり、怖さでもあります。
今回の内容が、JOINの使い分けに悩む方の一助となれば幸いです。
コメント