2026年1月21日 Tech

1-3 SQL入門 - データを操作する言語

SQL入門 - データを操作する言語

SQLはデータベースと会話するための言語である。4つの基本操作を覚えれば、データの取得・追加・更新・削除ができるようになる。


なぜこれを学ぶのか

前回までにデータベースとテーブルの概念を学んだ。しかし、データベースにデータを入れたり取り出したりするには「命令」が必要である。その命令を書くための言語がSQL。

SQLは「Structured Query Language」の略で、「構造化問い合わせ言語」と訳される。プログラミング言語とは少し違い、データベースに対する「注文」を書く言語である。

レストランで店員さんに「コーヒーをください」と注文するように、SQLでは「usersテーブルから30歳以上の人のデータをください」と注文する。店員さんが注文を聞いて料理を持ってくるように、データベースはSQLを受け取って結果を返してくれる。

flowchart LR A["アプリ"] -->|"SQL(注文)"| B["データベース"] B -->|"結果(料理)"| A

CREATE TABLE文の構文解説

SQLを試す前に、まずテーブルを作成するSQL文を理解しよう。CREATE TABLE文を「英文法」のように分解して解説する。

基本構文

CREATE TABLE テーブル名 (
    列名 データ型 制約,
    列名 データ型 制約,
    ...
);
flowchart LR A["CREATE TABLE"] --> B["テーブル名"] B --> C["( 列の定義 )"] C --> D[";"]

全体構造

部品 役割
CREATE TABLE 「テーブルを作れ」という命令(動詞) -
users テーブルの名前(目的語) users, products, orders
( ... ) 列の定義を囲む -
; 文の終わり(句点) -

列の定義

各列は「列名 データ型 制約」の順で定義する。日本語に訳すと「〇〇という名前の、△△型の、□□な列」となる。

name VARCHAR(100) NOT NULL
 ↓       ↓          ↓
列名   データ型     制約
部品 意味 例での役割
name 列の名前 「name」という名前の列
VARCHAR(100) データ型(最大100文字の文字列)。「バーキャラ」と読む 文字列を格納できる
NOT NULL 制約(空を許可しない) 必須入力

データ型の種類

データ型 格納できる値 使用例
INTEGER 整数(-2147483648〜2147483647) 年齢、数量
SERIAL 自動増加する整数 ID
VARCHAR(n) 最大n文字の文字列 名前、メールアドレス
TEXT 長さ制限なしの文字列 本文、説明
BOOLEAN true / false フラグ
DATE 日付(2024-01-15) 誕生日
TIMESTAMP 日時(2024-01-15 10:30:00) 作成日時

制約の種類

制約 意味
PRIMARY KEY 主キー(一意で必須) id
NOT NULL 空を許可しない 必須項目
UNIQUE 重複を許可しない メールアドレス
DEFAULT 値 初期値を設定 DEFAULT 0

例文の完全解説

以下のCREATE TABLE文を読み解いてみよう。

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(255) NOT NULL,
    age INTEGER NOT NULL
);
読み方
id SERIAL PRIMARY KEY 「idという名前の、自動採番される、主キーの列」
name VARCHAR(100) NOT NULL 「nameという名前の、最大100文字の、必須の列」
email VARCHAR(255) NOT NULL 「emailという名前の、最大255文字の、必須の列」
age INTEGER NOT NULL 「ageという名前の、整数型の、必須の列」

SQLを試す環境

CREATE TABLE文の構文を理解したところで、実際にSQLを試してみよう。この記事のSQLは、ブラウザ上で実行できる。インストール不要で、今すぐ手を動かせる。

DB Fiddle(推奨)

DB Fiddle にアクセスし、左上のデータベースを「PostgreSQL 15」に設定する。

flowchart LR A["ブラウザ"] --> B["DB Fiddle"] B --> C["PostgreSQL"] C -->|"結果"| B B -->|"表示"| A

環境の準備手順

  1. DB Fiddle を開く
  2. 左上で「PostgreSQL 15」を選択
  3. 左側の「Schema SQL」に以下のテーブル作成SQLを貼り付ける
  4. 右側の「Query SQL」に実行したいSQLを入力
  5. 「Run」ボタンをクリック

テーブルを作成する

以下のSQLを「Schema SQL」欄に貼り付ける。先ほど学んだCREATE TABLE文と、サンプルデータを投入するINSERT文である。

-- usersテーブルを作成
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(255) NOT NULL,
    age INTEGER NOT NULL
);

-- サンプルデータを投入
INSERT INTO users (name, email, age) VALUES
    ('田中太郎', 'tanaka@example.com', 28),
    ('山田花子', 'yamada@example.com', 35),
    ('佐藤一郎', 'sato@example.com', 42);

使用するテーブル

上記のSQLを実行すると、以下のusersテーブルが作成される。

id name email age
1 田中太郎 tanaka@example.com 28
2 山田花子 yamada@example.com 35
3 佐藤一郎 sato@example.com 42

以降のSQLは「Query SQL」欄に入力して試してほしい。


SELECT:データの取得

SELECTは、テーブルからデータを取り出す命令である。最も使う頻度が高い。

全件取得

SELECT * FROM users;

*は「すべての列」を意味する。このクエリは「usersテーブルから、すべての列・すべての行を取得せよ」という意味。

特定の列だけ取得

SELECT name, email FROM users;

結果:

name email
田中太郎 tanaka@example.com
山田花子 yamada@example.com
佐藤一郎 sato@example.com

