MySQL

SQLと基本操作

テーブルを作り、データを追加・検索・変更・削除します。

MySQL入門の講座一覧

01

テーブルを作る

以下を練習用データベースで実行します。すでに同名テーブルがある場合は、学習用なら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により、追加時に番号を省略できます。

02

型と制約

値の意味に合う型を選びます。整数は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   3
03

SELECT、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')は候補のいずれかを表します。条件の優先順位が分かりにくいときは丸括弧を使います。

04

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()を確認する習慣を持ちましょう。
05

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
マグカップ  未分類
06

練習:在庫金額

在庫がある商品の名前と「価格×在庫数」を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