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 は、登録不要・無料で遊べます(それより先はブロンズ以上のプランで遊べます)。

SQL 構文一覧(使い方と例)へ戻る