XEROTTA

新入社員の学び / IT初級者 / 講座11

IT FOUNDATION / COURSE 11

データベースとSQL

顧客・商品・注文を別の表へ設計し、整合性を保ちながら登録・検索・結合・集計を行う。

アニメと具体例手順付き演習成果物とレビュー解説付き確認問題

まずは、図でつかもう

1 / 4

表・表同士の関係・SQL・データの整合性という、四つの学習ポイントです。矢印は読む順番を示します。

01 / IT FOUNDATION

この講座で、何をできるようにするか。

顧客・商品・注文を別の表へ設計し、整合性を保ちながら登録・検索・結合・集計を行う。

目安24時間。説明・調査・演習・成果物作成・レビューを含む学習計画です。本文を読むだけでこの時間の実習を完了したことにはなりません。進み方と経験に応じて調整します。

学習目標と確認ポイント詳しく見る
  • テーブル・型・キーを説明し、ER図と項目定義を作る。
  • 正規化と更新の矛盾を説明し、正規化の前後比較を作る。
  • SELECT・WHERE・ORDER BYを説明し、検索SQLと期待結果を作る。
  • JOIN・集計・重複を説明し、集計SQLと検算表を作る。
  • 更新・トランザクションを説明し、更新・取消の記録を作る。
  • インデックスと安全な入力を説明し、性能比較と安全なSQL例を作る。
開始前の準備

ブラウザーで本文・アニメ・問題を確認できます。実機演習は会社が用意した学習環境を使い、Python・Linux・Git・DB等の準備状況を確認してから進めます。

演習ファイルを先に準備する

Python・SQL・ログ・架空パケット表・テスト・APIのスターターと説明書を同梱しています。APIは認証・認可等を受講者が追加する未完成の学習用で、公開用完成品ではありません。

共通演習キットをダウンロード
データベースとSQLの学習内容を表した仕組みのイメージ図

02 / IT FOUNDATION

仕組みを理解し、手を動かして確かめる。

1. テーブル・型・キー2. 正規化と更新の矛盾3. SELECT・WHERE・ORDER BY4. JOIN・集計・重複5. 更新・トランザクション6. インデックスと安全な入力

テーブル・型・キー

詳しく見る

学習ブロック 1 / 目安4時間(説明・調査・演習・記録・レビュー)

テーブルは行と列でデータを表します。主キーは行を識別し、外部キーは別表との関係を表します。NULLは値がない状態等を表し、空文字や0と同一ではありません。DB製品によって型や制約の扱いが違うため、使う製品で確かめます。

具体例と実習手順

customers、products、orders、order_itemsを紙に描き、主キーと参照先を付ける。

残す成果物:ER図と項目定義

前提・操作・観察結果・理由・未確認を分けて残します。手順を他の人に説明し、同じ入力で同じ結果になるか確認してください。

正規化と更新の矛盾

詳しく見る

学習ブロック 2 / 目安4時間(説明・調査・演習・記録・レビュー)

顧客名を注文の各行へ重複させると、変更時に一部だけ古い値を残す問題が起きます。事実の持ち場所を分け、必要なとき結合する設計を考えます。一方、注文時点の価格等、履歴として残すべき情報は現在値と区別します。

具体例と実習手順

商品マスターの価格と注文明細の購入単価を分け、どちらを変更しても過去の注文が変わらない設計にする。

残す成果物:正規化の前後比較

前提・操作・観察結果・理由・未確認を分けて残します。手順を他の人に説明し、同じ入力で同じ結果になるか確認してください。

SELECT・WHERE・ORDER BY

詳しく見る

学習ブロック 3 / 目安4時間(説明・調査・演習・記録・レビュー)

SELECTで必要な列を取得し、WHEREで条件、ORDER BYで並びを指定します。条件なしの取得と条件付きの取得、NULLの比較、境界の日付などを区別します。SQLの結果に順番が必要なら、明示して確認します。

具体例と実習手順

同梱のSQL演習で特定顧客の注文を検索し、日付と金額の条件を変えて件数を照合する。

残す成果物:検索SQLと期待結果

前提・操作・観察結果・理由・未確認を分けて残します。手順を他の人に説明し、同じ入力で同じ結果になるか確認してください。

JOIN・集計・重複

詳しく見る

学習ブロック 4 / 目安4時間(説明・調査・演習・記録・レビュー)

JOINはキーに基づいて表をつなぎます。一対多の結合で行が増えることを考えず金額をSUMすると、二重集計になる場合があります。COUNT、SUM、GROUP BYと、どの単位で一行にしたいかを合わせます。

具体例と実習手順

顧客別の注文合計を作り、件数と単価×数量を手計算でも検証する。注文なし顧客も必要かを決める。

残す成果物:集計SQLと検算表

前提・操作・観察結果・理由・未確認を分けて残します。手順を他の人に説明し、同じ入力で同じ結果になるか確認してください。

更新・トランザクション

詳しく見る

学習ブロック 5 / 目安4時間(説明・調査・演習・記録・レビュー)

INSERT、UPDATE、DELETEはデータを変えます。条件をSELECTで先に確認し、関連する更新をトランザクションとしてまとめます。途中の失敗時に一部だけ確定すると、注文と在庫等が食い違う場合があります。

具体例と実習手順

メモリー上の演習DBでBEGIN、更新、ROLLBACKを試し、取り消し後の値を確認する。別にCOMMITの結果も比べる。

