Skip to content
Playground

2.データベースとテーブル

学習目標

  • テーブルの列と代表的なデータ型を説明できる
  • CREATE DATABASE・CREATE TABLE でデータベースとテーブルを作れる
  • INSERT でデータを追加し、SELECT で取り出せる

bookstore データベースには、書籍のカテゴリを管理する categories テーブルがあります。

USE bookstore;
SELECT id, name FROM categories;
+----+--------------+
| id | name |
+----+--------------+
| 1 | 文学 |
| 2 | ビジネス |
| 3 | 技術書 |
| 4 | 児童書 |
| 5 | 自己啓発 |
| 6 | 歴史 |
| 7 | 漫画 |
+----+--------------+

categories には7件のカテゴリが保存されていて、それぞれ id(カテゴリの番号)と name(カテゴリ名)を持っています。テーブルの横方向の並びを行(レコード)、縦方向の並びを列(カラム)と呼びます。

列には名前と型があります。categories の場合、id の型は INT(整数)、name の型は VARCHAR(50)(最大50文字の文字列)です。

型は、その列に入れられるデータの種類を決めます。型と違う種類のデータは入れられず、id に文字列を入れようとすると SQL はエラーを返します。

MySQL でよく使うデータ型です。

概要典型的な使い道
INT整数(約 ±21億まで)個数、価格、ID
VARCHAR(N)最大 N 文字の文字列氏名、メールアドレス、商品名
CHAR(N)N 文字の固定長文字列国コード、性別
TEXT長文の文字列(長さ指定なし)記事本文、コメント、商品説明
DATE日付('2024-04-10' の形式)生年月日、発売日
DATETIME日時('2024-04-10 13:45:00' の形式)投稿日時、注文日時

VARCHAR(50)50 は、その列に入れられる最大の文字数を表します。

新しいデータベースは CREATE DATABASE で作ります。

CREATE DATABASE データベース名;
CREATE DATABASE mydb;

作成したデータベースを操作対象にするには USE で切り替えます。

USE データベース名;
USE mydb;

不要になったデータベースは DROP DATABASE で削除します。

DROP DATABASE データベース名;

CREATE TABLE でテーブルを定義します。列ごとに名前とデータ型を並べます。

CREATE TABLE テーブル名 (
列名1 データ型1,
列名2 データ型2,
...
);
CREATE TABLE employees (
id INT,
name VARCHAR(50),
email VARCHAR(100),
birth_date DATE
);

作成したテーブルの定義は DESCRIBE で確認できます。

DESCRIBE テーブル名;
DESCRIBE employees;
+------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| email | varchar(100) | YES | | NULL | |
| birth_date | date | YES | | NULL | |
+------------+--------------+------+-----+---------+-------+

Field が列名、Type が列の型を表します。定義した通りの4列が並んでいれば正しく作られています。

テーブルを削除するには DROP TABLE を使います。

DROP TABLE テーブル名;

INSERT INTO でテーブルに行を追加します。

INSERT INTO テーブル名 (列名1, 列名2, ...) VALUES (値1, 値2, ...);
INSERT INTO employees (id, name, email, birth_date)
VALUES (1, '山田 翔太', 'yamada@example.com', '1997-06-15');

文字列と日付は '...' でくくって渡します。

VALUES のあとにカンマ区切りで並べると、複数行をまとめて追加できます。

INSERT INTO employees (id, name, email, birth_date) VALUES
(2, '鈴木 結衣', 'suzuki@example.com', '1999-11-03'),
(3, '佐藤 陸', 'sato@example.com', '2001-03-22'),
(4, '田中 陽菜', 'tanaka@example.com', '2003-09-08');

すべての列に値を入れる場合は、列名の指定を省けます。この場合は、テーブル定義の順番通りに値を並べる必要があります。

INSERT INTO employees VALUES (5, '中村 湊', 'nakamura@example.com', '2005-01-17');

列名を省略するとテーブル定義の順序に依存するため、列名を明示する書き方の方が壊れにくくなります。

SELECT でテーブルからデータを取り出します。

SELECT 列1, 列2, ... FROM テーブル名;

すべての列を取り出したいときは * を使います。

SELECT * FROM employees;
+----+--------------+----------------------+------------+
| id | name | email | birth_date |
+----+--------------+----------------------+------------+
| 1 | 山田 翔太 | yamada@example.com | 1997-06-15 |
| 2 | 鈴木 結衣 | suzuki@example.com | 1999-11-03 |
| 3 | 佐藤 陸 | sato@example.com | 2001-03-22 |
| 4 | 田中 陽菜 | tanaka@example.com | 2003-09-08 |
| 5 | 中村 湊 | nakamura@example.com | 2005-01-17 |
+----+--------------+----------------------+------------+

列名をカンマ区切りで並べると、必要な列だけを取り出せます。列は書いた順に結果に並びます。

SELECT name, birth_date FROM employees;
+--------------+------------+
| name | birth_date |
+--------------+------------+
| 山田 翔太 | 1997-06-15 |
| 鈴木 結衣 | 1999-11-03 |
| 佐藤 陸 | 2001-03-22 |
| 田中 陽菜 | 2003-09-08 |
| 中村 湊 | 2005-01-17 |
+--------------+------------+

AS で列に別名(エイリアス)をつけられます。結果の見出しを分かりやすくしたいときに使います。

SELECT name AS 氏名, birth_date AS 生年月日 FROM employees;
+--------------+------------+
| 氏名 | 生年月日 |
+--------------+------------+
| 山田 翔太 | 1997-06-15 |
| 鈴木 結衣 | 1999-11-03 |
| 佐藤 陸 | 2001-03-22 |
| 田中 陽菜 | 2003-09-08 |
| 中村 湊 | 2005-01-17 |
+--------------+------------+

AS は省略できます。SELECT name 氏名, birth_date 生年月日 FROM employees; と書いても同じ結果になります。