.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
.TH "DELETE" "" "2006-10-20" "SQL - 言語" "SQLコマンド"
.SH NAME
DELETE \- テーブルから行を削除する

.SH SYNOPSIS
.sp
.nf
DELETE FROM [ ONLY ] \fItable\fR
    [ USING \fIusinglist\fR ]
    [ WHERE \fIcondition\fR ]
.sp
.fi
.SH "説明"
.PP
\fBDELETE\fRは、指定したテーブルからWHERE句を満たす行を削除します。
WHEREがない場合、指定したテーブルの全ての行を削除することになります。
この結果、そのテーブルは存在するが中身が空のテーブルになります。
.sp
.RS
.B "Tip:"
PostgreSQLによる拡張であるTRUNCATE [\fBtruncate\fR(l)]は、より高速に、テーブルから全ての行を削除する仕組みを持っています。
.RE
.sp
.PP
デフォルトでは、\fBDELETE\fRは指定されたテーブルおよびその全ての子テーブルの行を削除します。
指定されたテーブルのみを削除したい場合は、ONLY句を使用してください。
.PP
データベース内のほかのテーブルに含まれる情報を用いてテーブル内の行を削除する方法には、副問い合わせとUSING句で追加テーブルを指定する方法という2つがあります。
どちらの技法が適切かはその状況によります。
.PP
削除を実行するには、そのテーブルのDELETE権限が必要です。
また、USING句内のテーブルに対するSELECT権限、および、\fIcondition\fRで使用する値を読み取るために、その値が含まれるテーブルに対するSELECT権限も必要です。
.SH "パラメータ"
.TP
\fBONLY\fR
指定された場合、指名したテーブルのみから行を削除します。
指定されなかった場合、指名したテーブルを継承するテーブルも処理されます。
.TP
\fB\fItable\fB\fR
既存のテーブル名です（スキーマ修飾名も可）。
.TP
\fB\fIusinglist\fB\fR
WHERE条件内に他のテーブルの列を許可するための、テーブル式のリストです。
これは、\fBSELECT\fR文のFROM句 [\fBselect\fR(l)]において指定できるテーブルのリストと同様です。
例えば、テーブル名の別名も指定することができます。
自己結合を設定する目的以外では\fIusinglist\fRに対象のテーブルを繰り返さないでください。
.TP
\fB\fIcondition\fB\fR
削除すべき行を決定する、\fBboolean\fR型の値を返す式です。
.SH "出力"
.PP
正常に終了した場合、\fBDELETE\fRコマンドは以下の形式のコマンドタグを返します。
.sp
.nf
DELETE \fIcount\fR
.sp
.fi
\fIcount\fRは削除した行数です。
\fIcount\fRが0の場合、\fIcondition\fRを満たす行が存在しなかったことを示します
（これはエラーとはみなされません）。
.SH "注釈"
.PP
PostgreSQLでは、USING句で他のテーブルを指定することで、WHERE条件内で他のテーブルを参照することができます。
例えば、指定したプロデューサが製作した全ての映画を削除する時は、次のようなコマンドを実行します。
.sp
.nf
DELETE FROM films USING producers
  WHERE producer_id = producers.id AND producers.name = 'foo';
.sp
.fi
ここでは、\fBfilms\fRと\fBproducers\fRとを結合して、\fBfilms\fR行に削除用の印を付けるという作業を行っています。
この構文は標準に従ったものではありません。
より標準的な方法は以下の通りです。
.sp
.nf
DELETE FROM films
  WHERE producer_id IN (SELECT id FROM producers WHERE name = 'foo');
.sp
.fi
.SH "例"
.PP
filmsテーブルからmusical以外を全て削除します。
.sp
.nf
DELETE FROM films WHERE kind <> 'Musical';
.sp
.fi
.PP
filmsテーブルを空にします。
.sp
.nf
DELETE FROM films;
.sp
.fi
.SH "互換性"
.PP
このコマンドは標準SQLに準拠しています。
ただし、USING句とWHERE句で他のテーブルを参照する機能はPostgreSQLの拡張です。
