DELETE の使い方
行を消す
書き方
DELETE FROM 表 WHERE 条件;
WHERE を忘れるとすべての行が消えます。先に SELECT で対象を確かめるのが安全です。
よく使うオプション
| オプション | 意味 |
|---|---|
DELETE FROM 表 WHERE 条件 | 条件に合う行を消す |
WHERE 列 IN (SELECT …) | ほかの表の結果をもとに消す |
RETURNING *(PostgreSQL) | 消した行を表示する |
例
DELETE FROM orders WHERE id = 9001;DELETE 1注文 9001 を消します。主キーで 1 行だけを決めて消すのが安全な形です。
DELETE FROM orders WHERE status = 'cancel' AND ordered_on < CURRENT_DATE - 365;
1 年より前の、取り消しの注文をまとめて消します。
SELECT COUNT(*) FROM customers WHERE city IS NULL; count
-------
3
(1 row)消す前に、同じ条件で何行あるかを確かめます。思ったより多ければ条件を見直します。
DELETE FROM customers WHERE id NOT IN (SELECT customer_id FROM orders WHERE customer_id IS NOT NULL);
一度も注文していない客を消します。副問い合わせから NULL を除いておくのが大事です。
よくある間違い・注意
- WHERE を忘れると、すべての行が消えます。BEGIN の後に打てば、ROLLBACK で戻せます。
- ほかの表から外部キーで参照されている行は、消そうとするとエラーになります(ON DELETE CASCADE の設定があれば一緒に消えます)。
実際に打って練習する
SQL コースの Lv40「消す DELETE」で覚えます。ブラウザの中のシミュレーターで、本物と同じように打って確かめられます。
Lv1〜3 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。