概要(SQL は「データベースに話しかける言語」)
SQL(エスキューエル)は、データベースに対して「これして」「あれして」と命令を出すための言語です。
Excel の表をもっと厳密にしたものが「テーブル」、そのテーブルに対して
どんな行を取り出すか
どんな行を追加するか
どんな行を変更するか
どんな行を削除するか
を指示するのが SQL だ、とイメージするとつかみやすいです。
ここでは、SQL の超重要 4 つの基本操作
SELECT(読む)
INSERT(追加する)
UPDATE(更新する)
DELETE(削除する)
を、初心者向けにかみ砕いて説明していきます。
テーブルとレコードのイメージを先につかむ
テーブル=「行と列からなる表」
SQL が扱うデータは、基本的に「テーブル」という形で保存されています。
テーブルは、行(レコード)と列(カラム)からなる表です。
例えば、ユーザーを管理する users テーブルがあるとします。
users テーブル
id | name | age | email
---+--------+-----+--------------------
1 | Taro | 25 | taro@example.com
2 | Hanako | 30 | hanako@example.com
3 | Ken | 19 | ken@example.com
このとき、
1 行 1 行が「レコード」
name や age が「カラム(列)」
です。
SQL の基本操作は、
このテーブルに対して「どの行をどうするか」を指定することだ、
と覚えておくと迷いにくくなります。
SELECT 文(データを読む)
一番よく使う「取り出し」コマンド
SELECT は「データを読む」ためのコマンドです。
基本形はこうです。
SELECT 列1, 列2
FROM テーブル名
WHERE 条件
ORDER BY 列1 ASC;
SQL最低限覚えたいのは、次の 2 つです。
どの列を取り出すか → SELECT の後ろ
どのテーブルから取るか → FROM の後ろ
例えば、users テーブルから全員の名前と年齢を取り出すならこうです。
SELECT name, age
FROM users;
SQLすべての列を取りたいときは、* を使います。
SELECT *
FROM users;
SQLWHERE で「欲しい行だけ」に絞る
WHERE は「条件」を指定する場所です。
例えば、20 歳以上のユーザーだけ取り出したいならこうです。
SELECT name, age
FROM users
WHERE age >= 20;
SQLメールアドレスが特定のもののユーザーだけならこうです。
SELECT *
FROM users
WHERE email = 'taro@example.com';
SQLポイントは、「WHERE を書かないと全部の行が対象になる」ということです。
UPDATE や DELETE でも同じなので、WHERE の付け忘れは本当に危険です。
ORDER BY で並び順を変える
ORDER BY は「並び替え」です。
年齢の若い順に並べたいならこうです。
SELECT name, age
FROM users
ORDER BY age ASC;
SQL年齢の高い順なら DESC(降順)を使います。
SELECT name, age
FROM users
ORDER BY age DESC;
SQLSELECT は「欲しい列」「欲しい行」「欲しい順番」を組み合わせて、
必要なデータだけをきれいに取り出すためのコマンドだ、
という感覚を持っておくとよいです。
INSERT 文(データを追加する)
新しい行を 1 行追加する基本形
INSERT は「新しいレコード(行)を追加する」コマンドです。
基本形はこうです。
INSERT INTO テーブル名 (列1, 列2, 列3)
VALUES (値1, 値2, 値3);
SQLusers テーブルに新しいユーザーを追加する例を見てみましょう。
INSERT INTO users (name, age, email)
VALUES ('Jiro', 22, 'jiro@example.com');
SQLこれで、users テーブルに 1 行追加されます。
id | name | age | email
---+--------+-----+--------------------
1 | Taro | 25 | taro@example.com
2 | Hanako | 30 | hanako@example.com
3 | Ken | 19 | ken@example.com
4 | Jiro | 22 | jiro@example.com ← 追加
id は多くの場合「自動採番(AUTO_INCREMENT)」になっているので、
INSERT では指定しないことが多いです。
列名を省略できるが、最初は省略しない方が安全
テーブルのすべての列に値を入れる場合、
列名を省略してこう書くこともできます。
INSERT INTO users
VALUES (5, 'Mika', 28, 'mika@example.com');
SQLただし、列の順番を正確に把握していないと危険ですし、
テーブル定義が変わったときに壊れやすくなります。
初心者のうちは、
必ず (name, age, email) のように列名を書く癖をつける方が安全です。
UPDATE 文(データを更新する)
特定の行の特定の列を変更する
UPDATE は「既存のレコードを変更する」コマンドです。
基本形はこうです。
UPDATE テーブル名
SET 列1 = 新しい値1, 列2 = 新しい値2
WHERE 条件;
例えば、id が 1 のユーザーの年齢を 26 に更新したいならこうです。
UPDATE users
SET age = 26
WHERE id = 1;
SQLメールアドレスも一緒に変えたいなら、SET にカンマで並べます。
UPDATE users
SET age = 26,
email = 'taro_new@example.com'
WHERE id = 1;
SQLWHERE を書き忘れると「全件更新」になる
UPDATE で一番危険なのが、WHERE の書き忘れです。
UPDATE users
SET age = 26;
SQLと書いてしまうと、
users テーブルの全員の age が 26 になってしまいます。
実務では、UPDATE や DELETE を打つ前に
まず同じ WHERE で SELECT して、本当に対象が合っているか確認する
という習慣をつけると事故が減ります。
DELETE 文(データを削除する)
特定の行を削除する
DELETE は「レコードを削除する」コマンドです。
基本形はこうです。
DELETE FROM テーブル名
WHERE 条件;
SQLid が 3 のユーザーを削除したいならこうです。
DELETE FROM users
WHERE id = 3;
SQLこれで、id=3 の行がテーブルから消えます。
WHERE を書かないと「全件削除」になる
UPDATE と同じく、DELETE も WHERE が超重要です。
DELETE FROM users;
SQLと書くと、users テーブルの全行が削除されます。
(テーブル自体は残るが、中身が空になる)
本番環境でこれをやると、
本当にシャレにならないので、
DELETE を打つ前に、必ず同じ WHERE で SELECT して確認する
というのを、強くおすすめします。
まとめてイメージする(CRUD と SQL の対応)
4 つの基本操作を「CRUD」で覚える
ここまでの 4 つを、まとめて整理します。
Create(作る) → INSERT
Read(読む) → SELECT
Update(更新) → UPDATE
Delete(削除) → DELETE
この 4 つをまとめて CRUD(クルード)と呼びます。
SQL の基本は、この CRUD をテーブルに対して行うことです。
最初に身につけるべき「筋の良い練習方法」
初心者向けの練習としては、
小さな users テーブルを一つ用意して、
INSERT で何人か追加する
SELECT で条件を変えながら取り出してみる
UPDATE で一人の情報を変えてみる
DELETE で一人だけ消してみる
というサイクルを、自分の手で何度も回すのが一番早いです。
そのとき、必ず
UPDATE / DELETE の前に、同じ WHERE で SELECT して確認する
という習慣をセットで身につけておくと、
この先 Django や他のフレームワークを使うときにも
「データベースで何が起きているか」をイメージしやすくなります。
さいごに(次の一歩のヒント)
ここまでが「SQL の超基本」です。
この先は、
WHERE をもっと複雑にする(AND / OR / LIKE など)
ORDER BY や LIMIT で結果を整える
GROUP BY と集計関数(SUM, COUNT, AVG など)を使う
複数テーブルを JOIN する
といった方向に広がっていきます。