必要な列だけを指定することで、無駄なデータ転送を減らせる。


WHERE句:条件を指定する

WHERE句は、処理対象の行を絞り込むための条件である。「〜の場合だけ」という指定ができる。

基本構文

SELECT * FROM テーブル名 WHERE 条件;

WHEREの後に条件を書くと、その条件に合う行だけが返る。

比較演算子一覧

演算子 意味
= 等しい age = 35(35である)
<> 〜ではない age <> 28(28ではない)
> より大きい age > 30(30より大きい)
< より小さい age < 30(30より小さい)
>= 以上 age >= 30(30以上)
<= 以下 age <= 30(30以下)

※ PostgreSQLでは != も「〜ではない」として使えるが、<> がSQL標準。

以下、具体例を見ていこう。

等しい(=)

SELECT * FROM users WHERE age = 35;

結果: 山田花子さんの行だけが返る。

id name email age
2 山田花子 yamada@example.com 35

以上・以下(>=, <=, >, <)

SELECT * FROM users WHERE age >= 30;

結果: 30歳以上のユーザーが返る。

id name email age
2 山田花子 yamada@example.com 35
3 佐藤一郎 sato@example.com 42

〜ではない(<>)

SELECT * FROM users WHERE age <> 28;

28歳ではないユーザーが返る。

WHERE句はSELECT以外でも使える

WHERE句はSELECTだけでなく、UPDATE(更新)やDELETE(削除)でも使える。「どの行を対象にするか」を指定する重要な構文である。


INSERT:データの追加

INSERTは、テーブルに新しい行を追加する命令である。

INSERT INTO users (name, email, age) VALUES ('鈴木次郎', 'suzuki@example.com', 25);

このクエリを実行すると、usersテーブルに新しい行が追加される。

id name email age
1 田中太郎 tanaka@example.com 28
2 山田花子 yamada@example.com 35
3 佐藤一郎 sato@example.com 42
4 鈴木次郎 suzuki@example.com 25

idは自動で割り振られるため、指定しなくてよい(自動採番)。


UPDATE:データの更新

UPDATEは、既存のデータを書き換える命令である。WHERE句で「どの行を更新するか」を指定する。

UPDATE users SET age = 29 WHERE id = 1;

このクエリは「usersテーブルのid=1の行のageを29に変更せよ」という意味。

id name email age
1 田中太郎 tanaka@example.com 29
2 山田花子 yamada@example.com 35
3 佐藤一郎 sato@example.com 42

WHERE句を忘れると危険

WHERE句を付け忘れると、全行が更新されてしまう。

-- 危険!全員の年齢が29になる
UPDATE users SET age = 29;

ベストプラクティス:先にSELECTで確認

UPDATEを実行する前に、同じWHERE句でSELECTを実行して対象行を確認すること。

-- まず確認(何件が対象か?)
SELECT * FROM users WHERE id = 1;

-- 確認できたら更新を実行
UPDATE users SET age = 29 WHERE id = 1;

DELETE:データの削除

DELETEは、テーブルから行を削除する命令である。WHERE句で「どの行を削除するか」を指定する。

DELETE FROM users WHERE id = 3;

このクエリは「usersテーブルからid=3の行を削除せよ」という意味。

id name email age
1 田中太郎 tanaka@example.com 28
2 山田花子 yamada@example.com 35

WHERE句を忘れると危険

UPDATEと同様、WHERE句を付け忘れると全行が削除される。

-- 危険!全データが消える
DELETE FROM users;

ベストプラクティス:先にSELECTで確認

DELETEを実行する前にも、SELECTで対象行を確認すること。

-- まず確認(削除される行は正しいか?)
SELECT * FROM users WHERE id = 3;

-- 確認できたら削除を実行
DELETE FROM users WHERE id = 3;

削除は取り消せない。本番環境では特に慎重に実行すべきである。


CRUD操作

SELECT、INSERT、UPDATE、DELETEの4つをまとめて「CRUD操作」(クラッド操作)と呼ぶ。

flowchart TB subgraph CRUD["CRUD操作"] C["Create(作成)"] --> INSERT R["Read(読み取り)"] --> SELECT U["Update(更新)"] --> UPDATE D["Delete(削除)"] --> DELETE end
操作 SQL 意味
Create INSERT 作成(追加)
Read SELECT 読み取り(取得)
Update UPDATE 更新
Delete DELETE 削除

CRUDはデータ操作の基本である。この4つを覚えれば、データベースで「やりたいこと」の大半は実現できる。


まとめ

  • SQLはデータベースを操作するための言語
  • CREATE TABLEでテーブルを作成する
  • SELECTでデータを取得する
  • WHERE句で条件を指定し、処理対象を絞り込む
  • INSERTでデータを追加する
  • UPDATEでデータを更新する(WHERE句必須)
  • DELETEでデータを削除する(WHERE句必須)
  • この4つをCRUD操作と呼ぶ

用語

用語 説明
SQL Structured Query Language。データベースを操作するための言語
クエリ データベースへの命令文。SQLで記述する
CREATE TABLE テーブルを新規作成する命令
SELECT データを取得する命令
WHERE句 条件を指定するための構文。対象行を絞り込む
INSERT データを追加する命令
UPDATE データを更新する命令
DELETE データを削除する命令
CRUD Create, Read, Update, Deleteの頭文字。データ操作の基本4種
DB Fiddle ブラウザ上でSQLを試せる無料サービス

次の記事

SELECT文をさらに深く学びたい方はこちら。

2-1 SELECT文を極める

目次