SQLでデータ削除する方法
SQLでテーブルを作成したり、データを挿入することはよく行う操作方法です。
また、データ削除することも合わせてよく行われる操作の一つでしょう。
この記事では、SQLでデータやテーブルを「削除」する方法について解説します。
まず、ここではデータ削除する方法について見ていきましょう。
データを削除する際には、次の2つの構文が使用可能です。
- DELETE構文
- TRUNCATE構文
1つずつ使い方を確認してみましょう。
(1)DELETE構文
DELETE構文は、テーブル内にあるデータ・レコードを削除する構文です。
後述する WHERE句 や ORDER BY句 と組み合わせて、特定のデータだけを削除することもできます。
基本的なSQL文の記述方法は次の通りです。
DELETE FROM テーブル名;
では、実際に操作して確認してみましょう。
確認するために、次のテーブル・データを用意しました。
mysql> SELECT * FROM sample_table; +------+--------+ | id | name | +------+--------+ | 1 | Satou | | 2 | Abe | | 3 | Tanaka | | 4 | Itou | | 5 | Kishi | +------+--------+ 5 rows in set (0.00 sec)
この sample_tableテーブル のデータを削除してみましょう。
次のように記述します。
mysql> DELETE FROM sample_table; Query OK, 5 rows affected (0.00 sec)
上記のように、「Query OK」と表示されればデータの削除ができました。
念のため、テーブル内のデータを確認してみましょう。
mysql> SELECT * FROM sample_table; Empty set (0.00 sec)
「Empty set」と表示されており、テーブル内のデータ・レコードがないことがわかります。
WHERE句 と組み合わせて使う方法は、「(1)WHERE句で複数削除する」で解説しますね。
ORDER BY句 と組み合わせて使う方法は、「(2)ORDER BYで複数削除する」で解説します。
(2)TRUNCATE構文
TRUNCATE構文も、テーブル内にあるデータ・レコードを削除する構文です。
DELETE構文とは異なり、WHERE句 で条件指定ができません。
そのため、テーブル内のデータはすべて削除されます。
SQL文の記述方法は次の通りです。
TRUNCATE TABLE テーブル名;
DELETE構文と記述方法は同じで、FROM句の後ろにテーブル名を記述しましょう。
TRUNCATE構文も実際に操作して確認してみます。
mysql> TRUNCATE TABLE sample_table; Query OK, 0 rows affected (0.04 sec) mysql> SELECT * FROM sample_table; Empty set (0.00 sec)
上記のように、テーブル内のデータがすべて削除されました。
テーブルを削除する方法【DROP TABLE】
ここまで、SQLでテーブル内のデータ・レコードを削除する方法を紹介しました。
次に、テーブルを削除する方法について見ていきましょう。
テーブルを削除するには DROP TABLE構文 を使います。
記述方法は次の通りです。
DROP TABLE テーブル名;
DELETE構文 や TRUNCATE構文 と使い方は同じく、DROP TABLE の後ろに削除したいテーブル名を記述します。
では、先ほど作成した sample_tableテーブル を削除してみましょう。
次のように記述できます。
DROP TABLE sample_table;
上記のSQL文を実行してテーブルを確認してみると、ちゃんと削除されていることがわかります。
mysql> DROP TABLE sample_table; Query OK, 0 rows affected (0.10 sec) mysql> SELECT * FROM sample_table; ERROR 1146 (42S02): Table 'mydb.sample_table' doesn't exist
では次に、削除を複数同時に行う方法について見ていきましょう。
SQLで削除を複数同時に行う【WHERE/ORDER BY】
ここまで、データ・レコードとテーブルを削除する方法を紹介しました。
削除するときに「指定した条件で複数個、削除したい」という場合もあるでしょう。
また、「テーブルを複数同時に削除したい」場合もありますよね。
ここでは、複数のデータ・レコード、テーブルを削除する方法について、次の順番で解説します。
- WHERE句で複数削除する
- ORDER BYで複数削除する
- テーブルを複数削除する
1つずつ見ていきましょう。
(1)WHERE句で複数削除する
まずは、WHERE句 を使って指定した条件に当てはまるデータを削除してみましょう。
sample_tableテーブル の構成を、次のように少し変えてみました。
mysql> SELECT * FROM sample_table; +------+--------+-------+------------+ | id | name | class | dt | +------+--------+-------+------------+ | 1 | Satou | 1 | 2020-10-01 | | 2 | Abe | 1 | 2020-10-04 | | 3 | Tanaka | 2 | 2020-10-17 | | 4 | Itou | 2 | 2020-10-21 | | 5 | Kishi | 1 | 2020-10-28 | +------+--------+-------+------------+ 5 rows in set (0.01 sec)
このテーブル内にある、dtカラム の値が「2020-10-10」以前のデータだけ削除してみましょう。
次のように記述できます。
DELETE FROM sample_table WHERE dt < '2020-10-10';
先ほど解説したように、TRUNCATE構文 は WHERE句 が使えないので、ここでは DELETE構文を使いましょう。
上記のSQL文を実行してテーブルのデータを確認してみると、次のようになるはずです。
mysql> DELETE FROM sample_table WHERE dt < '2020-10-10'; Query OK, 2 rows affected (0.01 sec) mysql> SELECT * FROM sample_table; +------+--------+-------+------------+ | id | name | class | dt | +------+--------+-------+------------+ | 3 | Tanaka | 2 | 2020-10-17 | | 4 | Itou | 2 | 2020-10-21 | | 5 | Kishi | 1 | 2020-10-28 | +------+--------+-------+------------+ 3 rows in set (0.00 sec)
ちゃんと条件に当てはまるデータが複数削除できました!
(2)ORDER BYで複数削除する
次に、ORDER BYでデータを複数削除する方法をみていきましょう。
ORDER BY句 と LIMIT句 を組み合わせることで、指定したカラムの値を昇順か降順に並び替えた状態でデータの削除が可能です。
では、sample_tableテーブル の日付が古い順から3件のデータ・レコードを削除してみましょう。
次のように記述します。
DELETE FROM sample_table ORDER BY dt LIMIT 3;
上記のSQL文を実行後、テーブルを確認してみると次のようになっているはずです。
mysql> SELECT * FROM sample_table; +------+-------+-------+------------+ | id | name | class | dt | +------+-------+-------+------------+ | 4 | Itou | 2 | 2020-10-21 | | 5 | Kishi | 1 | 2020-10-28 | +------+-------+-------+------------+ 2 rows in set (0.01 sec)
逆に、新しい日付から順番に3件削除したい場合は、次のように「DESC」を使えばOKです。
DELETE FROM sample_table ORDER BY dt DESC LIMIT 3;
実行結果は省略します。
(3)テーブルを複数削除する
テーブルを複数同時に削除したい場合は、DROP TABLE構文 のテーブル名をカンマ区切りで複数記述すればOKです。
次のようになります。
DROP TABLE テーブル名1, テーブル名2, テーブル名3, …;
こちらも実行結果は省略しますが、ちゃんと指定したテーブルが削除できます。
まとめてテーブルを削除したい場合に便利なので、覚えておきましょう!