.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
.TH "DELETE" "" "2003-08-02" "SQL - 言語" "SQL コマンド"
.SH NAME
DELETE \- テーブルから行を削除
.SH SYNOPSIS
.sp
.nf
DELETE FROM [ ONLY ] \fItable\fR [ WHERE \fIcondition\fR ]
  
.sp
.fi
.SS "入力"
.PP
.TP
\fB\fItable\fB\fR
既存のテーブル名です (スキーマ修飾名でも可)。
.TP
\fB\fIcondition\fB\fR
削除すべき行を返す、SQL の選択問い合わせです。

WHERE句についてのより詳細については、SELECT文を参照して下さい。
.PP
.SS "出力"
.PP
.TP
\fBDELETE \fIcount\fB\fR
行が正常に削除された場合に返されるメッセージです。 \fIcount\fR は削除された行数を示します。

\fIcount\fR が 0 の場合、削除する行がなかったことを示します。
.PP
.SH "説明"
.PP
\fBDELETE\fR は指定したテーブルから WHERE 句を満たす行を削除します。
.PP
\fIcondition\fR (WHERE 句) がない場合、指定したテーブルの全ての行を削除することになります。その結果は存在するものの、中身が空のテーブルになります。
.sp
.RS
.B "Tip:"
PostgreSQL の拡張である TRUNCATE [\fBtruncate\fR(l)] は、より高速に、テーブルから全ての行を削除する機構を提供します。
.RE
.sp
.PP
デフォルトで、DELETE は指定されたテーブル及びそのサブテーブルのすべてのタプルを削除します。指定されたテーブルのみを更新したい場合はONLY句を使用して下さい。
.PP
テーブルを変更するためには書き込み権限が必要です。 あわせて、\fIcondition\fR で読み込まれる値を持つテーブルへの読み込み権限も必要になります。
.SH "使用方法"
.PP
テーブル films から musical 以外を全て削除するには、以下のようにします。
.sp
.nf
DELETE FROM films WHERE kind <> 'Musical';
SELECT * FROM films;

 code  |          title            | did | date_prod  |  kind   | len
-------+---------------------------+-----+------------+---------+-------
 UA501 | West Side Story           | 105 | 1961-01-03 | Musical | 02:32
 TC901 | The King and I            | 109 | 1956-08-11 | Musical | 02:13
 WD101 | Bed Knobs and Broomsticks | 111 |            | Musical | 01:57
(3 rows)
.sp
.fi
.PP
また、テーブル films を空にするには、以下のようにします。
.sp
.nf
DELETE FROM films;
SELECT * FROM films;

 code | title | did | date_prod | kind | len
------+-------+-----+-----------+------+-----
(0 rows)
.sp
.fi
.SH "互換性"
.SS "SQL92"
.PP
SQL92 では、位置による DELETE 文が可能です。
.sp
.nf
DELETE FROM \fItable\fR WHERE
    CURRENT OF \fIcursor\fR
    
.sp
.fi
ここで、\fIcursor\fRはオープン済のカーソルの識別子です。 PostgreSQL の対話式カーソルは読み取り専用です。
