Day 2 - 本日のサマリー: データを「変える・つなぐ・設計する」一日
概要
- 日程: Day 2
- 本日のゴール: データの追加・更新・削除、結合・サブクエリを使って現実のビジネス課題に答えるSQLを書ける/自分でテーブル設計を一つ完成させる/確認テストで現在の到達度を把握する
- 対応する到達目標: No.4(INSERT/UPDATE/DELETE)、No.5(JOIN)、No.6(テーブル設計)、No.7(インデックス)、No.8(トランザクション)、No.9(サブクエリ・ビュー)
- 本日の成果物: 自分で設計・作成したテーブル定義1セット(courses, enrollments)、結合・サブクエリを含む実践クエリ集、確認テスト15問の自己採点結果
🧭 今日の航海図(なぜ・なにを・どこへ)
昨日は「読む」一日でした。今日はその上に「変える(DML)」「つなぐ(JOIN)」「設計する(CREATE TABLE)」を積みます。読みだけでは現場の問いの半分にしか答えられません。たとえば「顧客と注文と商品をつないだ売上分析」「テスト用の社員データを安全に追加・削除」「自部署のための研修管理テーブルを新規設計」——どれもDay2の道具がないと書けません。最後は確認テストで「今の自分が何を答えられて、何でつまずくか」を可視化し、復習で穴を埋めて締めくくります。
⏱ 今日の流れ
| 時間 | セッション | 形式 | このセッションで手に入るもの |
|---|---|---|---|
| 9:00-9:30 | S01 INSERT/UPDATE/DELETE | 座学 | DML 3文の構文と「WHERE忘れ」の怖さ |
| 9:30-10:15 | S02 データ操作演習 | 実習 | BEGIN/ROLLBACKで安全にデータを変える体験 |
| 10:15-10:25 | 休憩 | ||
| 10:25-10:55 | S03 テーブル結合の基礎 | 座学 | INNER JOINとLEFT JOINの使い分け基準 |
| 10:55-11:40 | S04 JOIN演習 | 実習 | 3テーブル以上をつなぐ結合SQL3本 |
| 11:40-12:00 | S05 NULL値とCASE式 | 座学 | NULLの扱いとCASE WHENの基本 |
| 12:00-13:00 | 昼休憩 | ||
| 13:00-13:30 | S06 NULL・CASE演習 | 実習 | 給与ランク分類・NULL代替表示の経験 |
| 13:30-14:00 | S07 サブクエリとビュー | 座学 | スカラー/インライン/EXISTSとビューの概念 |
| 14:00-14:30 | S08 サブクエリ・ビュー演習 | 実習 | 「平均より高い社員」のクエリと自作ビュー |
| 14:30-14:40 | 休憩 | ||
| 14:40-15:10 | S09 テーブル設計と制約 | 座学 | 5つの制約と命名規則 |
| 15:10-15:40 | S10 テーブル作成演習 | 実習 | courses, enrollments を自分で設計・作成 |
| 15:40-16:00 | S11 インデックスとトランザクション | 座学 | 索引のたとえとACIDの全体像 |
| 16:00-16:10 | 休憩 | ||
| 16:10-16:40 | S12 確認テスト | 演習 | 全15問の自己採点結果 |
| 16:40-17:00 | S13 復習&研修まとめ | 演習 | 弱点の言語化と研修後の学習計画 |
午前は「変える+つなぐ」、午後前半は「条件分岐とサブクエリ」、午後後半は「設計+速さ・安全」、最後の50分が確認テストと復習。盛りだくさんですが、昨日積んだ「読む力」が全てのセッションで土台になります。
🎯 今日の成果物
夕方に手元にある成果物のイメージ:
- 自分で設計・実装した2テーブル(社員研修管理を例に)
CREATE TABLE courses (
course_id SERIAL PRIMARY KEY,
course_name VARCHAR(100) NOT NULL,
duration_hours INTEGER CHECK (duration_hours > 0)
);
CREATE TABLE enrollments (
enrollment_id SERIAL PRIMARY KEY,
employee_id INTEGER REFERENCES employees(employee_id),
course_id INTEGER REFERENCES courses(course_id),
completed_at TIMESTAMP
);
- 顧客・注文・商品をJOINした実用的なクエリ集
- 「平均給与より高い社員」を出すサブクエリ/部署別平均給与の自作ビュー
- 確認テスト15問の自己採点結果と、間違えた3問の自分なりの解説メモ
⚠️ 今日のつまずきポイント
今日特にハマる場所を、予告として共有します。詰まっても普通——むしろ「ここで詰まらないと身につかない」ところです。
- WHERE忘れ事故:DMLで最も怖い。
UPDATE/DELETEを書くときは、まずSELECT * FROM ... WHERE ...で対象を確認してから、SELECTの部分を書き換えるクセを(S01, S02) - LEFT JOINしたのにNULL行が消える:右側テーブルの列をWHEREで絞ると事実上INNER化する。フィルタは
ON句に入れる(S03, S04) - インラインサブクエリにAS忘れ:FROMの中のサブクエリには必ずエイリアスが必要(PostgreSQLの仕様)(S07, S08)
- 外部キー違反エラー:先に親テーブルにデータを入れてから子にINSERT(S09, S10)
- トランザクション中エラー後の "current transaction is aborted":
ROLLBACK;を打てば即リセットできる(S02, S11)
確認テストでもこの辺りが多く出ます。今日学んだ直後にテストで間違えるのは、むしろ理想の学習サイクルです。
🤖 今日のAIの使いどころ
昨日の「まず自分で書く → 詰まったところだけ聞く」を今日も継続します。今日特に有効なAIの使い方:
- 危険操作の事前確認:「UPDATE employees SET salary = salary * 1.1 WHERE department_id = 1; を実行する前に、影響範囲と注意点を教えて」
- JOINの設計相談:「customers と orders と order_items と products をつないで、顧客ごとの累計購入額を出したい。SQLの骨組みを教えて(私が肉付けする)」
- エラーメッセージ翻訳:エラーをそのままコピペして「これ何?どう直す?」と聞く——確認テスト中も含めて、これが最速
確認テスト中は、まず自分で15分は粘ってください。AIに頼るのは採点後の解説で十分です。「間違えたところ」が、明日からの財産になります。