18/20.03. Brisanje redova pomoću DELETE
1. čas: Brisanje redova pomoću DELETE (brisanje svih redova)
Uvod
U radu sa bazama podataka često se javlja potreba da se određeni podaci uklone iz tabele. Na primer:
-
proizvod se više ne prodaje
-
student je ispisan iz škole
-
pogrešno unet podatak treba obrisati
Za ove situacije koristi se SQL naredba DELETE, koja omogućava brisanje redova iz tabele.
Važno je razumeti:
DELETE briše podatke (redove), ali ne briše strukturu tabele.
Osnovna sintaksa DELETE naredbe
DELETE FROM naziv_tabele
Ova naredba briše sve redove iz tabele.
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 tabele
Tabela Proizvodi:
| ID | Naziv | Cena |
|---|---|---|
| 1 | Hleb | 60 |
| 2 | Mleko | 120 |
| 3 | Jogurt | 110 |
Primer 1 – Brisanje svih redova
DELETE FROM Proizvodi
Nakon izvršavanja:
Tabela je prazna (nema redova), ali i dalje postoji.
Napomena: DELETE bez WHERE uslova briše sve podatke u tabeli.
Razlika: DELETE vs TRUNCATE
Često se mešaju ove dve naredbe:
-
DELETE briše red po red (može imati WHERE)
-
TRUNCATE TABLE briše sve redove odjednom (brže, ali bez WHERE)
Primer:
TRUNCATE TABLE Proizvodi
Brisanje uz proveru
Dobra bi bilo da se prvo proveri šta će biti obrisano:
SELECT * FROM Proizvodi
Zadaci za vežbu
Zadatak 1: Obrisati sve redove iz tabele Proizvodi.
Zadatak 2: Obrisati sve redove iz tabele Zaposleni.
Zadatak 3: Obrisati sve redove iz tabele Studenti.
* ---
Zaključak
DELETE omogućava brisanje podataka iz tabele.
Ako se ne koristi WHERE uslov, brišu se svi redovi, što može dovesti do gubitka podataka. Zato je u većini slučajeva potrebno koristiti uslovno brisanje, koje će biti obrađeno u sledećoj lekciji.
Čas 2 - Brisanje određenih redova ( uz WHERE uslov)
Uvod
U praksi retko želimo da obrišemo sve podatke. Obično želimo da uklonimo samo:
-
jedan red
-
nekoliko redova
-
redove koji ispunjavaju određeni uslov
Za to koristimo WHERE klauzulu.
Sintaksa
DELETE FROM naziv_tabele
WHERE uslov
WHERE određuje koji redovi će biti obrisani.
Primer tabele
Tabela Zaposleni:
| ID | Ime | Plata |
|---|---|---|
| 1 | Marko | 50000 |
| 2 | Ana | 52000 |
| 3 | Ivan | 48000 |
| 4 | Jelena | 47000 |
Primer 1 – Brisanje jednog reda
DELETE FROM Zaposleni
WHERE ID = 3
Briše se zaposleni Ivan.
Primer 2 – Brisanje više redova
DELETE FROM Zaposleni
WHERE Plata < 50000
Brišu se svi zaposleni sa platom manjom od 50000.
Primer 3 – Brisanje po tekstualnoj vrednosti
Tabela Studenti:
| ID | Ime | Grad |
|---|---|---|
| 1 | Nikola | Novi Sad |
| 2 | Jelena | Beograd |
| 3 | Marko | Novi Sad |
DELETE FROM Studenti
WHERE Grad = 'Novi Sad'
Brišu se svi studenti iz Novog Sada.
Kombinovanje uslova
DELETE FROM Zaposleni
WHERE Plata < 50000 AND Ime = 'Ivan'
Bezbedan rad
Pre DELETE uvek proveriti ono što biste možda obrisali (nema "undo"!):
SELECT * FROM Zaposleni
WHERE Plata < 50000
Zadaci za vežbu
Tabela Proizvodi:
| ID | Naziv | Cena |
|---|---|---|
| 1 | Hleb | 60 |
| 2 | Mleko | 120 |
| 3 | Jogurt | 110 |
| 4 | Sir | 500 |
Zadatak 1: Obrisati proizvod Hleb.
Zadatak 2: Obrisati proizvod sa ID = 2.
Zadatak 3: Obrisati sve proizvode čija je cena veća od 200.
Zadatak 4: Obrisati sve proizvode čija je cena manja od 100.
* ---
Završni zadatak (ako stignemo)
Tabela Zaposleni:
| ID | Ime | Plata |
|---|---|---|
| 1 | Marko | 50000 |
| 2 | Ana | 52000 |
| 3 | Ivan | 48000 |
| 4 | Jelena | 47000 |
Napisati SQL naredbe za:
-
brisanje zaposlenog Ivan
-
brisanje zaposlenih sa platom manjom od 48000
-
brisanje zaposlenog sa ID = 1
Zaključak
DELETE naredba je veoma moćna i potencijalno opasna, jer omogućava trajno brisanje podataka.
Zato je poželjno:
-
koristiti WHERE uslov
-
prethodno proveriti SELECT upit
-
pažljivo pisati uslove