2.データベースとテーブル
学習目標
- テーブルの列と代表的なデータ型を説明できる
- CREATE DATABASE・CREATE TABLE でデータベースとテーブルを作れる
- INSERT でデータを追加し、SELECT で取り出せる
1. テーブル
Section titled “1. テーブル”bookstore データベースには、書籍のカテゴリを管理する categories テーブルがあります。
USE bookstore;SELECT id, name FROM categories;+----+--------------+| id | name |+----+--------------+| 1 | 文学 || 2 | ビジネス || 3 | 技術書 || 4 | 児童書 || 5 | 自己啓発 || 6 | 歴史 || 7 | 漫画 |+----+--------------+categories には7件のカテゴリが保存されていて、それぞれ id(カテゴリの番号)と name(カテゴリ名)を持っています。テーブルの横方向の並びを行(レコード)、縦方向の並びを列(カラム)と呼びます。
1-1. 列の名前と型
Section titled “1-1. 列の名前と型”列には名前と型があります。categories の場合、id の型は INT(整数)、name の型は VARCHAR(50)(最大50文字の文字列)です。
型は、その列に入れられるデータの種類を決めます。型と違う種類のデータは入れられず、id に文字列を入れようとすると SQL はエラーを返します。
1-2. 代表的なデータ型
Section titled “1-2. 代表的なデータ型”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 は、その列に入れられる最大の文字数を表します。
2. データベースの作成
Section titled “2. データベースの作成”新しいデータベースは CREATE DATABASE で作ります。
CREATE DATABASE データベース名;CREATE DATABASE mydb;作成したデータベースを操作対象にするには USE で切り替えます。
USE データベース名;USE mydb;不要になったデータベースは DROP DATABASE で削除します。
DROP DATABASE データベース名;3. テーブルの作成
Section titled “3. テーブルの作成”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 テーブル名;4. データの追加
Section titled “4. データの追加”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');文字列と日付は '...' でくくって渡します。
4-1. 複数行の追加
Section titled “4-1. 複数行の追加”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');4-2. 列名の省略
Section titled “4-2. 列名の省略”すべての列に値を入れる場合は、列名の指定を省けます。この場合は、テーブル定義の順番通りに値を並べる必要があります。
INSERT INTO employees VALUES (5, '中村 湊', 'nakamura@example.com', '2005-01-17');列名を省略するとテーブル定義の順序に依存するため、列名を明示する書き方の方が壊れにくくなります。
5. データの取得
Section titled “5. データの取得”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 |+----+--------------+----------------------+------------+5-1. 列の指定
Section titled “5-1. 列の指定”列名をカンマ区切りで並べると、必要な列だけを取り出せます。列は書いた順に結果に並びます。
SELECT name, birth_date FROM employees;+--------------+------------+| name | birth_date |+--------------+------------+| 山田 翔太 | 1997-06-15 || 鈴木 結衣 | 1999-11-03 || 佐藤 陸 | 2001-03-22 || 田中 陽菜 | 2003-09-08 || 中村 湊 | 2005-01-17 |+--------------+------------+5-2. 列の別名
Section titled “5-2. 列の別名”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; と書いても同じ結果になります。