部活の会費表が重くなった
写真部の会費表を、表計算ソフトで管理しています。部員が増えて、行が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 です。会費を数の列にしておけば、足し算も大小の比べも正しくできます。
試す: 数の列は足し算できる
-- 数の列は、数として足し算できます。
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 で、自分専用のデータベースに部員の表を作ります。
試す: 表を作って行を入れる
-- 表を作って、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回ないかも、表計算の上で確かめます。