V tomto tutoriálu si projdeme různé způsoby aktualizace řádků v tabulce pomocí SQL od obecnějších aktualizací ke specifičtějším metodám.
Úplná aktualizace
Pokud je potřeba aktualizovat každé pole na stejnou hodnotu, můžete to udělat pomocí jednoduchého UPDATE
příkaz.
UPDATE table
SET col = new_value;
Podmíněná aktualizace
Chcete-li provést podmíněnou aktualizaci v závislosti na tom, zda aktuální hodnota sloupce odpovídá podmínce, můžete přidat WHERE
klauzule, která to specifikuje. Databáze nejprve najde řádky, které odpovídají WHERE
klauzule a poté provádět aktualizace pouze na těchto řádcích.
UPDATE table
SET col = new_value
WHERE col = old_value;
Chcete-li to rozšířit, můžete do WHERE
přidat cokoli klauzuli, kterou máte rádi, pokud je to platný výraz. Chcete-li tedy provést aktualizaci na základě hodnoty jiného sloupce ve stejné tabulce, můžete provést následující:
UPDATE table
SET col = new_value
WHERE other_col = some_other_value;
Protože WHERE
klauzule může obsahovat jakýkoli platný výraz, máte také možnost provádět aktualizace tam, kde kritériím vyhovuje více sloupců
UPDATE table
SET col = new_value
WHERE col = old_value
AND other_col = some_other_value;
UPDATE table
SET col = new_value
WHERE col = old_value
OR other_col = some_other_value;
Jak vidíte, můžete rozbalit WHERE
klauzule tolik, kolik chcete, abyste mohli filtrovat řádky pro aktualizaci na to, co potřebujete.
Co se nyní stane, pokud chcete aktualizovat řádky v jedné tabulce na základě stavu jiné tabulky? Tato otázka vede k několika různým způsobům, jak to můžete udělat.
Protože WHERE
klauzule může obsahovat jakýkoli platný výraz, můžete použít poddotaz:
UPDATE table
SET col = new_value
WHERE other_col IN (
SELECT other_col
FROM other_table
WHERE conditional_col = 1
);
Můžete také použít poddotaz v SET
část příkazu, pokud chcete sloupec nastavit na hodnotu v jiné tabulce
UPDATE table
SET col = (
SELECT other_col
FROM other_table
WHERE other_table.table_id = table.id
);
Snad jednodušším způsobem je zadat více tabulek po UPDATE
doložka. Pouze SET
výraz provede aktualizace, ale uvedení dalších tabulek umožní zahrnutí tabulek.
UPDATE table, other_table
SET table.col = other_table.other_col
WHERE table.id = other_table.table_id;
Podobně jako rozbalení WHERE
klauzule, počet tabulek lze rozšířit tak, aby zahrnoval všechny tabulky, které potřebujete, pokud máte více tabulek, které je třeba spojit.