【SQL】DELETE:データの削除
データの削除方法
| 文 | 説明 |
|---|---|
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版 ゼロからはじめるデータベース操作』(翔泳社)