テーブルを作る
以下を練習用データベースで実行します。すでに同名テーブルがある場合は、学習用ならDROP TABLE productsで削除して作り直せます。
商品テーブルMYSQL
CREATE TABLE products (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
category VARCHAR(30),
price DECIMAL(10, 2) NOT NULL,
stock INT NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) ENGINE = InnoDB;主キーは一行を識別する番号です。AUTO_INCREMENTにより、追加時に番号を省略できます。
型と制約
値の意味に合う型を選びます。整数はINT、金額はDECIMAL、短い文字列はVARCHAR、日時はDATETIMEが候補です。NOT NULLは必須、DEFAULTは省略時の値です。
サンプルデータMYSQL
INSERT INTO products (name, category, price, stock) VALUES
('MySQL入門書', 'book', 2800.00, 5),
('ノート', 'stationery', 300.00, 12),
('ボールペン', 'stationery', 150.00, 0),
('マグカップ', NULL, 900.00, 3);追加結果の確認MYSQL
SELECT id, name, category, price, stock
FROM products
ORDER BY id;実行結果OUTPUT
id name category price stock
1 MySQL入門書 book 2800.00 5
2 ノート stationery 300.00 12
3 ボールペン stationery 150.00 0
4 マグカップ NULL 900.00 3SELECT、WHERE、ORDER BY
条件、並べ替え、件数制限MYSQL
SELECT name, price, stock
FROM products
WHERE stock > 0 AND price BETWEEN 300 AND 3000
ORDER BY price DESC
LIMIT 2;実行結果OUTPUT
name price stock
MySQL入門書 2800.00 5
マグカップ 900.00 3条件を満たす商品は3件ありますが、LIMIT 2なので価格の高い2件だけが返ります。ノートは3番目です。LIKE 'MySQL%'はMySQLから始まる文字列、IN ('book', 'stationery')は候補のいずれかを表します。条件の優先順位が分かりにくいときは丸括弧を使います。
INSERT、UPDATE、DELETE
更新や削除は、先に同じ条件のSELECTを実行して対象を確認します。
一件を追加して更新するMYSQL
INSERT INTO products (name, category, price, stock)
VALUES ('付せん', 'stationery', 250.00, 8);
UPDATE products
SET stock = stock + 2
WHERE id = 2;
SELECT id, name, stock
FROM products
WHERE id = 2;
DELETE FROM products
WHERE name = '付せん';更新結果OUTPUT
id name stock
2 ノート 14次のページへ進む前に初期状態へ戻すMYSQL
UPDATE products
SET stock = stock - 2
WHERE id = 2;上の戻すSQLを実行すると、ノートの在庫は12に戻ります。この講座では、次のページが初期データ(ノート12個)から始まるようにしています。
WHEREの付け忘れ
UPDATE products SET stock = 0;は全商品を更新します。意図した件数とROW_COUNT()を確認する習慣を持ちましょう。NULLを扱う
NULLは0、空文字、文字列「NULL」と違い、「値がない・不明」を表します。比較は= NULLではなくIS NULLです。
未分類と表示するMYSQL
SELECT name,
COALESCE(category, '未分類') AS category_name
FROM products
WHERE category IS NULL;実行結果OUTPUT
name category_name
マグカップ 未分類練習:在庫金額
在庫がある商品の名前と「価格×在庫数」をstock_valueとして表示し、金額の大きい順に並べてください。
解答例と実行結果
解答例MYSQL
SELECT name, price * stock AS stock_value
FROM products
WHERE stock > 0
ORDER BY stock_value DESC;実行結果OUTPUT
name stock_value
MySQL入門書 14000.00
ノート 3600.00
マグカップ 2700.00