W tabeli podzespoly należy obniżyć wartość pola cena o 20 dla wszystkich rekordów, gdzie pole producent to TOSHIBA. W języku SQL modyfikacja ta będzie miała postać:
A.
UPDATE podzespoly SET cena = cena - 20;
Źle. Brak
WHERE obniży cenę wszystkim producentom.B.
UPDATE podzespoly SET cena = cena - 20 WHERE producent = 'TOSHIBA';
Dobrze. Cena każdego wybranego rekordu zmniejsza się o 20, tylko dla TOSHIBA.
C.
UPDATE cena = cena - 20 FROM podzespoly WHERE producent = 'TOSHIBA';
Źle. Po
UPDATE musi stać nazwa tabeli; FROM tu nie występuje.D.
UPDATE podzespoly SET cena = 20 WHERE producent = 'TOSHIBA';
Źle. Cena zostanie ustawiona na 20, a nie obniżona o 20.
Żeby zmienić wartość względem obecnej, w
SET używa się nazwy kolumny po obu stronach znaku równości: cena = cena - 20 oznacza „nowa cena to stara cena minus 20”. Serwer oblicza wyrażenie osobno dla każdego rekordu, więc każdy podzespół stanieje o 20 względem swojej własnej ceny. Warunek WHERE producent = 'TOSHIBA' ogranicza zmianę do jednego producenta. Do zapamiętania: UPDATE tabela SET kolumna = wyrażenie WHERE warunek. Podobnie działa podwyżka procentowa: cena = cena * 1.1 zwiększa cenę o 10%. Przed taką zmianą warto podejrzeć rekordy zapytaniem SELECT z tym samym warunkiem. Wyrażenia mogą też korzystać z innych kolumn tego samego wiersza.Każdy z błędnych zapisów popełnia inny typowy błąd.
SET cena = 20 nie obniża ceny, tylko ustawia ją na sztywno na 20 we wszystkich wybranych rekordach, niezależnie od poprzedniej wartości. Wersja bez WHERE poprawnie odejmuje 20, ale od ceny każdego podzespołu w tabeli, także produktów innych producentów - wykona się bez ostrzeżenia. Zapis UPDATE cena = ... FROM podzespoly przenosi składnię z SELECT do UPDATE: po słowie UPDATE musi stać nazwa tabeli, a FROM w tym miejscu nie występuje, więc serwer zgłosi błąd składni. Poprawne polecenie łączy wyrażenie względne w SET z warunkiem w WHERE. Dobrym nawykiem jest sprawdzanie każdego polecenia zmieniającego dane pod trzema kątami: czy po UPDATE stoi tabela, czy wyrażenie w SET liczy nową wartość ze starej i czy WHERE wybiera właściwe rekordy.