SQL 01 考え方(RDB・テーブル・SQLの種類)
更新日:
← SQL / 次 → SQL_02_SELECTの基本(WHERE・ORDER BY・LIMIT)
データベースとは
アプリのデータ(ユーザー・投稿・注文など)を安全に・大量に・同時に扱うための専用ソフト。
| ファイル(JSON / CSV)で保存 | データベースで保存 |
|---|---|
| 全部読み込んで探す → 件数が増えると遅い | 索引(インデックス)で一瞬で探せる |
| 2人が同時に書くと壊れる | 同時アクセスを安全にさばく |
| 途中で落ちると中途半端なデータが残る | トランザクションで「全部 or なし」 |
| 形式がバラバラになりがち | 型・制約でルールを強制できる |
リレーショナル = 「表」と「つながり」
users orders
┌────┬──────┐ ┌────┬─────────┬────────┐
│ id │ name │ │ id │ user_id │ amount │
├────┼──────┤ ├────┼─────────┼────────┤
│ 1 │ 田中 │ ◄───────────────│ 10 │ 1 │ 3000 │
│ 2 │ 佐藤 │ ◄──┐ │ 11 │ 1 │ 1500 │
└────┴──────┘ └────────────│ 12 │ 2 │ 800 │
└────┴─────────┴────────┘
主キー(id) 外部キー(user_id → users.id)- 「田中さんの名前」は users に1回だけ 書く。orders には
user_idという番号だけ持つ - 名前を変えても1か所直せば全部に反映される(これが 正規化 の考え方 → SQL_05_データ操作と設計(INSERT・UPDATE・DELETE・CREATE))
関係の種類
| 関係 | 例 | 表し方 |
|---|---|---|
| 1対1 | ユーザー と プロフィール | 片方に外部キー(UNIQUE) |
| 1対多 | ユーザー と 注文 | 「多」の側に外部キー(orders.user_id) |
| 多対多 | 記事 と タグ | 間に [中間テーブル]を置く |
SQL の4分類
| 分類 | 意味 | 主なコマンド |
|---|---|---|
| DQL(Query) | 取り出す | SELECT |
| DML(Manipulation) | 中身を変える | INSERT UPDATE DELETE |
| DDL(Definition) | 入れ物(テーブル)を作る・変える | CREATE ALTER DROP |
| DCL / TCL | 権限・トランザクション | GRANT BEGIN COMMIT ROLLBACK |
日常の 9 割は SELECT。危険度は DDL(DROP)> DML(UPDATE/DELETE)> SELECT。
書き方の基本ルール
- 文の終わりは
; - キーワード(SELECT など)は大文字・小文字どちらでも動く。慣習で キーワードは大文字
- 文字列は シングルクォート
'田中'(ダブルクォートは列名・テーブル名用) - コメントは
-- 1行//* 複数行 */ - 「値がない」は
NULL。0 や空文字''とは別物(→ 02 章)
手を動かして試すなら
- SQLite:Mac には最初から入っている。ターミナルで
sqlite3 test.db - ブラウザ:sqlfiddle / DB Fiddle などのオンライン実行環境
- Cloudflare D1:
npx wrangler d1 execute <DB名> --command "SELECT 1"