最終更新日:2026年8月16日
ds data-processing sql
まず結論
LEFT JOINのあとに右テーブルの条件をWHEREへ書くと、NULL行が除外されて左側の行が消えることがあります。
DS検定では、次の切り分けが重要です。
| 条件を書く場所 | 役割 |
|---|---|
ON |
どの行を結合するか決める |
WHERE |
結合後の結果を絞り込む |
LEFT JOINなのに左側の全行が残らない → WHEREの右テーブル条件を確認する
直感的な説明
LEFT JOINは、本来「左の表をすべて残す」結合です。
たとえば、全従業員に進行中プロジェクトを付けたいとします。
- 従業員は全員表示したい
- activeなプロジェクトだけ付けたい
ところが、結合後に WHERE P.status = 'active' と書くと、プロジェクトがない従業員では P.status がNULLになります。
NULLは P.status = 'active' を満たさないため、その行が消えます。
結果として、LEFT JOINなのに「activeなプロジェクトを持つ人だけ」が残ることがあります。
定義・仕組み
WHEREへ条件を書く場合
SELECT E.name, P.project_name
FROM Employees E
LEFT JOIN Projects P
ON E.id = P.employee_id
WHERE P.status = 'active';
初学者向けには、次の順で考えると分かりやすいです。
LEFT JOINで左側の従業員を残す- 結合できない右側はNULLになる
WHERE P.status = 'active'で結合後の行を絞るP.statusがNULLの行は残らない
P.status |
WHERE条件の結果 |
|---|---|
active |
残る |
inactive |
消える |
NULL |
消える |
ONへ条件を書く場合
全従業員を残したまま、activeなプロジェクトだけ結合したい場合は、条件を ON に書きます。
SELECT E.name, P.project_name
FROM Employees E
LEFT JOIN Projects P
ON E.id = P.employee_id
AND P.status = 'active';
この場合は、
- 左側の従業員は全員残る
- activeなプロジェクトだけ結合する
- 該当しなければ右側がNULLになる
という結果になります。
どんな場面で使う?
左側を必ず残したい集計
たとえば、
- 社員一覧に担当案件を付ける
- 全顧客に最新注文情報を付ける
- 全商品に在庫情報を付ける
といった場合です。
右テーブル側の条件をWHEREへ書くと、対応データがない左側の行まで消えることがあるため注意します。
SQLの結果を読み取る問題
DS検定では、
- LEFT JOINとINNER JOINの違い
ONとWHEREの違い- NULLの扱い
を組み合わせた判断問題として考えると整理しやすいです。
よくある誤解・混同
❌ LEFT JOINなら必ず左側は全部残る
LEFT JOIN直後は残りますが、その後のWHEREで消えることがあります。
❌ ONとWHEREはどちらに条件を書いても同じ
違います。
| 構文 | 判断ポイント |
|---|---|
ON |
結合する相手を制限する |
WHERE |
結合後の行そのものを除外する |
❌ NULL = 'active' はfalseとして扱えばよい
SQLのNULL比較は通常の真偽値だけではなくUNKNOWNになります。WHEREではTRUEの行だけが残るため、結果としてNULL行は除外されます。
まとめ(試験直前用)
- LEFT JOINは左側を残す結合
ONは結合条件WHEREは結合後の絞り込み- 右テーブル条件をWHEREへ書くとNULL行が消える
- LEFTなのに全件出ない → WHEREを確認する
対応スキル項目(データエンジニアリング力シート)
- データ基盤
- データベース
- ★ SQLを用いてデータの抽出・結合・集計ができる
- ★ データベースの基本構造と操作(SELECT、JOINなど)を理解している
🔗 関連記事
- バッチ処理とストリーム処理の違いとは?リアルタイム性で切り分ける【DS検定】
- データトランスフォーメーションとは?(非構造化データの変換)【DS検定】
- ビューとは?元の表との違い・SELECT権限・更新可能ビュー【基本情報技術者試験】
- Dockerとは?再現性が出る理由を整理【DS検定】
- ETLとは?(データ統合の基本プロセス)【DS検定リテラシー】