問題 1
ordersとusersをJOINして、注文ID・ユーザー名・注文日・ステータスを取得してください
📖 解説参考資料
JOINとは?
複数のテーブルを関連するカラムで結合してデータを取得します。現実のデータは複数テーブルに分散して格納されているため、JOINは実務で最も頻繁に使うSQL構文の一つです。
▼ INNER JOIN vs LEFT JOIN の違い
INNER JOIN(内部結合)
両方に一致する行のみ
LEFT JOIN(左外部結合)
左テーブル全件+一致する右行
INNER JOIN(内部結合)
両方のテーブルに一致するデータのみを取得します。注文のないユーザーは結果に含まれません。
SELECT o.id, u.name, o.order_date, o.status
FROM orders o
INNER JOIN users u ON o.user_id = u.id;
LEFT JOIN(左外部結合)
左テーブルの全データ+右テーブルの一致データを取得。一致しない場合はNULLになります。「注文したことがないユーザーも含めて全員表示したい」ときに使います。
SELECT u.name, o.order_date
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;
⚠️ よくあるミス:ON条件の書き間違い
ON o.user_id = u.id を ON o.id = u.id などと間違えると、全行×全行のカルテシアン積(意図しない大量データ)が返ってきます。JOINのON条件は「どのカラムで繋ぐか」を正確に確認しましょう。
テーブルエイリアス(別名)
テーブル名の後ろに短い別名をつけるとSQLが読みやすくなります。INNER JOIN は JOIN と省略できます。
SELECT o.id, u.name, o.status
FROM orders o
JOIN users u ON o.user_id = u.id
ORDER BY o.order_date;
3テーブルのJOIN
JOINは連鎖させることができます。「誰が・何を・何個」購入したかを1クエリで取得できます。
SELECT u.name, p.name AS product, op.quantity
FROM orders o
JOIN users u ON o.user_id = u.id
JOIN order_products op ON o.id = op.order_id
JOIN products p ON op.product_id = p.id;
💼 実務での使いどころ
ECサイトの管理画面では「注文一覧にユーザー名と商品名を表示する」のような画面が必ずあります。これはorders・users・productsを結合して実現します。JOINを使いこなせると、アプリ開発でできることが一気に広がります。
ECサイトの管理画面では「注文一覧にユーザー名と商品名を表示する」のような画面が必ずあります。これはorders・users・productsを結合して実現します。JOINを使いこなせると、アプリ開発でできることが一気に広がります。