DELETE
このステートメントにより、データベース テーブルまたはビューから指定された行を削除します。
構文
DELETE [FROM] <テーブル名 | ビュー名> [エイリアス名]
[FROM テーブル参照[, テーブル参照]...
[WHERE 検索条件]
テーブル名 ::= ユーザー定義名
ビュー名 ::= ユーザー定義名
テーブル参照 ::= {OJ 外部結合の定義}
| [
データベース名.]
テーブル名 [[
AS]
エイリアス名]
| [
データベース名.]
ビュー名 [[
AS]
エイリアス名]
| 結合定義
| (結合定義)
| (
テーブルサブクエリ) [
AS]
エイリアス名 [(
列名[,
列名]...)]
外部結合の定義 ::= テーブル参照 外部結合タイプ JOIN テーブル参照 ON 検索条件
外部結合タイプ ::= LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER]
検索条件 ::= 検索条件 AND 検索条件
| 検索条件 OR 検索条件
| NOT 検索条件
| (検索条件)
| 述部
データベース名 ::= ユーザー定義名
ビュー名 ::= ユーザー定義名
結合定義 ::= テーブル参照 [結合タイプ] JOIN テーブル参照 ON 検索条件
| テーブル参照 CROSS JOIN テーブル参照
| 外部結合の定義
結合タイプ ::= INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER]
テーブル サブクエリ ::=
クエリ スペック [[
UNION [
ALL]
クエリ スペック]...]
備考
INSERT、UPDATE、および DELETE ステートメントはアトミックな方法で動作します。つまり、複数の行の挿入、更新、または削除に失敗した場合、同じステートメントによって実行された前の行の挿入、更新、または削除がすべてロール バックされます。
FROM 句
オプションの第 2 FROM 句と、行が削除されるテーブル(「削除テーブル」と呼びます)への参照に関して混乱が生じる可能性があります。第 2 FROM 句に削除テーブルが現れる場合、その出現のうちの 1 つは、行が削除されるテーブルと同じインスタンスになります。
たとえば、ステートメント DELETE t1 FROM t1, t2 WHERE t1.c1 = t2.c1 の場合、DELETE の直後の t1 と FROM の後の t1 は、テーブル t1 の同じインスタンスです。したがって、このステートメントは DELETE t1 FROM t2 WHERE t1.c1 = t2.c1 と同じことになります。
第 2 FROM 句に削除テーブルが複数回現れる場合、その出現のうちの 1 つは削除テーブルと同じインスタンスであると識別される必要があります。第 2 FROM 句の参照のうち、削除テーブルと同じインスタンスであると見なされるのは、エイリアスが指定されていない参照です。
したがって、ステートメント DELETE t1 FROM t1 a, t1 b WHERE a.c1 = b.c1 の場合、第 2 FROM 句の t1 のインスタンスはどちらもエイリアスを持っているため、これは正しくありません。次であれば有効です。DELETE t1 FROM t1, t1 b WHERE t1.c1 = b.c1
第 2 FROM 句には次の条件が適用されます。
•DELETE ステートメントにオプションの第 2 FROM 句を含める場合、FROM 句の前にあるテーブル参照にエイリアスを指定することはできません。たとえば、DELETE t1 a FROM t2 WHERE a.c1 = t2.c1 とすると、次のエラーが返されます。
SQL_ERROR (-1)
SQLSTATE "37000"
"オプションの FROM を伴う UPDATE/DELETE ステートメントでは、テーブル エイリアスは使用できません。"
ステートメントの有効なバージョンは、DELETE t1 FROM t2 WHERE t1.c1 = t2.c1 または DELETE t1 FROM t1 a, t2 WHERE a.c1 = t2.c1 です。
•第 2 FROM 句に削除テーブルへの参照を 2 つ以上含める場合、それらの参照のうちの 1 つにだけエイリアスを指定できます。たとえば、DELETE t1 FROM t1 a, t1 b WHERE a.c1 = b.c1 とすると、次のエラーが返されます。
SQL_ERROR (-1)
SQLSTATE "37000"
"テーブル t1 があいまいです。"
誤りのあるステートメントでは、エイリアスを "a" とするテーブル t1 が削除テーブルと同じインスタンスであると仮定しています。正しいステートメントは、DELETE t1 FROM t1, t1 b WHERE t1.c1 = b.c1 です。
•DELETE ステートメントにおける第 2 FROM 句はセッション レベルでのみサポートされます。DELETE ステートメントがストアド プロシージャ内で発生する場合は、第 2 FROM 句はサポートされません。
例
次のステートメントによって、サンプル データベースの person テーブルから名前 Ellen の行が削除されます。
DELETE FROM person where First_Name = 'Ellen'
次のステートメントによって、サンプル データベースの course テーブルから Modern European History(HIS 305)の行が削除されます。
DELETE FROM Course WHERE Name = 'HIS 305'