SQL brisanje podataka (DELETE)
Redovi tabele se mogu obrisati korišćenjem iskaza DELETE. Možemo obrisati sve ili samo neke redove u tabeli. Ovaj upit koristimo najčešće u obliku:
DELETE FROM tabela
WHERE uslov
Na ovaj način će biti obrisani redovi tabele čiji podaci zadovoljavaju uslov zadat u WHERE klauzuli. Nemojte zaboraviti da zadate WHERE uslov, pošto će DELETE upit u sledećem obliku obrisati sve redove:
DELETE FROM tabela
Slično kao SELECT upit, i u DELETE iskazu se mogu zadati redosled brisanja klauzulom ORDER BY, kao i broj obrisanih podataka pomoću klauzule LIMIT.
DELETE FROM tabela
WHERE uslov
ORDER BY polje [DESC], polje...
LIMIT [preskok,] broj
Primer
Kao primer ćemo iskoristiti tabelu komponente u kojoj se nalaze podaci potrebni za prodaju kompjuterske opreme. Recimo da je stanje stanje u tabeli je ovakvo:
id | tip | nabavna | prodajna | naziv |
---|---|---|---|---|
TS08 | Tastatura | 20 | 24 | Genius USB Slim |
MT22 | Monitor | 390 | 468 | Samsung LED 23" |
HD51 | HDD | 180 | 216 | WD 4TB/64MB |
MM04 | Memorija | 34 | 40.8 | Kingston DDR3 4GB |
MS28 | Miš | 15 | 18 | Logitech USB Optic |
DELETE upit možemo npr. zadati na sledeći način:
DELETE FROM komponente
WHERE id='HD51'
Pošto smo u uslovu zadali tačno određeni primerni ključ, "gađamo" samo jedan i to određeni red tabele. U tabeli smo ga obeležili crvenom bojom:
id | tip | nabavna | prodajna | naziv |
---|---|---|---|---|
TS08 | Tastatura | 20 | 24 | Genius USB Slim |
MT22 | Monitor | 390 | 468 | Samsung LED 23" |
HD51 | HDD | 180 | 216 | WD 4TB/64MB |
MM04 | Memorija | 34 | 40.8 | Kingston DDR3 4GB |
MS28 | Miš | 15 | 18 | Logitech USB Optic |
Sa druge strane, upit se može zadati tako da obuhvati više redova:
DELETE FROM komponente
WHERE (tip LIKE 'M%') AND (prodajna<50)
Ovde će biti obrisani svi redovi u kojima polje tip počinje slovom M i kod kojih je istovremeno prodajna cena manja od 50. Primećujete da "Tastatura" i "Monitor" nisu obuhvaćeni, prvi zbog početnog slova iako ima odgogvarajuću cenu, a drugi zbog cene iako ima odgovarajuće početno slovo.
id | tip | nabavna | prodajna | naziv |
---|---|---|---|---|
TS08 | Tastatura | 20 | 24 | Genius USB Slim |
MT22 | Monitor | 390 | 468 | Samsung LED 23" |
HD51 | HDD | 180 | 216 | WD 4TB/64MB |
MM04 | Memorija | 34 | 40.8 | Kingston DDR3 4GB |
MS28 | Miš | 15 | 18 | Logitech USB Optic |
Konačno da vidimo kako bismo primenili LIMIT i sortiranje na DELETE iskaz.
DELETE FROM komponente
ORDER BY nabavna DESC
LIMIT 1
Ovo bi značilo da baza prvo sortira podatke po polju nabavna i to po opadajućem (DESC) redosledu. Onda se vrši brisanje. Pošto nismo naveli WHERE klauzulu, bili bi obrisani svi podaci - i tada ne bi imalo nikakvog smisla što smo ih sortirali. Međutim, tu je i klauzula LIMIT koja ograničava delovanje upita i to u ovom slučaju an samo jedan (prvi) red. To znači da ovim upitom u stvari brišemo red sa najvećom nabavnom cenom:
id | tip | nabavna | prodajna | naziv |
---|---|---|---|---|
TS08 | Tastatura | 20 | 24 | Genius USB Slim |
MT22 | Monitor | 390 | 468 | Samsung LED 23" |
HD51 | HDD | 180 | 216 | WD 4TB/64MB |
MM04 | Memorija | 34 | 40.8 | Kingston DDR3 4GB |
MS28 | Miš | 15 | 18 | Logitech USB Optic |