茨の道も一歩から

インフラ構築からプログラミング(Python・JavaScript)までITに関するブログです。

104日目:データベース

データベースの講義3日目です。

【参考テキスト】

【講義内容】

  • 第4章 データベースとアーキテクチャ構成-堅牢かつ高速なシステムを構築するために-

【ワンポイント】

meatsテーブル

CREATE TABLE meats (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    category VARCHAR(10) NOT NULL,
    price INT UNSIGNED,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT charset=utf8;

データ

INSERT INTO meats (
  name,
  category,
  price
) VALUES
('むね肉', '', 90),
('もも肉', '', 120),
('バラ肉', '', 190),
('ロース', '', 470),
('ヒレ', '', 500),
('肩ロース', '', 450),
('リブロース', '', 600),
('サーロイン', '', 960),
('ヒレ肉', '', 780),
('ばら肉', '', 370),
('羊肉', '', NULL)
;

GROUP BY

SELECT category, COUNT(*) FROM meats
GROUP BY category
;

出力結果

+----------+----------+
| category | COUNT(*) |
+----------+----------+
| 鶏       |        2 |
| 豚       |        3 |
| 牛       |        5 |
| 羊       |        1 |
+----------+----------+
4 rows in set (0.00 sec)

HAVING

SELECT category, AVG(price) FROM meats
GROUP BY category
HAVING AVG(price) > 500
;

出力結果

+----------+------------+
| category | AVG(price) |
+----------+------------+
| 牛       |   632.0000 |
+----------+------------+
1 row in set (0.00 sec)

ORDER BY

SELECT name, category, price FROM meats
ORDER BY price
;

出力結果

+------------+----------+-------+
| name       | category | price |
+------------+----------+-------+
| 羊肉       | 羊       |  NULL |
| むね肉     | 鶏       |    90 |
| もも肉     | 鶏       |   120 |
| バラ肉     | 豚       |   190 |
| ばら肉     | 牛       |   370 |
| 肩ロース   | 牛       |   450 |
| ロース     | 豚       |   470 |
| ヒレ       | 豚       |   500 |
| リブロース | 牛       |   600 |
| ヒレ肉     | 牛       |   780 |
| サーロイン | 牛       |   960 |
+------------+----------+-------+
11 rows in set (0.00 sec)

LIMIT

SELECT name, category, price FROM meats
ORDER BY category, price DESC
LIMIT 3
;

出力結果

+------------+----------+-------+
| name       | category | price |
+------------+----------+-------+
| サーロイン | 牛       |   960 |
| ヒレ肉     | 牛       |   780 |
| リブロース | 牛       |   600 |
+------------+----------+-------+
3 rows in set (0.00 sec)

CASE

CASE
  WHEN 条件式 THENELSE デフォルト値
END AS 別名

検索CASE式

SELECT
  name,
  CASE
    WHEN category = 1 THEN ''
    WHEN category = 2 THEN ''
    WHEN category = 3 THEN ''
    WHEN category = 4 THEN ''
  END AS 肉分類
  FROM meats
  ;

単純CASE式

SELECT
  name,
  CASE category
    WHEN 1 THEN ''
    WHEN 2 THEN ''
    WHEN 3 THEN ''
    WHEN 4 THEN ''
  END AS 肉分類
  FROM meats
  ;

【今日の積み上げ】

‐ データベースの基礎