UPDATE

L'ordre update en SQL

La commande update permet de mettre à jour les données dans une table.

Mettre à jour par une valeur fixe

UPDATE table
SET colonne1 = valeur1 , colonne2=valeur2
WHERE condition

Mettre à jour par une opération

UPDATE table
SET colonne1 = colonne1+10 , colonne2=colonne1*1.50 , ...
WHERE condition

Mettre à jour une table à partir d'une (ou plusieurs) autre(s)

Par défaut, la commande update permet de mettre à jour une table à partir de valeurs fixes (définies) ou d'une opération sur la même table. Mais il peut parfois être utile de mettre à jour des données à partir d'une autre table (recopie partielle de données, etc.).

Pour cela, la syntaxe diffère quelque peu.

Postgresql

Sous Postgresql, la méthode est propre et efficace :

UPDATE table1
SET champ2 = table2.champ2
FROM table2
WHERE
table2.champ3 = condition1
and table2.champ4 = condition2
[...]
and table1.champ1 = table2.champ1
[...]

Oracle

UPDATE table1
SET champ2 =(select champ2
FROM table2
WHERE 
table2.champ3 = condition1
[...]
and table1.champ1 = table2.champ1
[...])

Sous Oracle, la méthode est moins propre car la requête est imbriquée. De plus, elle est moins performante, surtout si la sous-requête est lente et que le nombre de lignes à mettre à jour est important. Dans ce cas, il faut créer une table intermédiaire ou temporaire qui contient le résultat de la sous-requête puis effectuer le update à partir de cette table.