【SQL】DELETE:データの削除

  • #SQL

データの削除方法

文 説明
DROP TABLE文 テーブルそのものを削除
DELETE文 テーブルは残したまま、行を削除する

【参考】DROP TABLE

  • テーブルごとすべて削除する
  • 削除後、データの再登録をするならCREATE TABLE文でテーブルの再作成から必要になる

DELETE:行を削除する

  • データ(行)を削除しても、テーブルは残っている
  • INSERT文でデータの再登録が可能
/* 削除を確定させないため
	(ROLLBACKとセット) */
BEGIN;

/* テーブルのデータを削除 */
DELETE FROM Shohin;

SELECT * FROM Shohin;

/* テーブル内は空になった */ 
 shohin_id | shohin_mei | shohin_bunrui | hanbai_tanka | shiire_tanka | torokubi 
-----------+------------+---------------+--------------+--------------+----------

データだけが削除され、テーブルは残っている。 ※DELETEの動きが確認できたので、データを戻す

/* 削除を確定させないため
	(BEGINとセット) */
ROLLBACK;

SELECT * FROM Shohin ORDER BY shohin_id ASC;

/* データは元通り */
 shohin_id |   shohin_mei   | shohin_bunrui | hanbai_tanka | shiire_tanka |  torokubi  
-----------+----------------+---------------+--------------+--------------+------------
 0001      | Tシャツ        | 衣服          |         1000 |          500 | 2009-09-20
 0002      | 穴あけパンチ   | 事務用品      |          500 |          320 | 2009-09-11
 0003      | カッターシャツ | 衣服          |         4000 |         2800 | 
 0004      | 包丁           | キッチン用品  |         3000 |         2800 | 2009-09-20
 0005      | 圧力鍋         | キッチン用品  |         6800 |         5000 | 2009-01-15
 0006      | フォーク       | キッチン用品  |          500 |              | 2009-09-20
 0007      | おろしがね     | キッチン用品  |          880 |          790 | 2008-04-28
 0008      | ボールペン     | 事務用品      |          100 |              | 2009-11-11
 

削除する行を選択する

条件を指定して、削除する行を選択する

/* まず削除前のデータを確認 */
SELECT * FROM Shohin ORDER BY shohin_id ASC;

 shohin_id |   shohin_mei   | shohin_bunrui | hanbai_tanka | shiire_tanka |  torokubi  
-----------+----------------+---------------+--------------+--------------+------------
 0001      | Tシャツ        | 衣服          |         1000 |          500 | 2009-09-20
 0002      | 穴あけパンチ   | 事務用品      |          500 |          320 | 2009-09-11
 0003      | カッターシャツ | 衣服          |         4000 |         2800 | 
 0004      | 包丁           | キッチン用品  |         3000 |         2800 | 2009-09-20
 0005      | 圧力鍋         | キッチン用品  |         6800 |         5000 | 2009-01-15
 0006      | フォーク       | キッチン用品  |          500 |              | 2009-09-20
 0007      | おろしがね     | キッチン用品  |          880 |          790 | 2008-04-28
 0008      | ボールペン     | 事務用品      |          100 |              | 2009-11-11
 
 
 SELECT * FROM Shohin WHERE hanbai_tanka >= 4000;
 
 shohin_id |   shohin_mei   | shohin_bunrui | hanbai_tanka | shiire_tanka |  torokubi  
-----------+----------------+---------------+--------------+--------------+------------
 0003      | カッターシャツ | 衣服          |         4000 |         2800 | 
 0005      | 圧力鍋         | キッチン用品  |         6800 |         5000 | 2009-01-15

hanbai_tanka >= 4000のデータを削除する

/* 削除を確定させないため
	(ROLLBACKとセット) */
BEGIN;

DELETE FROM Shohin WHERE hanbai_tanka >= 4000;

SELECT * FROM Shohin ORDER BY shohin_id ASC;

