Programmingバックエンド開発者

INNER JOINとOUTER JOIN(LEFT、RIGHT、FULL OUTER JOIN)の違いをSQLで説明し、さまざまなデータ操作シナリオで適切な接続タイプをどのように選択するかを説明してください。それぞれのJOINの正しい使用例を示してください。

Hintsage AIアシスタントで面接を突破

答え

INNER JOINは、指定された条件に基づいて結合された両方のテーブルで一致が見つかったレコードのみを返します。OUTER JOIN(LEFT、RIGHT、FULL)を使用すると、結果には、一方または両方のテーブルからすべての行が含まれ、他方のテーブルに一致がなくても含まれます。

  • LEFT OUTER JOIN: 左テーブルのすべての行 + 右テーブルからの一致があれば(なければNULL)。
  • RIGHT OUTER JOIN: 右テーブルのすべての行 + 左テーブルからの一致があれば(なければNULL)。
  • FULL OUTER JOIN: 両方のテーブルからのすべての行が含まれ、一致がない場合は反対の値がNULLになります。

どのJOINを使用するか:

  • INNER JOINは、一致している行のみが必要な場合に使用します。
  • LEFT JOINは、一致がない場合でも左テーブルのすべての行が重要な場合に使用します。
  • RIGHT JOINは、右テーブルに対して同様です。
  • FULL OUTER JOINは、完全な結合リストであり(一致がない場合の検索に役立ちます)。

例:

-- INNER JOIN SELECT u.id, u.name, o.amount FROM users u INNER JOIN orders o ON u.id = o.user_id; -- LEFT OUTER JOIN SELECT u.id, u.name, o.amount FROM users u LEFT JOIN orders o ON u.id = o.user_id; -- FULL OUTER JOIN SELECT u.id, o.order_id FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;

トリビア質問

右テーブルが空の場合、LEFT JOINはどのような結果を返しますか?

よくある答え: "LEFT JOINは一致がないため空の結果を返す"。正解: LEFT JOINは、左テーブルのすべての行を常に返し、右テーブルの列はNULLになります

例:

-- usersテーブルにレコードがあり、ordersは空 SELECT u.id, u.name, o.amount FROM users u LEFT JOIN orders o ON u.id=o.user_id; -- 結果: すべてのユーザー、o.amount = NULL

このトピックの詳細を知らないことから生じる実際のエラーの例


物語

販売分析プロジェクト。顧客とその注文の完全なリストを出力するためにINNER JOINを使用し、注文のない顧客をスキップしました。その結果、レポートから "重要な" 顧客が失われました。解決法: LEFT JOINを使用する。


物語

従業員と部門の管理プラットフォーム。LEFT JOINの代わりにRIGHT JOINを使用したため、新しい部門を追加する際に混乱が生じ、一部の従業員がレポートに表示されなくなりました。理由: 結合の順序が逆になっていました。


物語

データスキーマの移行。変更後、一つのJOINが結合条件の誤記によりCROSS JOINに変わりました。その結果、選択されるデータ量が急増し、データが "膨張" しました。結論: 結合時には常にONを指定し、JOINのタイプを慎重に確認してください。