SQL UPDATE文は、テーブル内の1つ以上のレコードのデータを変更します。すべての行を更新することも、条件を使用してサブセットを選択することもできます。条件を使用しない場合は、値のすべての行が更新されます。[ 1 ] : 426WHERE
声明はUPDATE次の形式をとる:[ 2 ] [ 1 ]: 426
UPDATEtable_name SET column_name = value [, column_name = value ...] [WHERE condition]操作を成功させるにはUPDATE、ユーザーはUPDATEテーブルまたは列に対してデータ操作権限(権限)を持っている必要があり、更新された値は、適用可能なすべての制約(主キー、一意インデックス、CHECK制約、制約などNOT NULL)と競合してはなりません。
PostgreSQLなどの一部のデータベースでは、 FROM 句が存在する場合、ターゲット テーブルは fromlist で指定されたテーブルと結合され、結合の各出力行はターゲット テーブルの更新操作を表します。FROM を使用する場合は、変更する各行に対して結合によって最大 1 つの出力行が生成されるようにする必要があります。つまり、ターゲット行は他のテーブルの 1 つの行と結合してはなりません。結合されている場合、ターゲット行の更新には結合行のうち 1 つだけが使用されますが、どの行が使用されるかは容易に予測できません。[ 3 ]
このような不確定性があるため、サブクエリ内でのみ他のテーブルを参照する方が安全ですが、多くの場合、結合を使用するよりも読みにくく、処理速度も遅くなります。
MySQLはANSI規格に準拠していません。
テーブルTの列C1の値を1に設定するのは、列C2 の値が「a」である行のみに限る。
UPDATE T SET C1 = 1 WHERE C2 = 'a'表Tにおいて、列C2の値が「a」であるすべての行について、列C1の値を9に、列C3の値を4に設定する。
UPDATE T SET C1 = 9 , C3 = 4 WHERE C2 = 'a'列C2の値が「a」の場合、列C1の値を1増やします。
UPDATE T SET C1 = C1 + 1 WHERE C2 = 'a'列C2の値が「a」の場合、列C1の値の前に文字列「text」を追加します。
UPDATE T SET C1 = 'text' || C1 WHERE C2 = 'a'テーブルT1の列C1の値を2に設定するのは、列C2の値が、列C4が0であるテーブルT2の列C3の値のサブリストに含まれている場合に限る。
UPDATE T1 SET C1 = 2 WHERE C2 IN ( SELECT C3 FROM T2 WHERE C4 = 0 )単一の更新ステートメントで複数の列を更新することもできます。
UPDATE T SET C1 = 1 , C2 = 2複雑な条件やJOINも可能です。
UPDATE T SET A = 1 WHERE C1 = 1 AND C2 = 2一部のデータベースでは、FROM句の非標準的な使用が許可されています。
UPDATE a SET a .[ updated_column ] = updatevalue FROM articles a JOIN classification c ON a . articleID = c . articleID WHERE c . classID = 1またはOracleシステムの場合(classification.articleIDにインデックスが存在すると仮定):
UPDATE ( SELECT * FROM articles JOIN classification ON articles . articleID = classification . articleID WHERE classification . classID = 1 ) SET [ updated_column ] = updatevalueテーブル名が長い場合:
Update MyMainTable AS a SET a . LName = Smith WHERE a . PeopleID = 1235