SOLDOUT@DB
トップ > SQL入門 > 23章
23章 データ削除
では、次はレコードの削除方法について確認していきましょう。

DELETE


DELETE文を使用すると既存のレコードを削除することができます。

では、構文を確認していきましょう。

[構文] 行の挿入(すべての列の挿入)
 DELETE [FROM] 表名
 [WHERE 条件式];

レコードの削除の構文は簡単ですね。FROMは省略可能です。
UPDATE同様、WHERE句を指定しない場合は、全レコードを削除します。

ただし、全レコードが削除されても表自体が削除されるわけではありません。
表の定義は残っています。後半で紹介しますが、
表を削除する場合は、DROP TABLE文を使用します。

では実行例です。
  SQL> SELECT emp_id,first_name FROM employees WHERE emp_id = 15;

      EMP_ID FIRST_NAME                    
  ---------- ------------------------------
          15 Kato                           

  SQL> DELETE employees WHERE emp_id = 15;

  1 row deleted.

  SQL> SELECT emp_id,first_name FROM employees WHERE emp_id = 15;

  no rows selected
  

WHERE句を使用してemp_idが15の従業員を削除しました。
その後SELECTを実行していますが、表示されていないことが分かります。

続いて、全行の削除をみていきましょう。
  SQL> SELECT emp_id,first_name FROM employees;

      EMP_ID FIRST_NAME
  ---------- ------------------------------
           1 Suzuki
           2 Sato
           3 Yamamoto
           4 Watanabe
           5 Watanabe
           6 Kataoka
           7 Harada
           8 Koda
           9 Saito
          10 Akagi
          11 Sato
          12 Tao
          13 Kaneko
          14 Totsuka
          15 Kato
          16 Sinagawa
          17 Kuroda
          18 Nakamura
          19 Kamata
          20 Ito

  20 rows selected.

  SQL> DELETE employees;

  20 rows deleted.

  SQL> SELECT emp_id,first_name FROM employees;

  no rows selected

  SQL> DESC employees
  
   Name                         Null?    Type
   ---------------------------- -------- ---------------------
   EMP_ID                       NOT NULL NUMBER(10)
   FIRST_NAME                            VARCHAR2(30)
   LAST_NAME                             VARCHAR2(30)
   ADDRESS                               VARCHAR2(100)
   TEL                                   VARCHAR2(12)
   SALARY                                NUMBER(30)
   HIRE_DATE                             DATE
   MANAGER_ID                            NUMBER(10)
   DEPT_ID


今回はWHERE句を指定していないので、すべてのレコードを削除しました。
SELECTを行っても表示されていないことが分かります。

ただし、DESCRIBEコマンドは実行できることが分かります。
つまりレコードはすべて削除されましたが、表自体は存在しています。

今回は紹介しませんが、DELETE文もUPDATE同様にWHERE句に
副問合せを使用することができます。

いかがでしたでしょうか。INSERT,UPDATE,DELETEコマンドを使用することで
データベースに対する操作を行えるようになりました。以上がDML文の内容となります。

TRUNCATE


またTRUNCATE文というコマンドがあり、こちらもレコードの削除を行います。
ただしTRUNCATEは全行の削除を行います。

[構文] 行の挿入(すべての列の挿入)
 TRUNCATE TABLE 表名;

構文は非常に簡単ですね。このTRUNCATEコマンドで全行の削除が行えます。
DELETE文でもWHERE句を付けなければ全行の削除が行えますが、どう違うのでしょうか。
DELETEとTRUNCATE文の違いを以下にまとめました。

DELETEとTRUNCATEの違い
DELETE TRUNCATE
DML文 DDL文
削除行を元に戻すことができる
(ロールバック)
削除行を元に戻すことができない
処理が遅い
処理が高速

上記が違いとなります。大きな違いはDELETE文は削除するときに、
元に戻すための情報も併せて生成するため、
元に戻すことが可能ですが、その分処理が遅くなります。

一方、TRUNCATEは元に戻す情報は生成しないため、処理が高速です。
ただし、元には戻せません。

どちらを使うかはその状況次第ということになります。



更新情報

2017.03.25
Silver DBAをオープンしました
2017.04.12
Gold DBA バックアップリカバリをオープンしました
2017.05.22
Gold DBA マルチコンテナをオープンしました
2018.04.24
Expert RACデータベースをオープンしました