GUIDE
本問題集の使い方
1セットは5問。前提知識 → 問題 → 期待出力 の順に読み、自分で解いてから模範解答と解説を開きます。頭の中で組み立てるだけでも、実際に書いてみても構いません。解説では、クエリの各段階でテーブルがどう変わるかをステップ送りで追えます。
01学習の流れ
- STEP 01テーマを選ぶ順序に迷うときは TOP の学習コースに沿って進めます。
- STEP 025問を解く設問ごとに前提知識と使用テーブルが付くので、解くための材料はページ内で揃います。
- STEP 03解説で確かめる模範解答のコメントと、テーブル変化の可視化で、なぜその結果になるかを確認します。
- STEP 04記録が貯まる「解けた」「復習する」を押すと、TOPの一覧・コース・テーマ別の進捗に反映されます。
02一覧の読み方
TOPはテーマごとの見出しと、セットの行で構成されます。行は左から「巻-分冊 / タイトル / レベル / 進捗」です。
01
テーマ見出し
テーマ名・セット数と、そのテーマの進み具合。
JOIN8 セット・各5問
02
レベルと進捗
行の右端は「解けた」を押した設問数。5問すべてで青く点灯します。その左は基礎/応用の別。
03
巻-分冊
1-1は第1巻の前半5問、1-2が後半。基礎→応用の順に並びます。
03問題画面の読み方
以下は実際の問題画面です。アコーディオンの開閉とステップ送りは、この場で操作できます。
例: JOIN 基礎 1-1
01
セット内の5問
上段は現在地と完了数。タブで5問を行き来し、解けた問題には✓、復習マークにはしおり記号が付きます。下の細いバーがセットの進み具合です。
1 / 5 · 学習中0 / 5 問完了
QUESTION 1
INNER JOIN — 共通キーで2テーブルを結合し、両方に存在する行だけを取得する
02
設問の見出し
「何を学ぶか」を1行で示すタイトルと、キーワードのタグ。
03
前提知識
解くのに必要な文法・構文をここで確認します。構文の型と注意点は必ず設問の直前に置いています。
前提知識
▼
JOIN とは、共通のキー列(例: user_id)をもとに2つのテーブルを横方向に結合する操作です。正規化されたDBでは「ユーザー情報は users テーブル」「注文情報は orders テーブル」と分割して保存するため、関連データを一緒に取得するには JOIN が必要です。
INNER JOIN は最もシンプルなJOINで、ON句で指定したキーが両テーブルに存在する行のみを結果に含めます。片方のテーブルにしかないキーの行は除外されます(積集合)。
SELECT 列名, ... FROM 左テーブル AS エイリアス INNER JOIN 右テーブル AS エイリアス ON 左テーブル.キー列 = 右テーブル.キー列;
テーブルエイリアス(AS o / AS u):
AS o のように短縮名を付けると o.user_id と書け、「ordersテーブルの user_id」と明示できます。特に同名の列が複数テーブルにある場合はエイリアス修飾が必須です。
問題
▼
orders(注文)テーブルと users(ユーザー)テーブルを user_id で結合し、order_id・ユーザー名(name)・amount(注文金額)を取得してください。
※ orders の user_id = 4 は users テーブルに存在しません。また users の user_id = 3(山田)は注文がありません。
使用テーブル
▸ orders
| order_id | user_id | amount |
|---|---|---|
| 1 | 1 | 3000 |
| 2 | 2 | 5000 |
| 3 | 4 | 1200 |
▸ users
| user_id | name |
|---|---|
| 1 | 田中 |
| 2 | 佐藤 |
| 3 | 山田 |
04
問題と使用テーブル
入力データは実際の表で示します。この表と期待出力の差分が、求めるSQLです。
05
期待出力
目指す結果。自分の答えと1行ずつ突き合わせます。
期待出力
▼
| order_id | name | amount |
|---|---|---|
| 1 | 田中 | 3000 |
| 2 | 佐藤 | 5000 |
模範解答コード
▼
SELECT o.order_id, u.name, -- u. プレフィックスで「usersテーブルのname」と明示する o.amount FROM orders AS o -- orders を起点(左テーブル)にする INNER JOIN users AS u -- users と結合(右テーブル) ON o.user_id = u.user_id -- 照合キー: 両テーブルの user_id が一致する行のみ結合 ORDER BY o.order_id; /* 実行順序: 1. FROM orders AS o → orders テーブル 2. INNER JOIN users AS u → orders の各行に対し ON 条件を満たす users の行を照合・結合 3. SELECT o.order_id, ... → 結合された仮想テーブル */
06
模範解答コード
自分で解いてから開きます。各句の意図と実行順序をコメントで補います。
07
テーブル変化の可視化
ステップを送ると、どの行・列が評価され、何が残り何が落ちるかが色で分かります。← → キーでも送れます。
解説(テーブル変化・ポイント)
▼
LEGEND
データ取得・読込対象
① FROM
FROM orders AS oorders テーブル(3行)を読み込みます。user_id 列が JOIN のキーになります。この後、各行に対して users テーブルとの照合が行われます。
1 / 3
| order_id | user_id | amount |
|---|---|---|
| 1 | 1 | 3000 |
| 2 | 2 | 5000 |
| 3 | 4 | 1200 |
全 3行 読込
実際のページでは、この下に図解つきのポイント解説が続きます。
08
解けた・復習する
押すと記録され、タブの✓・しおり記号・セットのバー・TOPの進捗が同時に動きます。
この図はスクリーンショットではなく、問題ページと同じHTML・同じCSSで組み立てています。ここでの操作は学習記録として保存されません。
04記録と復習
- 自動保存マークはブラウザに保存されます。ログインなしでも使えます。
- 端末をまたぐログインすると記録がアカウントに同期され、別の端末でも続きから読めます。
- 復習に絞るTOPの「復習」チップ(しおり記号)で、復習マークを付けたセットだけを表示できます。