MENU

joinとleft joinの違いは?名簿でスッキリわかる使い分け

当ページのリンクには広告が含まれています。
join left join 違い

SQLを勉強していて、テーブルを結合する段階に入ると、誰もが一度は混乱しますよね。

特に、ただのjoinとleft joinの使い分けは、テキストの難しい図を見ても今ひとつピンとこないものです。

どっちを使えば自分の欲しいデータが消えずに正しく抜けるのか、不安になりながらクエリを書いていませんか。

この記事では、そんなモヤモヤをすっきり解消するために、身近な「クラス名簿」を例にして、どこよりも直感的に違いを解説します。

目次

SQL初心者がつまずくjoinとleft joinの違いとは

2つの結合で決定的に異なるデータの残り方

SQLでデータを結合するとき、一番大切なのは「結合した後に、元のデータが消えてしまうかどうか」という点です。

実は、ただのjoinとleft joinの最大の違いは、左右のテーブルで一致しないデータがあったときの処理方法にあります。

まずは、それぞれの特徴をシンプルに整理した以下の表を見てみましょう。

結合の種類 正式名称 データの抽出ルール 一致しないデータの扱い
join INNER JOIN(内部結合) 両方のテーブルに存在するデータのみを合体させる どちらか一方にしかないデータは結果から消滅する
left join LEFT OUTER JOIN(左外部結合) 左側のテーブルにあるデータをすべて残したまま合体させる 右側にデータがなければ「NULL(空っぽ)」として残る

このように、joinは互いに共通するデータだけを厳選して残すのに対し、left joinは左側のテーブルを主役にして、右側のデータを付け足すイメージです。

これだけではまだイメージが湧きにくいかもしれないので、次は具体的な例を使って頭の中を整理していきましょう。

クラス名簿でイメージする!joinとleft joinの直感的な違い

基準となる2つの名簿を用意する

ここでは、学校のクラスをイメージしてみてください。

手元に、クラス全員が載っている「クラス名簿」と、部活動に入っている人だけが載っている「部活名簿」の2つがあるとします。

テーブルA(左側):クラス名簿
・出席番号1番:佐藤さん
・出席番号2番:鈴木さん
・出席番号3番:高橋さん
テーブルB(右側):部活名簿
・出席番号1番:サッカー部
・出席番号3番:吹奏楽部
(鈴木さんは部活に入っていません)

この2つの名簿を結合するとき、joinとleft joinで結果がどう変わるかを見てみましょう。

joinは両方に載っている人だけを抜き出す

joinを使って2つの名簿を合体させると、「クラス名簿にも、部活名簿にも、両方に名前がある人」だけが残ります。

結合した結果は、以下のようになります。

  • 佐藤さん:サッカー部
  • 高橋さん:吹奏楽部

部活に入っていない鈴木さんは、部活名簿に存在しないため、結合した結果から完全に消えてしまいます。

このように、条件に一致するデータだけを厳格に抜き出すのがjoinの仕事です。

left joinは左側のクラス名簿全員を基準に抜き出す

一方で、left joinを使って結合すると、左側にある「クラス名簿」の全員が主役になります。

部活に入っているかどうかにかかわらず、クラス名簿に載っている全員をまず書き出します。

その上で、部活名簿に情報がある人には部活名を書き足し、情報がない人には空欄として残すイメージです。

結合した結果は、以下のようになります。

  • 佐藤さん:サッカー部
  • 鈴木さん:NULL(未所属)
  • 高橋さん:吹奏楽部

鈴木さんの名前は消されることなく、しっかりとリストに残っていますね。

このように、主役となるテーブルのデータを1件も漏らさずに残したいときに使うのがleft joinです。

どっちを使うべき?実務での使い分け基準と初心者がやりがちな失敗

実務での使い分けを判断するシンプルな基準

日々の業務でどちらの結合を使うか迷ったときは、以下の問いかけを自分にしてみてください。

「データが存在しない行を、システム画面やレポートから消してしまってもいいか?」

この問いに対する答えによって、使うべきクエリは自然と決まります。

joinを使うべき場面:
・売上が発生している注文データだけを抽出したいとき
・会員登録が完了しているアクティブなユーザーだけをリストアップしたいとき
left joinを使うべき場面:
・今月まだ買い物を実施していない人も含めて、会員全員の購入金額リストを作りたいとき
・商品マスタにある全商品を表示し、売れていない商品は売上0として出力したいとき

初心者が陥りやすいデータ消失の罠

SQLを書き慣れていない時期に最も多いミスが、本当はleft joinを使うべきところで、無意識にjoinを書いてしまうことです。

例えば、全商品の在庫リストを作ろうとしたとき、joinを使ってしまうと「まだ一度も出荷履歴がない新商品」がリストから丸ごと消えてしまいます。

出荷されていないだけで倉庫には在庫があるはずなのに、システム上の出荷データが存在しないために、商品そのものが画面に表示されなくなってしまうのです。

データを抽出するときは、「消えて困るデータが左側のテーブルに眠っていないか」を常に意識する癖をつけておくと、こうした手痛いミスを防ぐことができます。

迷わずデータを抜き出せるようになったあなたへ

ここまで、名簿の例えを通して2つの結合の違いを見てきました。

joinとleft joinの性質を一度体感してしまえば、データの行方を見失うことはもうありません。

まずは手元の環境で、ごく簡単な数行のテストデータを使い、2つの結合をそれぞれ実行して結果を眺めてみてください。

実際に自分の目で、データが残る様子と消える様子を確認することが、何よりも早く記述を体得できる近道になります。

今回は2つのテーブルを繋ぐ基本をお伝えしましたが、実務が進むと、3つ以上のテーブルを同時に結合したいけれどどう書けばいいのだろう、という疑問が必ず湧いてきます。

そんな複雑な複数テーブルの結合を整理して美しく書くコツについては、こちらの記事で分かりやすく手順を解説していますので、あわせて参考にしてください。

よかったらシェアしてね!
  • URLをコピーしました!
目次