残す成果物:更新・取消の記録

前提・操作・観察結果・理由・未確認を分けて残します。手順を他の人に説明し、同じ入力で同じ結果になるか確認してください。

インデックスと安全な入力

詳しく見る

学習ブロック 6 / 目安4時間(説明・調査・演習・記録・レビュー)

インデックスは検索を助けますが、保存容量や更新時の負荷もあります。遅いSQLは条件、件数、実行計画等を見て確認します。入力値を文字列連結でSQLへ埋め込まず、プレースホルダーを利用します。

具体例と実習手順

EXPLAIN QUERY PLANで索引前後を比べ、Pythonの?プレースホルダーで入力値を渡す。

残す成果物:性能比較と安全なSQL例

前提・操作・観察結果・理由・未確認を分けて残します。手順を他の人に説明し、同じ入力で同じ結果になるか確認してください。

SQLを読み、実行結果を検算する

python3 sql_lab.py
期待:Customer A=1600、Customer B=900、TOTAL=2500
ROLLBACK price: 500
RESTORED order rows: 2

SELECT c.name, SUM(i.quantity * i.unit_price)
FROM customers c
JOIN orders o ON o.customer_id = c.id
JOIN order_items i ON i.order_id = o.id
GROUP BY c.id, c.name
ORDER BY c.id;

課題:注文なし顧客も表示する場合、結合とNULLの扱いをどう変えるか。
索引の前後はEXPLAIN QUERY PLANで観察する。

03 / IT FOUNDATION

仕事のアニメ:データベースとSQLを考える。

新人・アオイさんと先輩・ミナトさんの会話で、「データベースとSQL」を学びます。最初の場面は「テーブルは行と列でデータを表します。」。何を確かめ、どう対応するかを順に見ていきましょう。

テーブル・型・キー1 / 6
アオイ

テーブルは行と列でデータを表します。

学習ポイント:ER図と項目定義

約12秒ごとに場面が切り替わります。再生中も一時停止でき、「前へ」「次へ」で自分のペースで読めます。最終場面で停止します。

アニメの内容をまとめて文章で読む

1. テーブル・型・キー

アオイ:テーブルは行と列でデータを表します。

学習ポイント:ER図と項目定義

2. 正規化と更新の矛盾

ミナト:顧客名を注文の各行へ重複させると、変更時に一部だけ古い値を残す問題が起きます。

学習ポイント:正規化の前後比較

3. SELECT・WHERE・ORDER BY

アオイ:SELECTで必要な列を取得し、WHEREで条件、ORDER BYで並びを指定します。

学習ポイント:検索SQLと期待結果

4. JOIN・集計・重複

ミナト:JOINはキーに基づいて表をつなぎます。

学習ポイント:集計SQLと検算表

5. 更新・トランザクション

アオイ:INSERT、UPDATE、DELETEはデータを変えます。

学習ポイント:更新・取消の記録

6. インデックスと安全な入力

ミナト:インデックスは検索を助けますが、保存容量や更新時の負荷もあります。

学習ポイント:性能比較と安全なSQL例

04 / IT FOUNDATION

演習を完成させ、成果物をレビューする。

演習1

4表を設計し、同梱のSQLite演習へデータを登録する。

  1. 対象・環境・入力データ・期待結果を記録する。
  2. 上の解説と各ブロックの実習手順を使って作業する。
  3. 結果を期待と比較し、違いがあれば条件を一つずつ確かめる。
  4. 成果物・再現手順・分かったこと・未確認を残してレビューする。

演習2

顧客・商品・注文を結合して集計し、合計2,500円を検算する。

  1. 対象・環境・入力データ・期待結果を記録する。
  2. 上の解説と各ブロックの実習手順を使って作業する。
  3. 結果を期待と比較し、違いがあれば条件を一つずつ確かめる。
  4. 成果物・再現手順・分かったこと・未確認を残してレビューする。

演習3

更新を取り消すトランザクションと、制約違反の扱いを記録する。

  1. 対象・環境・入力データ・期待結果を記録する。
  2. 上の解説と各ブロックの実習手順を使って作業する。
  3. 結果を期待と比較し、違いがあれば条件を一つずつ確かめる。
  4. 成果物・再現手順・分かったこと・未確認を残してレビューする。
レビューで確かめること

正しい用語で説明できるか/入力と結果が対応しているか/正常だけでなく失敗する条件も扱ったか/他の人が再現できるか/残る課題を隠していないか。

05 / IT FOUNDATION

確認問題:答えより、理由を説明する。

全5問。選ぶと解説が表示されます。何度でも選び直せます。

回答済み 0 / 5問

06 / IT FOUNDATION

成果物を残し、理解と未確認を分ける。

架空データを使い、根拠と結果を自分の言葉でまとめます。回答とメモは自動保存・外部送信しません。残したい内容はコピーするか、成果物ファイルへ記入してください。

07 / IT FOUNDATION

説明・実装・記録を、一つの成果へつなげる。

顧客・商品・注文を別の表へ設計し、整合性を保ちながら登録・検索・結合・集計を行う。

  • ER図と項目定義
  • 正規化の前後比較
  • 検索SQLと期待結果
  • 集計SQLと検算表
  • 更新・取消の記録
  • 性能比較と安全なSQL例

08 / IT FOUNDATION

公式資料・確認先