SQLでデータベースを操作する流れとは?テーブル・行・列の関係を図解で理解
生徒
「データベースって、どういう仕組みでデータを保存しているんですか?」
先生
「データベースは、エクセルのような表を使ってデータを整理しています。この表をテーブルと呼び、縦と横にデータが並んでいます。」
生徒
「テーブルの中の行とか列って、何を意味しているんですか?」
先生
「行は一件分のデータ、列はデータの項目を表します。名簿で例えると、一行が一人分の情報、列が名前や年齢といった項目になります。今日は、この関係を図を使いながら詳しく学んでいきましょう。」
1. データベースとテーブルの基本構造
データベースは、情報を整理して保存するための仕組みです。その中核となるのがテーブルという概念で、これはエクセルのシートのような表形式でデータを管理します。
テーブルは、行と列で構成される二次元の表です。横方向に並ぶ一行が一件分のデータを表し、縦方向に並ぶ列がデータの項目を表します。この構造により、大量のデータを規則正しく整理できます。
例えば、会員情報を管理するusersというテーブルを考えてみましょう。このテーブルには、会員一人ひとりの情報が一行ずつ記録されています。
id | name | age | email | member_type
---+------------+-----+----------------------+-------------
1 | 山田太郎 | 25 | taro@example.com | premium
2 | 佐藤花子 | 19 | hanako@example.com | standard
3 | 鈴木一郎 | 30 | ichiro@example.com | premium
4 | 田中美咲 | 22 | misaki@example.com | standard
5 | 高橋健太 | 28 | kenta@example.com | premium
この表を見ると、横一行が一人分の会員情報を表し、縦一列が特定の項目のデータを表していることがわかります。このように、テーブルは情報を整理して見やすくする役割を持っています。
2. テーブルの構成要素を理解しよう
テーブルを構成する要素には、専門用語がいくつかあります。これらの用語を理解することで、データベースの操作がより明確になります。
テーブル(Table)
データを格納する表全体のことです。一つのデータベースには、複数のテーブルを作成できます。usersテーブル、productsテーブルなど、用途に応じて分けて管理します。
カラム・列(Column)
縦方向に並ぶデータの項目です。フィールドとも呼ばれます。name、age、emailなど、それぞれの列には特定の種類のデータが入ります。
レコード・行(Record/Row)
横方向に並ぶ一件分のデータです。一人の会員情報、一つの商品情報など、関連するデータがまとまって一行を構成します。
フィールド・値(Field/Value)
行と列が交差する一つのマス目に入る具体的な値です。例えば、山田太郎という名前や、二十五という年齢がフィールドの値になります。
これらの用語は、SQLを使う上で頻繁に登場します。最初は覚えにくいかもしれませんが、実際に使っていくうちに自然と身についていきます。
3. 主キーの役割と重要性
テーブルには、主キーと呼ばれる特別な列があります。主キーは、プライマリーキーとも呼ばれ、各レコードを一意に識別するための値です。
主キーは、同じ値が重複してはいけないという制約があります。例えば、usersテーブルのid列が主キーの場合、同じidを持つレコードは存在できません。これにより、特定のレコードを確実に指定できます。
- 各レコードで必ず異なる値を持つ(重複不可)
- 空の値(NULL)を持つことができない
- 一つのテーブルに一つだけ設定できる
- レコードを特定するための目印として機能する
主キーは、通常、連番で自動的に割り当てられるid列として設定します。一番目のレコードはid が一、二番目はid が二というように、データを追加するたびに自動で番号が増えていきます。
この仕組みにより、たとえ同姓同名の人がいても、idが異なれば別人として区別できます。データベース管理において、主キーは非常に重要な役割を果たしています。
4. SQLでデータを操作する基本の流れ
SQLを使ってデータベースを操作する流れは、大きく分けて四つのステップに分類できます。これらは、CRUD操作と呼ばれることもあります。
CRUDとは、Create(作成)、Read(読み取り)、Update(更新)、Delete(削除)の頭文字を取ったもので、データベース操作の基本となる四つの機能を表します。
データ操作の基本サイクル
- データの作成(INSERT):新しいレコードをテーブルに追加
- データの読み取り(SELECT):テーブルからデータを検索して取得
- データの更新(UPDATE):既存のレコードの内容を変更
- データの削除(DELETE):不要なレコードを削除
実際の業務では、この四つの操作を組み合わせてデータを管理します。例えば、新規会員登録ではINSERTを使い、会員情報の検索ではSELECTを使い、住所変更ではUPDATEを使い、退会処理ではDELETEを使います。
5. SELECT文でデータを取得する流れ
データベースから情報を取り出すには、SELECT文を使います。SELECTは最も頻繁に使われる命令で、テーブルからデータを検索して表示します。
SELECT文の基本的な流れは、まずどのテーブルからデータを取得するかを指定し、次にどの列のデータが欲しいかを指定します。さらに、条件を付けて特定のレコードだけを絞り込むこともできます。
例えば、会員テーブルから年齢が二十歳以上の人の名前とメールアドレスを取得する場合は、次のように書きます。
SELECT name, email
FROM users
WHERE age >= 20;
実行前のusersテーブルは次の状態です。
id | name | age | email
---+------------+-----+----------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 田中美咲 | 22 | misaki@example.com
5 | 高橋健太 | 28 | kenta@example.com
このSQL文を実行すると、条件に合うレコードだけが表示されます。
name | email
-----------+----------------------
山田太郎 | taro@example.com
鈴木一郎 | ichiro@example.com
田中美咲 | misaki@example.com
高橋健太 | kenta@example.com
このように、SELECT文では、FROM句でテーブルを指定し、WHERE句で条件を指定することで、必要なデータだけを効率的に取り出せます。
6. INSERT文でデータを追加する流れ
新しいデータをテーブルに追加するには、INSERT文を使います。INSERT文では、どのテーブルに、どの列に、どんな値を入れるかを指定します。
データを追加する流れは、まずテーブル名を指定し、次に値を入れる列名を括弧内に列挙します。そして、VALUES句の後に、実際に挿入する値を同じ順序で記述します。
新しい会員を追加する例を見てみましょう。
INSERT INTO users (name, age, email, member_type)
VALUES ('伊藤愛子', 24, 'aiko@example.com', 'standard');
実行前のテーブルの状態です。
id | name | age | email | member_type
---+------------+-----+----------------------+-------------
1 | 山田太郎 | 25 | taro@example.com | premium
2 | 佐藤花子 | 19 | hanako@example.com | standard
3 | 鈴木一郎 | 30 | ichiro@example.com | premium
4 | 田中美咲 | 22 | misaki@example.com | standard
5 | 高橋健太 | 28 | kenta@example.com | premium
INSERT文を実行すると、新しいレコードがテーブルに追加されます。
id | name | age | email | member_type
---+------------+-----+----------------------+-------------
1 | 山田太郎 | 25 | taro@example.com | premium
2 | 佐藤花子 | 19 | hanako@example.com | standard
3 | 鈴木一郎 | 30 | ichiro@example.com | premium
4 | 田中美咲 | 22 | misaki@example.com | standard
5 | 高橋健太 | 28 | kenta@example.com | premium
6 | 伊藤愛子 | 24 | aiko@example.com | standard
主キーであるidは、自動的に連番で割り当てられるため、指定する必要はありません。データベースが自動で次の番号を付けてくれます。
7. UPDATE文でデータを更新する流れ
既に登録されているデータを変更するには、UPDATE文を使います。UPDATE文では、どのテーブルの、どのレコードの、どの列を、どんな値に変更するかを指定します。
更新する流れは、まずテーブル名を指定し、SET句で変更する列と新しい値を指定します。そして、WHERE句で更新対象のレコードを条件で絞り込みます。WHERE句を忘れると、テーブル内の全レコードが更新されてしまうので注意が必要です。
特定の会員の会員タイプを変更する例を見てみましょう。
UPDATE users
SET member_type = 'premium'
WHERE id = 2;
このSQL文は、idが二番のレコードの会員タイプをプレミアムに変更します。主キーを条件に指定することで、確実に一件のレコードだけを更新できます。
複数の列を同時に更新することも可能です。その場合は、SET句の中でカンマで区切って複数の列名と値を指定します。例えば、年齢とメールアドレスを同時に変更したい場合は、次のように書きます。
UPDATE users
SET age = 26, email = 'taro_new@example.com'
WHERE name = '山田太郎';
このように、UPDATE文を使えば、既存のデータを柔軟に修正できます。ただし、更新は元に戻せないため、WHERE句の条件は慎重に指定しましょう。
8. DELETE文でデータを削除する流れ
不要になったデータを削除するには、DELETE文を使います。DELETE文では、どのテーブルから、どのレコードを削除するかを指定します。
削除の流れは、まずテーブル名を指定し、WHERE句で削除対象のレコードを条件で絞り込みます。UPDATE文と同様に、WHERE句を忘れるとテーブル内の全レコードが削除されてしまうため、十分注意してください。
DELETE FROM users
WHERE id = 6;
このSQL文は、idが六番のレコードを削除します。削除されたデータは基本的に復元できないため、実行前に本当に削除してよいかを確認することが重要です。
- 削除したデータは復元できない(バックアップがない限り)
- WHERE句を必ず指定する(指定しないと全削除)
- 削除前にSELECTで対象を確認する習慣をつける
- 重要なデータは物理削除ではなく論理削除を検討する
実務では、完全にデータを消す物理削除ではなく、削除フラグを立てる論理削除を使うことも多くあります。論理削除は、削除された状態を示す列を用意し、その値を変更することでデータを見えなくする方法です。
9. 複数のテーブルを関連付ける仕組み
データベースでは、複数のテーブルを関連付けて使うことが一般的です。これにより、データの重複を避け、効率的にデータを管理できます。
例えば、ECサイトでは、会員情報を管理するusersテーブルと、注文情報を管理するordersテーブルを別々に作ります。そして、ordersテーブルにuser_idという列を用意し、どの会員の注文かを記録します。
【usersテーブル】
id | name | email
---+------------+----------------------
1 | 山田太郎 | taro@example.com
2 | 佐藤花子 | hanako@example.com
【ordersテーブル】
id | user_id | product | amount
---+---------+--------------+--------
1 | 1 | ノートPC | 80000
2 | 1 | マウス | 1500
3 | 2 | キーボード | 3000
この構造により、会員情報を一か所で管理でき、注文履歴との関連付けも簡単になります。user_idを見れば、どの会員の注文かがすぐにわかります。
このような関連付けをリレーションと呼び、リレーショナルデータベースの最も重要な特徴の一つです。複数のテーブルを結合して、必要な情報を組み合わせて取得することもできます。
10. データ型の理解と適切な選択
テーブルを作成する際には、各列にデータ型を指定する必要があります。データ型とは、その列にどのような種類のデータを入れるかを定義するもので、適切に選ぶことが重要です。
主なデータ型には、整数を格納するINT型、文字列を格納するVARCHAR型、日付を格納するDATE型などがあります。それぞれのデータ型には特徴があり、用途に応じて使い分けます。
| データ型 | 説明 | 使用例 |
|---|---|---|
INT |
整数値を格納 | 年齢、個数、ID番号 |
VARCHAR |
可変長の文字列を格納 | 名前、メールアドレス、住所 |
TEXT |
長い文章を格納 | コメント、商品説明 |
DATE |
日付を格納 | 生年月日、登録日 |
DECIMAL |
小数点付きの数値を格納 | 価格、重量、評価点 |
データ型を適切に選ぶことで、データの整合性が保たれ、ストレージの容量も効率的に使えます。例えば、年齢にはINT型を使い、名前にはVARCHAR型を使うことで、それぞれに適したデータだけが入力されるようになります。
11. SQLでテーブル構造を確認する方法
既存のテーブルがどのような構造になっているかを確認することも重要です。列名やデータ型、主キーの設定などを把握することで、適切なSQL文を書けるようになります。
テーブルの構造を確認するには、DESCRIBE文やSHOW COLUMNS文を使います。これにより、テーブルに含まれる列の一覧とそれぞれのデータ型が表示されます。
DESCRIBE users;
このコマンドを実行すると、次のような情報が表示されます。
Field | Type | Null | Key | Default | Extra
------------+--------------+------+-----+---------+----------------
id | int | NO | PRI | NULL | auto_increment
name | varchar(100) | NO | | NULL |
age | int | YES | | NULL |
email | varchar(255) | NO | | NULL |
member_type | varchar(20) | YES | | NULL |
この情報から、idが主キーで自動採番されること、nameとemailは必須項目であること、ageとmember_typeは空でもよいことなどがわかります。テーブル構造を理解することで、より正確なSQL文が書けるようになります。