LESSON 25分

ストーリー

先輩
データベースの中はExcelの表みたいになってるんだよ
あなた
表…ですか?
先輩
そう。列(カラム)にデータの種類を決めて、行(ロウ)に1件ずつデータを入れていくんだ。実際にテーブルを作ってみよう

このセクションで学ぶこと

テーブルの構造、データ型、PRIMARY KEY、NULLなどの概念を学び、実際にテーブルを作成してデータを投入します。


テーブルの構造

テーブルは「カラム(列)」と「ロウ(行)」で構成されます。

graph TB
    subgraph Table["テーブル名: employees"]
        H["id(INTEGER)| name(TEXT)| department(TEXT)| salary(INTEGER)"]
        R1["1 | 田中太郎 | 開発部 | 350000"]
        R2["2 | 佐藤花子 | 営業部 | 320000"]
        R3["3 | 鈴木一郎 | 開発部 | 400000"]
        H --- R1 --- R2 --- R3
    end

    CLabel["↑ カラム(列):データの種類を定義"] -.-> H
    RLabel["← ロウ(行):1件分のデータ"] -.-> R1

    style Table fill:#f8fafc,stroke:#475569,stroke-width:2px,color:#1e293b
    style H fill:#dbeafe,stroke:#2563eb,stroke-width:2px,color:#1e40af
    style R1 fill:#d1fae5,stroke:#059669,stroke-width:2px,color:#064e3b
    style R2 fill:#d1fae5,stroke:#059669,stroke-width:2px,color:#064e3b
    style R3 fill:#d1fae5,stroke:#059669,stroke-width:2px,color:#064e3b
    style CLabel fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#92400e
    style RLabel fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#92400e

ポイント

  • カラム(列): データの「種類」を定義する(名前、部署、給料など)
  • ロウ(行): 1件分の「データ」(田中太郎の情報、佐藤花子の情報など)
  • テーブルを作るとき、最初にカラムを定義する
  • データを追加するとき、ロウが1行ずつ増えていく

データ型

カラムには「どんな種類のデータを入れるか」を指定します。 これをデータ型と呼びます。

SQLiteの主なデータ型

データ型説明
INTEGER整数1, 42, -100, 350000
TEXT文字列’田中太郎’, ‘開発部’, ‘hello’
REAL小数(浮動小数点)3.14, 98.5, 0.01
BLOBバイナリデータ画像、ファイルなど
NULL値がないことを表すNULL

よく使うのはこの3つ

INTEGER  → 数値(年齢、金額、個数など)
TEXT     → 文字列(名前、メール、住所など)
REAL     → 小数(割合、評価点など)

最初はINTEGER、TEXT、REALの3つだけ覚えれば十分です。

文字列の書き方

SQLでは文字列をシングルクォートで囲みます。

'田中太郎'     -- 正しい
'開発部'       -- 正しい
"田中太郎"     -- SQLiteでは動くが、標準SQLではカラム名と混同する

文字列は必ずシングルクォート ' で囲む、と覚えましょう。


PRIMARY KEY(主キー)

一言で言うと

テーブル内の各ロウを一意に識別するためのカラム

なぜ必要?

「田中太郎」が2人いたら、どちらのデータか分からなくなります。 PRIMARY KEYがあれば、IDで確実に区別できます。

idname
1田中太郎
5田中太郎

PRIMARY KEYのルール

ルール説明
一意同じ値が2つ以上存在できない
NOT NULL空(NULL)にできない
1テーブルに1つPRIMARY KEYは1つだけ設定する

よくあるパターン

id INTEGER PRIMARY KEY
  • id というカラム名が最もよく使われる
  • INTEGER PRIMARY KEY にすると、自動で連番が振られる(SQLite)

NULL(ヌル)

一言で言うと

「値がない」「未入力」を表す特別な値

NULLの例

idnamephone
1田中太郎090…
2佐藤花子NULL

NULLの注意点

  • NULLは「0」や「空文字」とは違う
  • NULLは「値が存在しない」という意味
  • 必須項目には NOT NULL を指定して、NULLを禁止できる
name TEXT NOT NULL    -- nameは必ず値が必要
phone TEXT            -- phoneはNULLでもOK

NOT NULL制約

一言で言うと

「このカラムは必ず値を入れてね」というルール

CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,       -- 名前は必須
    email TEXT NOT NULL,      -- メールも必須
    phone TEXT                -- 電話番号は任意(NULLでもOK)
);

「必須項目」には NOT NULL をつける、と覚えましょう。


ハンズオン: テーブルを作成しよう

実際にテーブルを作成してデータを入れてみましょう。

1. SQLiteを起動

cd ~/db-practice
sqlite3 practice.db

2. 表示設定

sqlite> .headers on
sqlite> .mode column

3. テーブルを作成

CREATE TABLE employees (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    department TEXT,
    salary INTEGER
);

何もエラーが表示されなければ成功です。

4. テーブルができたか確認

sqlite> .tables

出力:

employees

5. テーブルの構造を確認

sqlite> .schema employees

出力:

CREATE TABLE employees (
    id INTEGER PRIMARY KEY,
    name TEXT NOT NULL,
    department TEXT,
    salary INTEGER
);

ハンズオン: データを追加しよう

INSERT文でデータを追加

INSERT INTO employees VALUES (1, '田中太郎', '開発部', 350000);
INSERT INTO employees VALUES (2, '佐藤花子', '営業部', 320000);
INSERT INTO employees VALUES (3, '鈴木一郎', '開発部', 400000);
INSERT INTO employees VALUES (4, '高橋美咲', '人事部', 300000);
INSERT INTO employees VALUES (5, '伊藤健太', '営業部', 280000);

各行の最後にセミコロン ; を忘れずに。

データが入ったか確認

SELECT * FROM employees;

出力:

id  name      department  salary
--  --------  ----------  ------
1   田中太郎  開発部      350000
2   佐藤花子  営業部      320000
3   鈴木一郎  開発部      400000
4   高橋美咲  人事部      300000
5   伊藤健太  営業部      280000

5件のデータが表示されれば成功です!


INSERT文の書き方

基本構文

INSERT INTO テーブル名 VALUES (値1, 値2, 値3, ...);

カラムを指定する書き方(推奨)

INSERT INTO テーブル名 (カラム1, カラム2) VALUES (値1, 値2);

例:

INSERT INTO employees (id, name, department, salary) VALUES (6, '山田次郎', '開発部', 330000);

カラムを指定する書き方のほうが安全で分かりやすいです。

NULLを入れる場合

INSERT INTO employees (id, name, department, salary) VALUES (7, '中村三郎', NULL, 310000);

departmentがNULLになります(部署未定の社員)。


CREATE TABLE文の書き方

基本構文

CREATE TABLE テーブル名 (
    カラム名1 データ型 制約,
    カラム名2 データ型 制約,
    ...
);

構文の解説

CREATE TABLE employees (        -- 「employees」テーブルを作成
    id INTEGER PRIMARY KEY,     -- id: 整数、主キー
    name TEXT NOT NULL,          -- name: 文字列、必須
    department TEXT,             -- department: 文字列、任意
    salary INTEGER               -- salary: 整数、任意
);

よくあるトラブル

「table employees already exists」と表示される

同じ名前のテーブルが既に存在しています。削除してから再作成しましょう:

DROP TABLE employees;

その後、CREATE TABLE文をもう一度実行してください。

セミコロンを忘れた

sqlite> SELECT * FROM employees
   ...>

...> と表示された場合、セミコロンを忘れています。; を入力してEnterを押しましょう:

   ...> ;

文字化けする

SQLiteのターミナルがUTF-8に対応しているか確認してください。 多くの場合、ターミナルの文字コード設定をUTF-8にすると解決します。


まとめ

ポイント内容
テーブル構造カラム(列)とロウ(行)で構成
データ型INTEGER、TEXT、REAL が基本の3つ
PRIMARY KEYロウを一意に識別するカラム
NULL「値がない」を表す特別な値
NOT NULL必須項目に指定する制約

チェックリスト

  • テーブルの構造(カラムとロウ)が説明できる
  • データ型(INTEGER、TEXT、REAL)の違いが分かる
  • PRIMARY KEYの役割が分かる
  • CREATE TABLEでテーブルを作成できる
  • INSERT INTOでデータを追加できる

次のステップへ

テーブルの作成とデータの追加はできましたか?

次のセクションでは、SQLの基本用語をまとめて学びます。 SELECT、INSERT、UPDATE、DELETEの全体像を整理しましょう。


推定読了時間: 25分