11. 03. Ažuriranje redova pomoću UPDATE
U radu sa bazama podataka često se javlja potreba da se već postojeći podaci izmene. Na primer, ako se: promenila cena proizvoda, ili je student promenio broj telefona, ili je zaposlenima povećana plata ili su svi proizvodi poskupeli za određeni procenat, .....
U takvim situacijama nije potrebno brisati stare podatke i ponovo unositi nove. Umesto toga koristi se SQL naredba UPDATE, koja omogućava izmenu postojećih redova u tabeli.
Drugim rečima, UPDATE služi za ažuriranje (promenu) podataka koji su već upisani u tabelu.
Osnovna sintaksa naredbe UPDATE
Opšti oblik naredbe je:
UPDATE naziv_tabele
SET kolona = nova_vrednost
Ova naredba menja vrednost određene kolone. Ovde:
-
UPDATE označava da želimo da menjamo podatke
-
naziv_tabele je tabela u kojoj se nalaze podaci
-
SET označava koju kolonu menjamo i na koju vrednost
Ako se ne navede uslov, SQL će promeniti sve redove u tabeli.
DODATAK – Upiti za kreiranje i popunjavanje tabela KOJE SE KORISTE u učionici
-- Tabela Proizvodi
-- Kreiranje tabele
CREATE TABLE Proizvodi
(
ID INT PRIMARY KEY,
Naziv VARCHAR(50),
Cena DECIMAL(10,2)
)
-- Unos podataka
INSERT INTO Proizvodi VALUES (1,'Hleb',60)
INSERT INTO Proizvodi VALUES (2,'Mleko',120)
INSERT INTO Proizvodi VALUES (3,'Jogurt',110)
INSERT INTO Proizvodi VALUES (4,'Sir',500)
INSERT INTO Proizvodi VALUES (5,'Maslac',250)
INSERT INTO Proizvodi VALUES (6,'Pavlaka',150)
-- Tabela Zaposleni
-- Kreiranje
CREATE TABLE Zaposleni
(
IDZaposlenog INT PRIMARY KEY,
Ime VARCHAR(50),
Plata INT
)
-- Unos podataka
INSERT INTO Zaposleni VALUES (1,'Marko',50000)
INSERT INTO Zaposleni VALUES (2,'Ana',52000)
INSERT INTO Zaposleni VALUES (3,'Ivan',48000)
INSERT INTO Zaposleni VALUES (4,'Jelena',47000)
INSERT INTO Zaposleni VALUES (5,'Nikola',60000)
-- Tabela Studenti
-- Kreiranje
CREATE TABLE Studenti
(
IDStudenta INT PRIMARY KEY,
Ime VARCHAR(50),
Grad VARCHAR(50)
)
-- Unos podataka
INSERT INTO Studenti VALUES (1,'Nikola','Novi Sad')
INSERT INTO Studenti VALUES (2,'Jelena','Beograd')
INSERT INTO Studenti VALUES (3,'Marko','Novi Sad')
INSERT INTO Studenti VALUES (4,'Ana','Subotica')
INSERT INTO Studenti VALUES (5,'Petar','Novi Sad')
Primer 1 – Ažuriranje svih redova
Ako želimo da promenimo cenu svih proizvoda na 100, možemo napisati:
UPDATE Proizvodi
SET Cena = 100
Nakon izvršavanja naredbe tabela će izgledati ovako:
| IDProizvoda | Naziv | Cena |
|---|---|---|
| 1 | Hleb | 100 |
| 2 | Mleko | 100 |
| 3 | Jogurt | 100 |
SQL je promenio svaki red u tabeli.
Primer 2 – Ažuriranje više kolona
UPDATE može menjati više kolona istovremeno.
Primer:
UPDATE Proizvodi
SET Naziv = 'Proizvod', Cena = 50
Rezultat:
| IDProizvoda | Naziv | Cena |
|---|---|---|
| 1 | Proizvod | 50 |
| 2 | Proizvod | 50 |
| 3 | Proizvod | 50 |
Primer 3 – Ažuriranje pomoću izraza
Nova vrednost može biti i rezultat izračunavanja.
Primer: povećanje svih cena za 10.
UPDATE Proizvodi
SET Cena = Cena + 10
Ovde SQL uzima postojeću vrednost cene i dodaje 10.
Napomene
Ako se koristi UPDATE bez WHERE uslova, menjaju se svi redovi.
Zbog toga je potrebno biti pažljiv, jer se može desiti da se slučajno promeni veliki broj podataka.
Zadaci za učenike
Zadatak 1: U tabeli Proizvodi postaviti cenu svih proizvoda na 200.
Zadatak 2: U tabeli Proizvodi povećati cenu svih proizvoda za 20.
Zadatak 3: U tabeli Proizvodi promeniti:
-
naziv proizvoda na Nepoznat proizvod
-
cenu na 0
Rešenja zadataka
Rešenje 1
UPDATE Proizvodi
SET Cena = 200
Rešenje 2
UPDATE Proizvodi
SET Cena = Cena + 20
Rešenje 3
UPDATE Proizvodi
SET Naziv = 'Nepoznat proizvod',
Cena = 0
Zaključak
Naredba UPDATE omogućava promenu postojećih podataka u tabeli.
Ako se ne koristi uslov, SQL menja sve redove u tabeli. Zbog toga je u većini praktičnih situacija potrebno koristiti WHERE uslov, koji omogućava da se promene samo određeni redovi.
2. čas: Ažuriranje određenih redova u tabeli (WHERE uslov)
Uvod
U realnim bazama podataka retko je potrebno menjati sve redove u tabeli. Mnogo češće je potrebno promeniti samo određene podatke.
Neki primeri potrebnih promena:
- povećati platu zaposlenom sa ID brojem 5
- promeniti cenu samo jednog proizvoda
- ažurirati adresu određenog studenta
- povećati cenu samo proizvoda iz određene kategorije
Da bi se to uradilo koristi se WHERE uslov.
UPDATE sa WHERE uslovom
Opšta sintaksa:
UPDATE naziv_tabele
SET kolona = nova_vrednost
WHERE uslov
WHERE određuje koji redovi će biti promenjeni.
Primer tabele
Tabela Zaposleni:
| IDZaposlenog | Ime | Plata |
|---|---|---|
| 1 | Marko | 50000 |
| 2 | Ana | 52000 |
| 3 | Ivan | 48000 |
Primer 1 – Ažuriranje jednog reda
Povećanje plate zaposlenom sa ID = 3.
UPDATE Zaposleni
SET Plata = 55000
WHERE IDZaposlenog = 3
Rezultat:
| IDZaposlenog | Ime | Plata |
|---|---|---|
| 1 | Marko | 50000 |
| 2 | Ana | 52000 |
| 3 | Ivan | 55000 |
Promenjen je samo jedan red.
Primer 2 – Ažuriranje više redova
Ako želimo da povećamo platu svim zaposlenima koji imaju platu manju od 50000:
UPDATE Zaposleni
SET Plata = Plata + 5000
WHERE Plata < 50000
SQL će pronaći sve redove koji ispunjavaju uslov i promeniti ih.
Primer 3 – Ažuriranje pomoću teksta
Tabela Studenti
| IDStudenta | Ime | Grad |
|---|---|---|
| 1 | Nikola | Novi Sad |
| 2 | Jelena | Beograd |
| 3 | Marko | Novi Sad |
Promena grada za studenta Marka:
UPDATE Studenti
SET Grad = 'Niš'
WHERE Ime = 'Marko'
Kombinovanje uslova
Moguće je koristiti više uslova:
UPDATE Zaposleni
SET Plata = Plata + 3000
WHERE Plata < 50000 AND Ime = 'Ivan'
Napomena:
Kao korisna navika, pre UPDATE bi bilo dobro da se prvo proveri koje redove treba menjati. To se radi pomoću SELECT:
SELECT *
FROM Zaposleni
WHERE Plata < 50000
Tek nakon provere izvršava se UPDATE.
Zadaci za učenike
Pretpostavimo tabelu Proizvodi:
| ID | Naziv | Cena |
|---|---|---|
| 1 | Hleb | 60 |
| 2 | Mleko | 120 |
| 3 | Jogurt | 110 |
| 4 | Sir | 500 |
Zadatak 1: Promeniti cenu proizvoda Hleb na 70.
Zadatak 2: Povećati cenu proizvoda Jogurt za 20.
Zadatak 3: Smanjiti cenu svih proizvoda čija je cena veća od 200 za 50.
Zadatak 4: Promeniti naziv proizvoda sa ID = 2 u Mleko 1L.
Rešenja zadataka
Rešenje 1
UPDATE Proizvodi
SET Cena = 70
WHERE Naziv = 'Hleb'
Rešenje 2
UPDATE Proizvodi
SET Cena = Cena + 20
WHERE Naziv = 'Jogurt'
Rešenje 3
UPDATE Proizvodi
SET Cena = Cena - 50
WHERE Cena > 200
Rešenje 4
UPDATE Proizvodi
SET Naziv = 'Mleko 1L'
WHERE ID = 2
Završni zadatak (za vežbu u učionici ili kod kuće)
Za tabelu Zaposleni
Napisati SQL naredbe za:
-
povećanje plate zaposlenom Ivan za 3000
-
povećanje plate svim zaposlenima čija je plata manja od 50000 za 2000
-
promenu imena zaposlenog sa ID = 1 u Marko Petrović
Pitanja za proveru znanja
- Čemu služi naredba UPDATE u SQL-u?
- Čemu služi klauzula SET?
- Navesti primer UPDATE naredbe.
- Koja klauzula određuje koji redovi će biti izmenjeni?
- Šta se dešava ako se UPDATE izvrši bez WHERE uslova?
- Da li UPDATE može menjati više kolona istovremeno?
- Napisati opšti oblik UPDATE naredbe.
- Da li UPDATE može koristiti matematičke operacije?