📣新登場!TiDB Cloud BYOC、TiDB Cloud Filesystem、PostgreSQL-compatible TiDB Cloud Starter がパブリックプレビュー中。このページは自動翻訳されたものです。原文はこちらからご覧ください。

DELETE



テーブルから1行以上を削除します。

構文

DELETE FROM <table_name> [AS <table_alias>] [WHERE <condition>]
  • AS <table_alias>: テーブルにエイリアスを設定できるため、クエリ内でそのテーブルを参照しやすくなります。これは、特に複数のテーブルを含む複雑なクエリを扱う場合に、SQL コードの簡略化と短縮に役立ちます。例については、EXISTS / NOT EXISTS 句を使用したサブクエリによる削除 を参照してください。

  • DELETE はまだ USING 句をサポートしていません。削除する行を特定するためにサブクエリを使用する必要がある場合は、それを WHERE 句内に直接含めてください。例については、サブクエリベースの削除 を参照してください。

例

例 1: 行の直接削除

この例では、DELETE コマンドを使用して、"bookstore" テーブルから ID が 103 の書籍レコードを直接削除する方法を示します。

-- Create a table and insert 5 book records CREATE TABLE bookstore ( book_id INT, book_name VARCHAR ); INSERT INTO bookstore VALUES (101, 'After the death of Don Juan'); INSERT INTO bookstore VALUES (102, 'Grown ups'); INSERT INTO bookstore VALUES (103, 'The long answer'); INSERT INTO bookstore VALUES (104, 'Wartime friends'); INSERT INTO bookstore VALUES (105, 'Deconstructed'); -- Delete a book (Id: 103) DELETE FROM bookstore WHERE book_id = 103; -- Show all records after deletion SELECT * FROM bookstore; 101|After the death of Don Juan 102|Grown ups 104|Wartime friends 105|Deconstructed

例 2: サブクエリベースの削除

削除対象の行を特定するためにサブクエリを使用する場合は、サブクエリ演算子 および 比較演算子 を使用して、目的の削除を実現できます。

このセクションの例は、次の 2 つのテーブルに基づいています。

-- Create the 'employees' table CREATE TABLE employees ( id INT, name VARCHAR, department VARCHAR ); -- Insert values into the 'employees' table INSERT INTO employees VALUES (1, 'John', 'HR'); INSERT INTO employees VALUES (2, 'Mary', 'Sales'); INSERT INTO employees VALUES (3, 'David', 'IT'); INSERT INTO employees VALUES (4, 'Jessica', 'Finance'); -- Create the 'departments' table CREATE TABLE departments ( id INT, department VARCHAR ); -- Insert values into the 'departments' table INSERT INTO departments VALUES (1, 'Sales'); INSERT INTO departments VALUES (2, 'IT');

IN / NOT IN 句を使用したサブクエリによる削除

DELETE FROM EMPLOYEES WHERE DEPARTMENT IN ( SELECT DEPARTMENT FROM DEPARTMENTS );

これは、departments テーブル内のいずれかの department と一致する department を持つ従業員を削除します。この場合、ID が 2 と 3 の従業員が削除されます。

EXISTS / NOT EXISTS 句を使用したサブクエリによる削除

DELETE FROM EMPLOYEES WHERE EXISTS ( SELECT * FROM DEPARTMENTS WHERE EMPLOYEES.DEPARTMENT = DEPARTMENTS.DEPARTMENT ); -- Alternatively, you can delete employees using the alias 'e' for the 'EMPLOYEES' table and 'd' for the 'DEPARTMENTS' table when their department matches. DELETE FROM EMPLOYEES AS e WHERE EXISTS ( SELECT * FROM DEPARTMENTS AS d WHERE e.DEPARTMENT = d.DEPARTMENT );

これは、departments テーブルに存在する department に所属する従業員を削除します。この場合、ID が 2 と 3 の従業員が削除されます。

ALL 句を使用したサブクエリによる削除

DELETE FROM EMPLOYEES WHERE DEPARTMENT = ALL ( SELECT DEPARTMENT FROM DEPARTMENTS );

これは、department テーブル内のすべての department と一致する department を持つ従業員を削除します。この場合、削除される従業員はいません。

ANY 句を使用したサブクエリによる削除

DELETE FROM EMPLOYEES WHERE DEPARTMENT = ANY ( SELECT DEPARTMENT FROM DEPARTMENTS );

これは、departments テーブル内のいずれかの department と一致する department を持つ従業員を削除します。この場合、ID が 2 と 3 の従業員が削除されます。

複数条件を組み合わせたサブクエリによる削除

DELETE FROM EMPLOYEES WHERE DEPARTMENT = ANY ( SELECT DEPARTMENT FROM DEPARTMENTS WHERE EMPLOYEES.DEPARTMENT = DEPARTMENTS.DEPARTMENT ) OR ID > 2;

これは、employees テーブルにおいて、department カラムの値が departments テーブルの department カラム内のいずれかの値と一致する場合、または id カラムの値が 2 より大きい場合に、従業員を削除します。この場合、Mary の department は departments テーブルに存在する "Sales" であり、さらに ID 3 と 4 は 2 より大きいため、id が 2、3、4 の行が削除されます。

このページは役に立ちましたか?