開発者リファレンス : データ アクセス方法 : SQL Engine Reference : SQL 構文リファレンス : DELETE
 
このページをシェアする                  
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] クエリ スペック]...]
備考
DELETE ステートメントは、INSERT および UPDATE と同様にアトミックな方法で動作します。つまり、複数の行の削除に失敗した場合、同じステートメントによって実行された前の行の削除がすべてロール バックされます。
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'