テーブルからレコード削除を行うDELETE文について初心者向けにわかりやすく1分で解説します。
参考 SQLとは?
前提となる知識は一切必要ありません。このページ内を読めば自分ひとりでテーブルからレコード削除が行えるようになるようサンプルコード付きでご説明します。
プログラマーやデータベースエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識。是非最後までご覧ください。
SQL文の基本ルール(大文字/小文字の区別、コメントの付与など)を始めに学んでおきたい方は以下の記事を先にご覧ください。
SQL:DELETE文
DELETE文はテーブルからレコードを削除する場合に利用します。
構文ルールは以下の通り非常にシンプルです。
DELETE FROM テーブル名;
以下のテーブル "PointList" に存在するレコードを削除してみます。
SELECT * FROM PointList; /* +----+------+-------+----------+------+---------+ | ID | Name | Class | Japanese | Math | English | +----+------+-------+----------+------+---------+ | 1 | 佐藤 | A | 100 | 100 | 85 | | 2 | 鈴木 | A | 90 | 70 | 70 | | 3 | 高橋 | A | 85 | 70 | 65 | | 4 | 中村 | A | 90 | 65 | 85 | | 5 | 小林 | B | 70 | 90 | 65 | | 6 | 山口 | B | 90 | 85 | 85 | | 7 | 田中 | B | 70 | 90 | 65 | | 8 | 伊藤 | B | 70 | 90 | NULL | +----+------+-------+----------+------+---------+ */
シンプルなDELETE文ではレコードを削除したいテーブルを指定するだけなので、SQLは以下の通りとなります。
DELETE FROM PointList; -- 結果 Empty set (0.00 sec)
ただし、通常このようなシンプルなDELETE文を使うことはありません。
普通、DELETE文を使うときは削除したいレコードが特定されていることが一般的です。上記のようなDELETE文を利用すると、テーブルに存在するすべてのレコードが一気に削除されてしまうため、基本的には次に紹介するようにWHERE句を利用する使用方法が一般的です。
次の章で、DELETE文におけるWHERE句の利用方法を解説します。
DELETE文:WHERE句
削除対象を制限するにはSELECT文と同様にWHERE句で条件を指定します。
DELETE FROM テーブル名 WHERE 条件式;
先ほど例にしたテーブルから1行目のレコードだけを削除する場合を考えてみましょう。
WHERE句の記述方法はSELECT文と同様なので、1行目のレコードだけが一意になるような条件を指定します。
-- ID列が「1」のレコードのみを削除 DELETE FROM PointList WHERE ID = 1; /*1行目のレコードのみが削除される +----+------+-------+----------+------+---------+ | ID | Name | Class | Japanese | Math | English | +----+------+-------+----------+------+---------+ | 2 | 鈴木 | A | 90 | 70 | 70 | | 3 | 高橋 | A | 85 | 70 | 65 | | 4 | 中村 | A | 90 | 65 | 85 | | 5 | 小林 | B | 70 | 90 | 65 | | 6 | 山口 | B | 90 | 85 | 85 | | 7 | 田中 | B | 70 | 90 | 65 | | 8 | 伊藤 | B | 70 | 90 | NULL | +----+------+-------+----------+------+---------+ */
このようにWHERE句で条件を指定してレコード削除を行うのが通常のDELETE文です。
もしSELECT文と同様に複数のレコードを削除したい場合は、以下のようにWHERE句の条件を変えればOK。
DELETE FROM Pointlist WHERE Class = 'A'; /* 2行目~4行目のレコード(Class列がAのもの)が一度に削除される +----+------+-------+----------+------+---------+ | ID | Name | Class | Japanese | Math | English | +----+------+-------+----------+------+---------+ | 5 | 小林 | B | 70 | 90 | 65 | | 6 | 山口 | B | 90 | 85 | 85 | | 7 | 田中 | B | 70 | 90 | 65 | | 8 | 伊藤 | B | 70 | 90 | NULL | +----+------+-------+----------+------+---------+ */
Tips:特定のカラム(列)だけデータを削除したい場合
DELETE文を使用して、特定のカラム(列)のデータだけを削除することはできません。ただし、以下のようにUPDATE文を使用して、特定のフィールドをNULLまたは空白に更新することができます。
UPDATE Pointlist SET Japanese = NULL; /* 結果→Japanese列がすべてNullに変換される +----+------+-------+----------+------+---------+ | ID | Name | Class | Japanese | Math | English | +----+------+-------+----------+------+---------+ | 1 | 佐藤 | A | NULL | 100 | 85 | | 2 | 鈴木 | A | NULL | 70 | 70 | | 3 | 高橋 | A | NULL | 70 | 65 | | 4 | 中村 | A | NULL | 65 | 85 | | 5 | 小林 | B | NULL | 90 | 65 | | 6 | 山口 | B | NULL | 85 | 85 | | 7 | 田中 | B | NULL | 90 | 65 | | 8 | 伊藤 | B | NULL | 90 | 65 | +----+------+-------+----------+------+---------+ */
参考 UPDATE文
もし、特定のレコードのみを対象にしたい場合は、先ほどご説明したWHERE句を追加して条件を指定しましょう。
DROP TABLE との混同に注意
最後にSQL初心者が混同しがちな点について注意喚起です。DELETE文はレコードの削除を行うSQL文ですが、似たようなイメージを持つSQL文に "DROP TABLE文" があります。
参考 DROP TABLE
レコードのみを消したいはずなのに、誤ってテーブルごと削除してしまう。もしくは、テーブルを削除したいのに、DELETE文を実行する、などの混同が初心者のうちはよく起こりがち。
DELETE文を利用する場合、SQLにまだ慣れないうちはこの点要注意です。
--テーブル削除実行前 show tables; /* +--------------------+ | Tables_in_sampledb | +--------------------+ | attendancehistory | | avg_pointlist | | classmember | | memberlist_a | | memberlist_b |←削除対象 | pointlist | | subpointlist | +--------------------+ */ -- テーブル削除実行 DROP TABLE memberlist_b; SHOW TABLES; /* +--------------------+ | Tables_in_sampledb | +--------------------+ | attendancehistory | | avg_pointlist | | classmember | | memberlist_a | | pointlist | | subpointlist | +--------------------+ */
SQLを1から学習したい方は
SQLやデータベースの仕組みを1から学習したい方(学び直したい方)向けに、現役エンジニア達のスキルを結集して 完全無料 のSQL教材を作成しました。
SQLは決して難しい技術ではないので、エンジニアであれば「当たり前のように」扱えて当然かも・・・?
とはいえ、案外SQLをちゃんと使ったことがない人も多いはずです。この機会に是非一度ご覧になってみてください。
システムエンジニアを目指したい方は
システムエンジニアを目指す方や、IT知識を1から身につけたい方は以下のページをご覧ください。
正直どこから学び始めればよいかわからない。どのように勉強していけば、エンジニアとしてのスキルが磨けるか?が分からない・・・という方は必見です。
システムエンジニア向けに「できるエンジニア」になる方法を1から解説しておりますので、是非ご覧ください。