SQL - DELETE Query: A Friendly Guide for Beginners
こんにちは、SQLに興味を持つ皆さん!今日は、SQLのDELETEクエリの世界に飛び込んでみましょう。プログラミングの初心者でも心配ありません。私はこれまでに多くの学生を指導してきましたので、ステップバイステップで案内します。コーヒー(またはお好みで茶)を片手に、始めましょう!
The SQL DELETE Statement
デジタルフォトアルバムを整理していると、特定の写真を削除したい时候がありますよね?SQLのDELETE文もまさにそれを行います。不要なデータをデータベースのテーブルから削除するのです。
以下はDELETE文の基本構文です:
DELETE FROM table_name
WHERE condition;
これを分解してみましょう:
-
DELETE FROM
:特定のテーブルから何かを削除したいときに使用します。 -
table_name
:テーブル名に置き換えてください。 -
WHERE
:これはオプションですが、重要です。どの行を削除するかを指定します。 -
condition
:削除の基準を設定します。
例1: 単一行の削除
students
というテーブルがあり、名前がJohn Doeの学生を削除したいとします:
DELETE FROM students
WHERE name = 'John Doe';
このクエリは、名前が正確に'John Doe'の行を削除します。ただし、複数のJohn Doeがいる場合、すべて削除されるので注意してください。
例2: 数値条件に基づく削除
25歳以上の学生を全員削除したいとします:
DELETE FROM students
WHERE age > 25;
これは年齢が25歳を超えるすべての行を削除します。データベースに向かって「Hey、車をレンタルするのに余計な手数料が不要な年齢に達した人を削除してくれ!」と言っているようなものです。
複数行の削除
特定の条件を満たす複数行を削除したい場合もあります。いくつかの例を見てみましょう。
例3: 複数の条件に基づく行の削除
30歳以上でGPAが2.5未満の学生を全員削除したいとします:
DELETE FROM students
WHERE age > 30 AND gpa < 2.5;
このクエリは、2つの条件をANDで結合して、30歳以上で学業が困難な学生を削除します。
例4: 値のリストに基づく行の削除
特定の都市に住む学生を削除したい場合、IN句を使用します:
DELETE FROM students
WHERE city IN ('New York', 'Los Angeles', 'Chicago');
このクエリは、ニューヨーク、ロサンゼルス、シカゴに住むすべての学生を削除します。VIPリストを作成するのとは逆に、削除リストを作成しています!
テーブルからすべてのレコードを削除
時には、テーブル全体をクリアしたい場合があります。クローゼット全体を空にして新しい始まりを切りたいときのようなものです。以下のようにします:
DELETE FROM table_name;
例えば、studentsテーブルのすべてのレコードを削除するには:
DELETE FROM students;
⚠️ 警告:このコマンドには非常に注意してください!部屋を片付けるために火炎放射器を使うようなものです。間違った使い方をすると、非常に危険な結果になる可能性があります。
複数のテーブルからレコードを削除
少しレベルアップしましょう。関連する複数のテーブルから一度にレコードを削除する必要がある場合があります。これは少し複雑になりますが、心配しないでください。
例5: JOINを使用した複数テーブルからの削除
students
とenrollments
という2つのテーブルがあり、料金を支払わない学生のすべての履歴と学生記録を削除したいとします:
DELETE students, enrollments
FROM students
JOIN enrollments ON students.id = enrollments.student_id
WHERE students.fees_paid = 0;
このクエリは以下のことを行います:
-
students
とenrollments
テーブルを結合します。 - 料金を支払わない学生を探します。
- 一致するレコードを両方のテーブルから削除します。
これは、連絡先リストから特定の人を削除し、同時にその人をすべてのグループチャットから削除するようなものです!
例6: サブクエリを使用した削除
他のテーブルのデータに基づいて削除を行うが、実際には結合しない場合があります。以下はその例です:
DELETE FROM enrollments
WHERE student_id IN (
SELECT id
FROM students
WHERE graduation_year < 2020
);
このクエリは、2020年以前に卒業した学生のすべての履歴を削除します。これは、「引っ越した人々のイベント招待をすべて削除する」と言っているようなものです。
DELETEメソッドの摘要
ここでカバーしたDELETEメソッドの簡単な参照表を示します:
メソッド | 説明 | 例 |
---|---|---|
基本DELETE | 条件に基づいて行を削除 | DELETE FROM students WHERE name = 'John Doe'; |
複数条件DELETE | 複数の基準を満たす行を削除 | DELETE FROM students WHERE age > 30 AND gpa < 2.5; |
IN句DELETE | 値のリストに基づいて行を削除 | DELETE FROM students WHERE city IN ('New York', 'Los Angeles', 'Chicago'); |
全レコードDELETE | テーブルのすべての行を削除 | DELETE FROM students; |
JOINを使用したDELETE | 関連する複数テーブルからの削除 | DELETE students, enrollments FROM students JOIN enrollments ON students.id = enrollments.student_id WHERE students.fees_paid = 0; |
サブクエリDELETE | 他のクエリの結果に基づいて削除 | DELETE FROM enrollments WHERE student_id IN (SELECT id FROM students WHERE graduation_year < 2020); |
そして、ここまででSQLのDELETEクエリの詳細を学びました。力には責任が伴います。WHERE句を確認してからDELETEクエリを実行し、可能であれば、まずSELECTクエリを実行して削除する内容をプレビューすることをお勧めします。
これらのクエリを練習し、遊びながら、プロのようにデータを削除できるようになるまで練習してください!ただし、現実の世界では、データを永久的に削除するよりもまずアーカイブすることのほうが良いことが多いです。快適なクエリを楽しんで、データベースを常に整理整頓しましょう!
Credits: Image by storyset