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)

関係の種類

関係例表し方
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"