70 likes | 263 Views
SQL DML stavki, ki spremenijo stanje PB. INSERT Dodajanje novih vrstic tabele UPDATE Spreminjanje vrednosti atributov v obstoječih vrsticah tabele DELETE Brisanje vrstic tabele
E N D
SQL DML stavki, ki spremenijo stanje PB • INSERT • Dodajanje novih vrstic tabele • UPDATE • Spreminjanje vrednosti atributov v obstoječih vrsticah tabele • DELETE • Brisanje vrstic tabele • Skupna značilnost: stavki se uspešno izvedejo le, če bo tudi novo stanje PB legalno (če ne pride do kršitev integritetnih omejitev)
1. INSERT • V tabelo doda 1 ali več vrstic • Uporaba: • Dodajanje novih zapisov INSERT INTO ime_tabele (atr1,atr2,…) VALUES (vr1,vr2,…); • Prepisovanje vsebine ene tabele v drugo INSERT INTO tabela1 (atr1,atr2,…) SELECT (atr1,atr2,…) FROM tabela2; • V tabelo Dijak dodajte zapis “20030”,”Kovač”,”Mojca”,”G4A” INSERT INTO Dijak (DijakID,Priimek,Ime,Razred) VALUES (“20030”,”Kovač”,”Mojca”,”G4A”); • Vsebino tabele Dijak za dijake razreda G2A prepišite v tabelo G2A INSERT INTO G2A (DijakID,Priimek,Ime,Razred,Rojen) SELECT (DijakID,Priimek,Ime,Razred,Rojen) FROM Dijak WHERE Dijak.Razred=‘G2A’; • Insert ne uspe, če: • pride do podvajanja PK, • niso navedeni vsi zahtevani atributi, • se tip atributa in vrednost ne ujemata, • vpisujemo vrednost tujega ključa, ki v starševski tabeli ne obstaja, • vrednost atributa že obstaja, atribut pa je opredeljen kot razločevalen (unique) • …
2. DELETE • Iz tabele izbriše eno ali več vrstic • Uporaba: • Brisanje vseh vrstic tabele DELETE FROM ime_tabele; -Pogojno brisanje vrstic tabele DELETE FROM ime_tabele WHERE pogoj; -Opomba: pogoj se lahko nanaša tudi na vrednosti atributov neke druge tabele, v tem primeru sledi gnezdeni stavek SELECT • Primeri • Stavek, ki izbriše vse vrstice tabele Obiskuje: • DELETE FROM Obiskuje; • Stavek, ki izbriše podatke o dijakih iz razreda G2A: • DELETE FROM Dijak WHERE Dijak.Razred=“G2A”; • Stavek, ki izbriše podatke o obiskih krožka PHP • DELETE FROM Obisk WHERE Obisk.KrozekID IN (SELECT Krozek.KrozekID WHERE Krozek.ImeKrozka=“PHP”); • Delete ne uspe, če: • Brišemo zapis starševske tabele in hkrati obstaja zapis v tabeli otrok, tip referncialne integritete pa je nastavljen na ‘prohibit’
3. UPDATE • Posodobi vrednost enega ali več atributov tabele • Uporaba: • Posodabljanje vrednosti atributa v vseh vrsticah tabele UPDATE ime_tabele SET ime_atributa = nova_vrednost, …; -Pogojno posodabljanje vrednosti atributa tabele UPDATE ime_tabele SET ime_atributa = nova_vrednost, …WHERE pogoj; -Opomba: pogoj se lahko nanaša tudi na vrednosti atributov neke druge tabele, v tem primeru sledi gnezdeni stavek SELECT • Primeri • Stavek, ki priimke dijakov prestavi v velike črke: • UPDATE Dijak SET Dijak.Priimek=UPPER(Dijak.Priimek);
3. UPDATE (nad.) • Update ne uspe, če: • pride do podvajanja PK, • vrednost neopcijkih atributov nastavljamo na NULL, • se tip atributa in vrednost ne ujemata, • vpisujemo vrednost tujega ključa, ki v starševski tabeli ne obstaja, • vrednost atributa že obstaja, atribut pa je opredeljen kot razločevalen (unique) • Posodabljamo zapis starševske tabele in hkrati obstaja zapis v tabeli otrok, tip referncialne integritete pa je nastavljen na ‘prohibit’ • Prihaja do kršitve katerekoli druge integritetne omejitve (CHECH, IN, ….)
Naloge (sladoledi) Podane so relacije: obiskuje, prodaja in najraje. Sh(obiskuje)=Obiskuje(Otrok:A10,Slaščičarna:A20) Sh(prodaja)=Prodaja(Slaščičarna:A20,Sladoled:A20) Sh(najraje)=Najraje(Otrok:A10,Sladoled:A20) Podatki v relacijah so:
Vprašanja: Napišite stavek SQL /izraz rel.alg., ki vrne: • imena otrok, ki zahajajo v slaščičarno Zmajček; • s katerim sladoledom lahko postrežejo v slaščičarni Slon; • s katerim sladoledom se lahko posladka Jana; • imena otrok, ki obiskujejo slaščičarni Zmajček in Slon (obe) • imena otrok, ki zahajajo samo v slaščičarno Zmajček; • v katerih slaščičarnah prodajajo Juretov najljubši sladoled; • imena otrok, ki obiskujejo le slaščičarno Slon; • v katero slaščičarno zahajajo vsi otroci; • v kateri slaščičarni ponujajo vse sladolede; • kateri otrok zahaja v vse slaščičarne; • kateri otrok ne hodi v slaščičarno Slon; • katere sladolede ne strežejo pri Slonu; Napišite answer tabelo, ki jo vrnejo naslednji stavki SQL: • SELECT Obiskuje.Otrok FROM Obiskuje; • SELECT COUNT(*) FROM Prodaja; • SELECT MAX(Prodaja.Slascicarna) FROM Prodaja,Obiskuje WHERE Prodaja. Slascicarna=Obiskuje.Slascicarna; • SELECT Najraje.Otrok FROM Najraje LEFT OUTER JOIN Obiskuje ON (Najraje.Otrok=Obiskuje.Otrok); • SELECT COUNT(Obiskuje.Slascicarna), Obiskuje.Otrok FROM Obiskuje GROUP BY Obiskuje.Otrok; • SELECT * FROM Obiskuje, Prodaja WHERE Obiskuje.Slascicarna=Prodaja.Slascicarna AND Prodaja.Sladoled = ‘čokolada’ AND Prodaja.Sladoled = ‘jagoda’;