Encyklopedia SQL - Aktualizowanie danych - UPDATE  

Udostępnij na: Facebook

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:

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:

  1. Polecenie UPDATE służy do modyfikacji istniejących rekordów w bazie danych.
  2. Istnieje możliwość przeliczania nowych wartości dla danej kolumny w trakcie wykonywania zapytania.
  3. Jeżeli polecenie UPDATE nie zostało ograniczone do konkretnych rekordów, zostanie wykonane na wszystkich wskazanych kolumnach danej tabeli.

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: