SQL UPDATE tabulky – Syntaxe a příklad UPDATE

Příkaz UPDATE slouží ve SQL ke změně existujících záznamů v tabulce. Můžeme tak upravit 1 záznam, více záznamů nebo všechny. Podmínka, na základě které jsou ovlivněny záznamy, je umístěna ve WHERE klauzuli.

Syntaxe – 3 způsoby použítí UPDATE

A) Jednoduchá forma: Změna hodnot v určitém sloupci nebo sloupcích na základě podmínky

UPDATE dbo.Tabulka
SET <Sloupec 1 tabulky> = <Nová hodnota pro sloupec 1>,
<Sloupec 2 tabulky> = <Nová hodnota pro sloupec 2>
WHERE <Podmínka>;

B) S použitím JOINu: Změna hodnot na základě podmínky z jiné tabulky

UPDATE dbo.Tabulka_A
SET <Sloupec Tabulky_A> = <Nová hodnota pro sloupec Tabulky_A>
FROM dbo.Tabulka_A INNER JOIN dbo.dbo.Tabulka_B
                   ON  dbo.Tabulka_A.ID = dbo.Tabulka_B.ID
WHERE <Podmínka na pole z Tabulky_B>;

C) S OUTPUT klauzulí: Pokud chceme logovat změny nad tabulkou. Výstup lze uložit do jiné tabulky (třeba jako záloha)

UPDATE dbo.Tabulka
SET <Sloupec Tabulky>= <Nová hodnota pro sloupec Tabulky>
OUTPUT inserted.<Sloupec Tabulky>, deleted.<Sloupec Tabulky>
WHERE <Podmínka>;

Output klauzule umožňuje jako výstup příkazu vyjet všechny změněné záznamy. Prefixem „inserted.“ požadujeme nové hodnoty změněných záznamů a použitím prefixu „deleted.“ dostaneme původní hodnoty záznamů (před updatem).

(!!!) Pokud nepoužijeme klauzuli WHERE, dojde ke změnám nad celou tabulkou

Takovou specialitkou pro fajnšmekry je příkaz MERGE, o kterém jsem se rozepsal v článku SQL MERGE příkaz – INSERT, UPDATE, DELETE jedním vrzem zde.

Praktické příklady

1 Příklad jednoduché formy změny tabulky

Nejjednodušším způsobem je záznamy v tabulce změnit napřímo (viz A). Pomocí SQL příkazu SET určíme novou hodnotu pro záznam/záznamy a v klauzuli WHERE podmínku.

Změna jednoho záznamu v tabulce:

UPDATE dbo.Platy
SET Plat = 150 000
WHERE Zamestnanec = 'Jan Zedníček';

Změna více záznamů v tabulce:

UPDATE dbo.Platy
SET Plat = 150 000
WHERE Zamestnanec IN ('Jan Zedníček','Franta Vomáčka');

 2 UPDATE + FROM + JOIN

Další možností, jak změnu v tabulce udělat je změna tabulky s aplikací podmínky z jiné tabulky. Využijeme zejména tehdy, pokud potřebujeme změnit v relační databázi více záznamů, kde se kritérium pro změněné záznamy nachází v jiné tabulce, kterou si pro tyto účely najoinujeme.

V předchozí tabulce jsem si změnil plat na 150 000 Kč. Dejme tomu, že bych chtěl zvýšit plat všem lidem na pozici business  intelligence developer o 10 000 Kč přičemž informace o pozici zaměstnantů se nacházi v tabulce dbo.PracovniPozice

UPDATE s použitím FROM

UPDATE dbo.Platy
SET dbo.Platy.Plat = dbo.Platy.Plat + 10 000
FROM dbo.PracovniPozice
WHERE dbo.PracovniPozice.ID_Pozice = dbo.Platy.ID_Pozice
AND dbo.PracovniPozice.ZamestnanecPozice = 'Business intelligence developer';

UPDATE s použitím FROM/INNER JOIN (více o joinech v článku SQL INNER JOIN)

UPDATE dbo.Platy
SET dbo.Platy.Plat = dbo.Platy.Plat + 10 000
FROM dbo.Platy INNER JOIN  dbo.PracovniPozice
                   ON  dbo.Platy.ID_Pozice = dbo.PracovniPozice.ID_Pozice
WHERE  dbo.PracovniPozice.ZamestnanecPozice = 'Business intelligence developer';

3 UPDATE + OUTPUT klauzule

Mějme tabulku dbo.Platy, kde jsou 2 zaměstnanci: Franta Vomáčka s platem 5125 Kč a Jan Zedníček s platem 5000 Kč

Oběma zaměstnancům změníme plat na 20000 s výstupní sql klauzulí output:

UPDATE [Temp].[dbo].[Platy]
  SET Plat = 20000
OUTPUT
  inserted.ID_Pozice,
  inserted.[Zamestnanec],
  inserted.[Plat] AS Novy_Plat,
  deleted.[Plat] AS Stary_Plat
WHERE 1=1

Reagovat na příspěvek