目次
デリート(DELETE)とは?
SQLのデリートは、データベースのテーブル内にあるデータを削除する命令のことです。
データの追加や削除などは、データベースを扱う上で必須知識なのでしっかり覚えておきましょう。
- データの追加:INSERT文
- データの取得:SELECT文
- データの更新:UPDATE文
- データの削除:DELETE文
【関連記事】
▶︎SQLのインサート(INSERT)でデータを簡単に追加するやり方まとめ
▶︎【SQL】データベースで条件を設定して更新する。WHEREを使ったUPDATEについての解説。
デリートの使い方
では、デリートの使い方について見ていきましょう。
DELETE文は次のように記述します。
DELETE FROM テーブル名;
上記のように、「DELETE FROM」の後ろにテーブル名を指定することで、テーブル内のデータをすべて削除できます。
サンプルを使ってテーブル内のデータを削除してみましょう。
ここでは、次のテーブルのデータを削除します。
mysql> SELECT * FROM テスト; +------+--------+ | id | name | +------+--------+ | 1 | 鈴木 | | 2 | 高橋 | | 3 | 田中 | +------+--------+ 3 rows in set (0.00 sec)
DELETE文を記述します。
mysql> DELETE FROM テスト; Query OK, 3 rows affected (0.01 sec)
上記のように「Query OK」と表示されれば削除ができています。
もう一度、テーブル内のデータを確認してみると、データが削除されているはずです。
mysql> SELECT * FROM テスト; Empty set (0.00 sec)
また、テーブル内の指定データを削除する場合は、次のように記述しましょう。
DELETE FROM テーブル名 WHERE 条件式;
「WHERE句」を記述し、該当データの条件を指定します。
例えば、テーブルの idカラム の値が「001」のデータを削除する場合は、次のようになります。
DELETE FROM user_datalist WHERE id = 1;
上記のように、WHERE句の後ろに条件(idカラム の値が「001」)を記述しましょう。
なおWHERE句の使い方は、次の記事で詳しく解説しているので必要であれば参考にしてください!
デリート以外でもよく使う構文なので、しっかり覚えておくとよいでしょう。
【関連記事】
▶︎【SQL】基本だけど重要!条件式の設定”WHERE句”について解説。
デリートインサート(DELETE-INSERT)とは?
Oracleデータベースには、「デリートインサート(DELETE-INSERT)」という構文があります。
これはその名の通り、「DELETE」と「INSERT」を組み合わせており、データ登録と更新を同じロジックで動作させます。
似た動作に「UPDATE」がありますが、その書き方や実行方法は違います。
ただし、条件によっては DELETE-INSERT と UPDATE のどちらでも、同じ結果を得ることも可能です。
「では、この2つはどのように使い分けるの?」と思う人もいるでしょう。
使い分けのポイントは「DELETE」にあります。
UPDATEは、データの削除をする必要がなければ使用しましょう。
一方、DELETE-INSERTは、データを一度削除した方が都合が良い場合に使うとよいです。
補足として、アップデートとインサートを同時に行うSQLに「MERGE」があります。
MERGEの概要や使い方については、次の記事で説明していますので参考までに。
【関連記事】
▶︎【SQL】UPDATEとINSERTを同時に行う便利なクエリ「merge」についての解説
デリートとトランケート(TRUNCATE)、ドロップ(DROP)の違いは?
デリートはテーブル内のデータを削除すると紹介しました。
実は、デリートと似たSQLに「トランケート(TRUNCATE)」と「ドロップ(DROP)」があるのです。
ここでは、デリートとそれぞれの違いについて解説します。
トランケート(TRUNCATE)とは?
トランケートは、テーブル内のデータをすべて削除するSQLです。
記述方法は次のようになります。
TRUNCATE TABLE テーブル名;
テーブル内のデータを削除する点は、デリートと同様です。
異なる点として、トランケートはWHERE句での条件指定ができません。
そのため、「特定のデータを削除したい」場合には使えないのです。
そうなると「トランケートを使う必要はあるの?」と思うかもしれません。
トランケートのメリットとしては、テーブルごと削除してから再作成するため、DELETE文よりも高速に削除できる点になります。
データが多い場合などにそのメリットを教授できるでしょう。
ただし、ロールバックはできないため注意が必要です。
【関連記事】
▶︎SQLのレコード削除はdeleteを使用。truncateで高速全削除も可能
ドロップ(DROP)とは?
ドロップは、テーブル内のオブジェクトを完全に削除するSQLです。
記述方法は次のようになります。
DROP TABLE テーブル名;
ドロップは、データだけではなくテーブルも完全に削除します。
そのため、ロールバックができず、テーブル構造も残りません。
そのため、デリートに比べるとより注意が必要な構文と言えます。
【関連記事】
▶︎【SQL】テーブルを削除するDROP TABLE文の使い方をていねいに解説
NULLデータをデリートする
NULLを条件にデータを削除したいのですが、できますか?
できます!NULLを条件にする場合は「IS NULL演算子」を使いましょう。使い方を説明します!
上記のように、SQLでNULLを判定するには「IS NULL」という演算子を使います。
使い方としては、次の通りです。
DELETE FROM テーブル名 WHERE カラム名 IS NULL;
テーブル名を指定し、NULLの判定をしたいカラム名で条件式を記述します。
これで、カラムの値が NULL のデータが削除可能です。
IS NULL演算子の使い方を詳しく知りたい人は、次の記事を参考にしてみてください!
【関連記事】
▶︎SQLのNULL比較にはIS NULL演算子を使う ストアドファンクションでも同様
デリートで複数削除するには?
テーブル内の指定データを削除する場合には WHERE句 を使うことを先述しました。
しかし、WHERE句 と条件式だけでは、1つの条件に当てはまったデータしかデリートできません。
条件を複数設定した上で、データを複数デリートしたい場合は「IN句」を使うと便利です。
使い方は次のようになります。
DELETE FROM テーブル名 WHERE カラム名 IN (条件1, 条件2 , 条件3, …);
上記のSQLで、IN句内に記述した条件に当てはまるデータをすべて削除可能です。
実際に使う場合は、例えば次のようになるでしょう。
DELETE FROM user_datalist WHERE user_id IN (001, 007, 013);
上記のSQL文であれば、user_datalistテーブル の user_idカラム の値が「001」「007」「013」の3つのデータが削除されます。
当然、同じuser_idの値のデータすべてがデリートできるのです。
SELECTと組み合わせてデリートも可能
データのデリートは、SELECTで取得した結果を使って行うこともできます。
記述方法は次の通りです。
DELETE FROM テーブル1 WHERE カラム名 IN ( SELECT カラム名 FROM テーブル2 WHERE 条件式 );
上記のSQLを少し解説すると、IN句内でSELECT文を行っています。
そして、テーブル2 の条件に当てはまるカラムを、テーブル1の条件に設定しています。
これによって、テーブル2の内容によって、テーブル1でデリートするデータが変わります。
SELECTで取得した結果を使ったデリートを行う場合は、削除するテーブルと同じテーブルをSELECTで取得することはできません。
エラーとなってしまうため注意してください。
まとめ
SQLのデリートの概要や使い方について解説しました。
デリートはテーブル内のデータを一括で削除できたり、条件を指定して削除できるといった便利さがあります。
また、条件式や演算子を組み合わせることで柔軟にデータの指定が可能です。
ぜひこの記事や他記事も合わせて、デリートの使い方をマスターしてください!
UPDATE:データ更新のみ(削除なし)
DELETE-INSERT:データ削除後に更新