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

.SH SYNOPSIS
.sp
.nf
DELETE FROM [ ONLY ] \fItable\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
テーブルから削除するためには、そのテーブルのDELETE権限が必要です。
同様に、\fIcondition\fRにおいて値を読み取るテーブルに対するSELECT権限も必要です。
.SH "パラメータ"
.TP
\fB\fItable\fB\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ではWHERE条件内で他のテーブルを参照することができます。
例えば、指定プロデューサが製作した全ての映画を削除する時に以下のように行うことができます。
.sp
.nf
DELETE FROM films
  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に準拠しています。
ただし、WHERE句で他のテーブルを参照できるという機能はPostgreSQLの拡張です。
