SQL Engine Reference (v11)

DELETE

このステートメントにより、データベース テーブルまたはビューから指定された行を削除します。

構文

DELETE [FROM] <テーブル名 | ビュー名> [エイリアス名] 
   [FROM テーブル参照[, テーブル参照]... 
   [WHERE 検索条件] 
 
テーブル名 ::= ユーザー定義名 
 
ビュー名 ::= ユーザー定義名 
 
エイリアス名 ::= ユーザー定義名(エイリアス名は、2 つ目の FROM 句
が使用されている場合には使用できません。FROM 句を参照してくだ
さい。) 
 
テーブル参照 ::= {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] 
クエリ スペック]...] 

備考

INSERTUPDATE、および 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 句には次の条件が適用されます。

次のステートメントによって、サンプル データベースの person テーブルから名前 Ellen の行が削除されます。

DELETE FROM person where First_Name = 'Ellen' 

次のステートメントによって、サンプル データベースの course テーブルから Modern European History(HIS 305)の行が削除されます。

DELETE FROM Course WHERE Name = 'HIS 305' 

DELETE(位置付け)

DISTINCT