PostgreSQLでテーブルのデータを更新する【UPDATE】

SQL

UPDATE

テーブルにすでに登録されているデータを更新するには、SQLコマンドの「UPDATE」コマンドを使用します。
「UPDATE」の基本的な構文は以下の通りです。

UPDATE テーブル名 SET 列名1 = {式1 | DEFAULT} [,列名2 = {式2 | DEFAULT},・・・] [WHERE 条件] ;

「UPDATE」は、指定したテーブル内のWHERE句の条件に合致した行を変更します。SET句に変更する列と更新する値を指定します。(「列名=値」の形で「,」で区切って複数指定可能です。)
SET句に指定されなかった列は変更されません。
WHERE句を指定しなかった場合は、テーブル内の全ての行が更新されます。

複数の列を変更する場合は、以下のような書き方も可能です。

UPDATE テーブル名 SET (列名1,列名2,・・・) = (式1,式2,・・・) [WHERE 条件] ;

また、サブクエリで他のテーブルの情報を使用して更新することもできます。

UPDATEの詳細は、公式ドキュメントを参照してください。

データを更新してみる

それでは、実際にいくつかのパターンを試してみます。
以下のようなデータのテーブルを更新してみます。

サンプルデータ

条件を指定して更新する

「WHERE」句で条件を指定して、特定の行の列を更新します。
下記の例では、「id」列が「000002」の行の「score」を「60」に更新します。

UPDATE testtbl SET score = 60 WHERE id = '000002' ;

実行すると以下の通りです。
2行目の「id」が「000002」の行の「score」が更新されています。

UPDATE 条件指定

また、条件に複数の行が合致する場合は、それぞれの行が更新されます。
以下の例では、「score」が「80」以下の行の「score」を「50」に更新します。

UPDATE testtbl SET score = 50 WEHRE score <= 80 ;

「score」が「75」と「80」の2つの行が更新されています。

update 条件指定(複数行)

条件を指定しないで更新する

「WHERE」句での条件を指定しないと、すべての行が更新対象となります。
次の例では全行の「score」を「100」に更新します。

UPDATE testtbl SET score = 100 ;
update 全行更新

複数の列を更新する

複数の列を更新するには、「SET」句に「,」で区切って複数の列と値を指定します。
以下の例では、「name」と「tel」の2つの列を更新します。

UPDATE testtbl SET name = '左藤 次郎', tel = '1111-11-1111' WHERE id = '000007' ;

実行すると「id」が「000007」の行の「name」と「tel」が更新されています。

UPDATE 複数の列指定

また、「(列1,列2,・・・) = (値1,値2,・・・)」といった指定も可能です。

UPDATE testtbl SET (name, tel) = ('佐東 治郎', '2222-22-2222') WHERE id = '000007' ;
UPDATE 複数列指定2

値の代わりに式を指定する

列に値ではなく式や関数を指定することができます。
以下の例では、「score」の値を「5」減らし、「email」の「xxx.xxx.xxx」を「zzz.zzz.zzz」に更新します。

UPDATE testtbl SET score = score - 5, email = REPLACE(email, 'xxx.xxx.xxx', 'zzz.zzz.zzz') ;
UPDATE 式・関数で更新

REPLACE()は文字列関数で、指定した列の特定の文字列を指定した文字列に置換します。

サブクエリを使って更新する

サブクエリ(副SELECT)を使用して、データを更新することもできます。
以下の「summarytbl」テーブルに「testtbl」の「score」の最大値・最小値・平均値をセットしてみます。

update サブクエリ(更新前)

下記の例では、「summarytbl」の「no = 1」の行の「maxscore」「minscore」「avgscore」に、「testtbl」の「score」の最大値、最小値、平均値を登録します。

UPDATE summarytbl SET (maxscore, minscore, avgscore) =
 (SELECT MAX(score), MIN(score), AVG(score) FROM testtbl) WHERE no = 1 ;

MAX(),MIN(),AVG()は集約関数で、それぞれ指定した列の最大値・最小値・平均値を計算します。

実際に実行すると「no = 1」の行のそれぞれの列が更新されています。

UPDATE サブクエリ(変更後)

サブクエリを使用すると、他のテーブルのデータを利用していろいろな更新が可能です。
ここでは単純な例を挙げていますが、複雑な更新を行うこともできます。

基本的な「UPDATE」コマンドの説明は以上です。

タイトルとURLをコピーしました