/* 商品ID'0003'と'0005'のみ削除された */ 
 shohin_id |  shohin_mei  | shohin_bunrui | hanbai_tanka | shiire_tanka |  torokubi  
-----------+--------------+---------------+--------------+--------------+------------
 0001      | Tシャツ      | 衣服          |         1000 |          500 | 2009-09-20
 0002      | 穴あけパンチ | 事務用品      |          500 |          320 | 2009-09-11
 0004      | 包丁         | キッチン用品  |         3000 |         2800 | 2009-09-20
 0006      | フォーク     | キッチン用品  |          500 |              | 2009-09-20
 0007      | おろしがね   | キッチン用品  |          880 |          790 | 2008-04-28
 0008      | ボールペン   | 事務用品      |          100 |              | 2009-11-11

※DELETEの動きが確認できたので、データを戻す

/* 削除を確定させないため
	(BEGINとセット) */
ROLLBACK;

SELECT * FROM Shohin ORDER BY shohin_id ASC;

/* データは元通り */
 shohin_id |   shohin_mei   | shohin_bunrui | hanbai_tanka | shiire_tanka |  torokubi  
-----------+----------------+---------------+--------------+--------------+------------
 0001      | Tシャツ        | 衣服          |         1000 |          500 | 2009-09-20
 0002      | 穴あけパンチ   | 事務用品      |          500 |          320 | 2009-09-11
 0003      | カッターシャツ | 衣服          |         4000 |         2800 | 
 0004      | 包丁           | キッチン用品  |         3000 |         2800 | 2009-09-20
 0005      | 圧力鍋         | キッチン用品  |         6800 |         5000 | 2009-01-15
 0006      | フォーク       | キッチン用品  |          500 |              | 2009-09-20
 0007      | おろしがね     | キッチン用品  |          880 |          790 | 2008-04-28
 0008      | ボールペン     | 事務用品      |          100 |              | 2009-11-11

TRUNCATE:全行を削除

TRUNCATEとは、「切り捨てる」という意味

/* 削除を確定させないため
	(ROLLBACKとセット) */
BEGIN;

TRUNCATE Shohin;

SELECT * FROM Shohin ORDER BY shohin_id ASC;

/* データのみ削除 */
 shohin_id | shohin_mei | shohin_bunrui | hanbai_tanka | shiire_tanka | torokubi 
-----------+------------+---------------+--------------+--------------+----------
  • TRUNCATEでは WHERE句を使った条件指定はできない
  • その代わり、処理速度が速い
/* 削除を確定させないため
	(BEGINとセット) */
ROLLBACK;

SELECT * FROM Shohin ORDER BY shohin_id ASC;

/* データは元通り */
 shohin_id |   shohin_mei   | shohin_bunrui | hanbai_tanka | shiire_tanka |  torokubi  
-----------+----------------+---------------+--------------+--------------+------------
 0001      | Tシャツ        | 衣服          |         1000 |          500 | 2009-09-20
 0002      | 穴あけパンチ   | 事務用品      |          500 |          320 | 2009-09-11
 0003      | カッターシャツ | 衣服          |         4000 |         2800 | 
 0004      | 包丁           | キッチン用品  |         3000 |         2800 | 2009-09-20
 0005      | 圧力鍋         | キッチン用品  |         6800 |         5000 | 2009-01-15
 0006      | フォーク       | キッチン用品  |          500 |              | 2009-09-20
 0007      | おろしがね     | キッチン用品  |          880 |          790 | 2008-04-28
 0008      | ボールペン     | 事務用品      |          100 |              | 2009-11-11

【注意】TRUNCATEがROLLBACKできるのはPostgreSQLだから

  • Oracle・MySQLでは実行した瞬間に確定し、取り消せない
  • ※DROP TABLEと同様、DBMSによって取り消せる範囲が違う

関連記事:【SQL】UPDATE:データの更新

参考書籍:ミック『SQL 第2版 ゼロからはじめるデータベース操作』(翔泳社)