クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

表計算の表をデータベースへ

このレッスンのあとで: 表計算の表を、列の型を決めたデータベースの表に移すことができる。

45分のレッスンコマンド7件MySQL と phpMyAdmin のラボ:ショップのデータベースで SQL を練習する

部活の会費表が重くなった

写真部の会費表を、表計算ソフトで管理しています。部員が増えて、行が300を超えました。

誰が払ったかを探すたびに、画面をスクロールします。同じ名前の人が2回入っていても、気づけません。データを表計算からデータベースの表に移すと、探すのも守るのも楽になります。

このレッスンのゴール

メモ

表計算の表を、列の型を決めたデータベースの表に移すことができる。

キーワード

ことばいみれい
データベースデータを決まった形でしまっておく仕組み
表(テーブル)行と列でできた、データの入れ物members
列同じ種類の値を縦に並べたものfee
行(レコード)1人や1件ぶんの値の組
データ型列に入れてよい値の種類INTEGER
主キー行を1つずつ区別する列

学生が入力するセルは、このプレビューでは空白です。

表計算の表とデータベースの表は似ている

表計算の1枚のシートは、データベースの1つの表にあたります。見出しの行が列の名前になり、その下の1行ずつが行になります。

大きなちがいは、データベースでは列ごとに入れてよい値を決められることです。決まりを破る値は、入れる前に断られます。

例: 表計算とデータベースの対応

表計算データベース会費表の例
シート表(テーブル)members
見出しのセル列の名前name、fee
データの1行行(レコード)青井、2年、3000円
セルの書式データ型fee は INTEGER
行の番号主キーid

学生が入力するセルは、このプレビューでは空白です。

始める前に

メモ

上のバーの Start the lab を押し、マシンが動き出すまで待ってください。Run ボタンは、コマンドをマシンのターミナルに入力します。このラボには、練習用のお店のデータベースが入っています。

まず、既にある表を眺める

ラボの MySQL には、お店の shop というデータベースがあります。本物の現場でも、まず中にどんな表があるかを見ます。

最初の2行は準備です。3つ目で、表の名前を一覧にします。8つの表の名前が並びます。

証明書を受け入れる設定

コマンド
printf '[client]\nssl-verify-server-cert=0\n' > ~/.my.cnf

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

短い名前を付ける

コマンド
alias sql='mariadb -h db -u student -pstudent shop -t -e'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

お店の表を一覧にする

コマンド
sql "SHOW TABLES"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

列には型を決める

表計算では、セルに何でも入ります。「3000」も「3000円」も「三千」も入れられます。

データベースでは、列ごとに型を決めます。整数なら INTEGER、文字なら TEXT、日付なら DATE です。会費を数の列にしておけば、足し算も大小の比べも正しくできます。

試す: 数の列は足し算できる

コード: sql
-- 数の列は、数として足し算できます。
CREATE TABLE fees (name TEXT, fee INTEGER);
INSERT INTO fees VALUES ('青井', 3000);
INSERT INTO fees VALUES ('井上', 3000);
INSERT INTO fees VALUES ('上田', 2500);
SELECT SUM(fee) AS total FROM fees;
-- 2500 を '2500円' に変えると、何が変わるでしょうか。

よくある間違い

注意

表計算に慣れていると、金額を「3000円」と書いたまま移してよいと考えがちです。文字として入るので、足し算も大小の比べもできません。数の列には数だけを入れ、「円」は列の名前や画面の書式で表します。

主キーと INSERT で行を入れる

表を作るのは CREATE TABLE です。列の名前と型を並べます。行を足すのは INSERT です。

id のような、行ごとに必ず異なる列を主キーにします。同じ値の行は入らないので、同じ人の二重登録を防げます。

下の Run で、自分専用のデータベースに部員の表を作ります。

試す: 表を作って行を入れる

コード: sql
-- 表を作って、3人分の行を入れます。
CREATE TABLE members (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  grade INTEGER NOT NULL,
  fee INTEGER NOT NULL
);
INSERT INTO members VALUES (1, '青井', 2, 3000);
INSERT INTO members VALUES (2, '井上', 1, 3000);
INSERT INTO members VALUES (3, '上田', 3, 2500);
-- 3人とも見えるか確かめます。
SELECT * FROM members;
-- 4人目の行を足す INSERT を、上に1行書いてみましょう。

自分のデータベースを作る

コマンド
sql "CREATE DATABASE IF NOT EXISTS student_club"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

部員の表を作る

コマンド
sql "CREATE TABLE IF NOT EXISTS student_club.members (id INT PRIMARY KEY, name VARCHAR(40) NOT NULL, grade INT NOT NULL, fee INT NOT NULL)"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

3人ぶんの行を入れる

コマンド
sql "INSERT IGNORE INTO student_club.members VALUES (1, 'Aoi', 2, 3000), (2, 'Inoue', 1, 3000), (3, 'Ueda', 3, 2500)"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

入った行を確かめる

コマンド
sql "SELECT * FROM student_club.members ORDER BY id"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

さらに挑戦: 取り込みの下ごしらえ

表計算から取り込むときは、CSV という形式のファイルに保存します。phpMyAdmin の「インポート」で、CSV を表に読み込めます。

読み込む前に、列ごとの型を決めてください。会費の列に「円」が混じっていないか、同じ id が2回ないかも、表計算の上で確かめます。

このラボとソースについて: MySQL と phpMyAdmin のラボ:ショップのデータベースで SQL を練習する

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。