RDB を操作する標準言語 SQL。検索・追加・更新・削除・集約の代表的なパターンを実例で学びます。
SQL(Structured Query Language)は、リレーショナルデータベース(RDB)を操作するための標準言語です。ANSI / ISO で標準化されており、Oracle・MySQL・PostgreSQL など主要 RDBMS でほぼ共通に使えます。
SQL の特徴は「何が欲しいか」を書く宣言的な言語であること。「どうやって取り出すか(インデックスを使う、結合順を決めるなど)」は DB が自動で最適化します。
上のツールで「SELECT」「集約関数」「INSERT / UPDATE / DELETE」の各シナリオを切り替えて、代表的な SQL 文の動きを確認できます。
| 分類 | 正式名 | コマンド | 用途 |
|---|---|---|---|
| DDL | Data Definition Language | CREATE, ALTER, DROP | テーブルなどの定義・変更・削除 |
| DML | Data Manipulation Language | SELECT, INSERT, UPDATE, DELETE | データの操作 |
| DCL | Data Control Language | GRANT, REVOKE, COMMIT, ROLLBACK | 権限制御・トランザクション |
SQL は用途で 3 種類に分けられます。それぞれの対応関係は次のとおりです:
・DDL:構造を定義(CREATE TABLE など)
・DML:データを操作(SELECT / INSERT / UPDATE / DELETE)← この章のメイン
・DCL:権限・トランザクション制御(GRANT / COMMIT)
SELECT 文は書く順序と実行順序が違うのがポイントです。
書く順序(覚え方):SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY
実行順序:FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
実行順を知ると、なぜSELECT で付けた別名(AS)が WHERE では使えず、ORDER BY では使えるのかが分かります。WHERE は SELECT より先に実行されるため別名がまだ存在しない一方、ORDER BY は SELECT の後なので使えるわけです。
集計用の関数(集約関数)には次のようなものがあります。
・COUNT(*):行数を数える
・SUM(col):合計
・AVG(col):平均
・MAX(col) / MIN(col):最大・最小
GROUP BY と組み合わせると、グループごとの集計ができます。「部署ごとの平均給与」「日付ごとの売上合計」などが典型例。
⚠️ よくある間違い:WHERE は集約前、HAVING は集約後に絞り込む。 「平均給与 500 以上の部署を取りたい」は WHERE では書けず、HAVING を使います(WHERE はまだ AVG が計算されていない段階で評価されるため)。
データを変更する 3 つの操作:
・INSERT:行を追加 — INSERT INTO テーブル (列) VALUES (値);
・UPDATE:行を更新 — UPDATE テーブル SET 列=値 WHERE 条件;
・DELETE:行を削除 — DELETE FROM テーブル WHERE 条件;
💀 最大の事故ポイント:UPDATE / DELETE で WHERE を忘れると全件操作。「給与を +1 したかっただけ」が全社員給与 +1 になったり、「1 行消すつもり」が全件削除になったり。本番 DB では必ずトランザクションで囲み、結果を確認してから COMMIT しましょう(次ページ参照)。
読みやすい SQL を書くためのコツ:
・キーワード(SELECT, FROM, WHERE)は大文字、テーブル・列名は小文字
・各句で改行して読みやすく
・文字列リテラルはシングルクォート('...')、ダブルクォートは識別子用
・文末はセミコロン(;)で区切る
・テーブルにはエイリアス(別名)を付けると JOIN で見やすい
SQL は大文字小文字を区別しませんが、読解のために書き方に慣れておくとよいでしょう。上のツールの SQL コードボックスでシンタックスハイライトを参考にしてください。