Encyklopedia SQL - Aktualizowanie danych - UPDATE
Autor: Paweł Wilkosz
Opublikowano: 2012-01-26
Niniejsza publikacja swoją tematyką oscylować będzie wokół instrukcji UPDATE języka T-SQL. UPDATE zaraz po SELECT i INSERT, jest najczęściej używanym operatorem w codziennej pracy programisty, korzystającego z dobrodziejstw, jakie niosą za sobą relacyjne bazy danych.
Przed wykonaniem zadań zapoznaj się z następującym materiałem:
- Wyświetlanie danych, podstawowy SELECT i wybór kolumn
- Ograniczanie wyświetlania wierszy, podstawy WHERE
- Dodawanie danych - INSERT
Po wykonaniu zadań będziesz wiedział:
- jak wykorzystać polecenie UPDATE do modyfikacji rekordów w bazie danych.
Operator UPDATE
Język T-SQL został wyposażony w operator UPDATE, którego zadaniem jest przeprowadzenie procesu aktualizacji istniejących danych. W najprostszej postaci polecenie to wymaga określenia tabeli, która podlega modyfikacji zbioru nazw kolumn, występujących po słowie pomocniczym SET, oraz wartości, które mają zostać wstawione w miejsce wartości już istniejących. Poniższy kod prezentuje podstawową składnię zapytania T-SQL, z wykorzystaniem operatora UPDATE:
UPDATE nazwa_tabeli
SET nazwa_kolumny1 = nowa_wartosc1,
nazwa_kolumny2 = nowa_wartosc2,
…
nazwa_kolumnyN = nowa_wartosc3
Oczywiście, podczas modyfikacji kolumn, możesz użyć zupełnie nowych wartości, ale zdecydowanie częściej postać nowej danej, wprowadzanej do komórki tabeli, powstawać będzie w procesie przeprowadzania różnych przekształceń, w szczególności arytmetycznych. Dla lepszego zobrazowania problemu, posłużymy się w tej publikacji następującym przykładem. Tabela Sales.SpecialOffer odpowiada za przechowywanie informacji na temat ofert specjalnych (okazji), jakie firma AdventureWorks stara się przedstawić swoim klientom. Kolumna DiscountPct stanowi procentową wartość zniżki obowiązującej w ramach danej promocji. Programista w AdventureWorks pewnego dnia otrzymał następujące zadanie. Ponieważ zbliża się okres jesiennej wyprzedaży rowerów, dyrekcja firmy postanowiła podnieść wysokość zniżki każdej oferty specjalnej o 0.5%. W związku z tym programista powinien posłużyć się następującym zapytaniem:
UPDATE Sales.SpecialOffer
SET DiscountPct = DiscountPct + 0.5
Po zastosowaniu w/w kodu, użytkownik powinien otrzymać poniższy raport:
(16 row(s) affected)
co w praktyce oznacza, iż 16 rekordów (a w tym wypadku wszystkie z tabeli Sales.SpecialOffer) zostały zmodyfikowane. Jeżeli zapamiętałeś, jakie wartości znajdowały się przed wykonaniem zapytania, nietrudno będzie Ci je porównać, oraz sprawdzić, iż każdy z rekordów kolumny DiscountPct został powiększony o wartość 0.5 (Rys. 1.).
Rys. 1. Wynik działania zapytania aktualizującego kolumnę DiscountPct.
Operacje w UPDATE
Komenda UPDATE może wykorzystywać różne operatory (głównie matematyczne) do przeliczania nowej wartości rekordu, podczas wykonywania zapytania. Ich kompletny zbiór został zgrupowany w tabeli 1.
Tabela 1. Operatory matematyczne i wartości wykorzystywane w UPDATE.
Operator | Opis. |
DEFAULT | W kolumnie zostanie umieszczona zdefiniowana wartość domyślna. |
+= | Pobranie wartości z komórki oraz dodanie do niej wartości zdefiniowanej po prawej stronie wyrażenia. |
-= | Pobranie wartości z komórki oraz odjęcie od niej wartości zdefiniowanej po prawej stronie wyrażenia. |
*= | Pobranie wartości z komórki oraz przemnożenie przez wartość zdefiniowaną po prawej stronie wyrażenia. |
/= | Pobranie wartości z komórki oraz podzielenie jej przez wartość zdefiniowaną po prawej stronie wyrażenia. |
% | Pobranie wartości z komórki oraz zapisanie wyniku dzielenia modulo przez wartość zdefiniowaną po prawej stronie wyrażenia. |
&= | Pobranie wartości z komórki oraz zapisanie wyniku, który jest wynikiem operacji bitowej AND z wartością zdefiniowaną po prawej stronie wyrażenia. |
^= | Pobranie wartości z komórki oraz zapisanie wyniku, który jest wynikiem operacji bitowej XOR z wartością zdefiniowaną po prawej stronie wyrażenia. |
|= | Pobranie wartości z komórki oraz zapisanie wyniku, który jest wynikiem operacji bitowej OR z wartością zdefiniowaną po prawej stronie wyrażenia. |
Ograniczanie aktualizacji rekordów w UPDATE
Gdy w grę wchodzi aktualizacja tylko jednego, konkretnego rekordu, wprowadzanie zmian w przestrzeni całej tabeli nie jest zbyt praktycznym rozwiązaniem. Dlatego operator UPDATE może współpracować z mechanizmami ograniczania przeglądania zbioru wynikowego, znanymi Ci już chociażby z publikacji Ograniczanie wyświetlanych wierszy – WHERE. Baza AdventureWorks posiada tabelę HumanResources.JobCandidate, zawierającą CV osób, które starają się o pracę na konkretnym stanowisku. Zakładając, iż kandydat o numerze identyfikacyjnym 7 przeszedł poprawnie proces rekrutacji oraz jego konto zostało założone w systemie (tabela HumanResources.Employee), dział HR, kończąc proces zatrudnienia, musi uzupełnić pole EmployeeID o numer identyfikacyjny pracownika. Koleżanki z HR, prosząc programistów baz danych o pomoc w wykonaniu tego zadania w AdventureWorks, otrzymały następujące zapytanie:
UPDATE HumanResources.JobCandidate
SET EmployeeID = 42
WHERE JobCandidateID = 7
które zwróciło wynik, zgodnie z oczekiwaniami (Rys. 2.).
Rys. 2. Aktualizacja wybranego rekordu tabeli HumanResources.JobCandidate.
* *
Informacja |
Zapamiętaj, że:
|
Podsumowanie
Publikacja ta prezentuje technikę modyfikacji rekordów w języku T-SQL za pomocą operatora UPDATE. Przedstawia również sposoby przeliczania nowej wartości dla wskazanej kolumny oraz zwraca uwagę na możliwości ograniczania zbioru wierszy, które mają być zaktualizowane.
W kolejnej części Encyklopedii SQL nauczysz się kopiowania danych pomiędzy tabelami przy wykorzystaniu SELECT INTO.
Dodatkowo zobacz: