310 likes | 599 Views
Relacijska algebra in SQL DML (D ata M anipulation L anguage). Manipulacija s podatki. Teoretična osnova: relacijska algebra in relacijski račun Implementacija: SQL DML (Data Manipulation Language) Osnovne operacije: Branje Dodajanje Spreminjanje Brisanje.
E N D
Manipulacija s podatki • Teoretična osnova: relacijska algebra in relacijski račun • Implementacija: SQL DML (Data Manipulation Language) • Osnovne operacije: • Branje • Dodajanje • Spreminjanje • Brisanje
Ukazi relac. algebre SQL DML stavki • Projekcija • Selekcija • Unija • Razlika • Kartezični produkt ====== • Presek • Theta stik • Naravni stik • Količnik • SELECT • INSERT • DELETE • UPDATE • ====== • SQL agregirane funkcije • Funkcije za delo z datumi • Funkcije za delo z nizi
Dijak Rel. algebra – projekcija [atr1,atr2,..]relacija Značilnost: ni podvajanj vrstic Vrne vrednosti le navedenih atributov SQL SELECT [*|atr1,atr2,…] FROM tabela; Značilnost: vrstice v odgovoru so lahko podvojene!!! SELECT DISTINCT atr1,atr2,… FROM tabela; Značilnost: vrstice odgovor niso nikoli podvojene! Dodatna SQL možnost – razvrščanje podatkov SELECT atr1,atr2,… FROM tabela ORDER BY atrx [ASC|DESC],atry [ASC|DESC],…; Privzeto razvrščanje je ASC (naraščajoče) Osnovno branje podatkov
Dijak Osnovno branje podatkov primer SELECT DISTINCT Dijak.Ime FROM Dijak; [Dijak.Ime]Dijak [Dijak.Ime]Dijak Odgovor: SELECT Dijak.Ime FROM Dijak;
Dijak Osnovno branje podatkov primer (nad.) SELECT Dijak.Priimek, Dijak.Ime FROM Dijak ORDER BY Dijak.Priimek; [Dijak.Ime]Dijak Odgovor:
Dijak Rel. algebra – selekcija [pogoj]relacija Značilnost: selekcija vrne vse atribute tistih vrstic, ki ustrezajo pogoju, ni podvajanj vrstic v odgovoru V pogoju lahko uporabljamo: primerjalne operatorje: =, <>, <, <=, >, >= logične operatorje: AND, OR, NOT SQL SELECT atr1,atr2,… FROM tabela WHERE pogoj; V pogoju lahko uporabljamo: primerjalne operatorje logične operatorje operator like v kombinaciji z % (SQL92) ali * (Microsoft) Operator BETWEEN spodnja_meja AND zgornja_meja Operator IN (množica elementov) Osnovno branje podatkov s pogoji
Dijak Osnovno branje podatkov s pogoji - primer SELECT DISTINCT Dijak.Ime FROM Dijak WHERE Dijak.Ime LIKE “J%”; [Dijak.Ime] [(Dijak.ime>=‘J’) AND (Dijak.Ime<‘K’)]Dijak [Dijak.Ime]Dijak Odgovor:
Dijak Osnovno branje podatkov s pogoji – primeri (nad.) SELECT DISTINCT Dijak.Ime FROM Dijak WHERE Dijak.Razred in (“G2A”,”G2B”); [Dijak.Ime] [(Dijak.Razred=‘G2A’) OR (Dijak.Razred=‘G2B’)]Dijak [Dijak.Ime]Dijak Odgovor: SELECT DISTINCT Dijak.Ime, Dijak.Rojen FROM Dijak WHERE (((Dijak.Rojen) Between #1.10.1980# And #31.10.1980#)); [Dijak.Ime]([(Dijak.Rojen)>=‘1.10.1980’) AND (Dijak.Rojen <=’31.10.1980’)]Dijak
Unija • Rel. algebra – unija relacija1 relacija2 Značilnost: relacija1 in relacija2 morata imeti enaki shemi; vrne vse vrstice obeh relacij brez dvojnikov (unija množic) • SQL SELECT atr1,atr2,… FROM tabela1 UNION SELECT atr1,atr2,… FROM tabela2; Navedeni morajo biti isti atributi iz obeh tabel!
Unija - primer g2a g2b SELECT * FROM g2a UNION SELECT * FROM g2b; g2a g2b
Razlika • Rel. algebra – razlika relacija1 - relacija2 Značilnost: relacija1 in relacija2 morata imeti enaki shemi; vrne vse vrstice relacije1, ki niso v relaciji 2 (razlika množic) • SQL • Operacijo razlike izvedemo posredno s pomočjo operatorja NOT atribut IN tabela2(ni element množice) SELECT atr1,atr2,… FROM tabela1 WHERE NOT atrx IN (SELECT atrx FROM tabela2); Navedeni morajo biti isti atributi iz obeh tabel!
Obiskuje Dijak Razlika - primer SELECT Dijak.IDDijak FROM Dijak WHERE NOT Dijak.IDDijak IN (SELECT Obiskuje.IDDijak FROM Obiskuje); [Dijak.IDDijak] Dijak - [Obiskuje.IDDijak] Obiskuje
Presek • Rel. algebra – presek relacija1 relacija2 Značilnost: relacija1 in relacija2 morata imeti enaki shemi; Vrne skupne vrstice relacije1 in relacije2 brez dvojnikov (presek množic) • SQL • Operacijo razlike izvedemo posredno s pomočjo operatorja atribut IN tabela2 (je element množice) SELECT atr1,atr2,… FROM tabela1 WHERE atrx IN (SELECT atrx FROM tabela2); Navedeni morajo biti isti atributi iz obeh tabel!
Presek - primer g2b g2a SELECT g2a.Ime FROM g2a WHERE g2a.Ime IN (SELECT g2b.Ime FROM g2b); [g2a.ime]g2a [g2b.ime]g2b
Kartezični produkt • Zelo ‘prijazna operacija’ ): • Enostavna sintaksa • Dela vedno (pri tej operaciji ponavadi ne naredimo nobene sintaktične napake) • Poveže vse vrstice relacije1 z vsemi vrsticami relacije2 • Še zanimivejša izvedba: z enim stavkom povežite v kartezični produkt 3, 4 ali več relacij • Odgovori na kartezični produkt so tabele s ‘skromnim’ številom vrstic • Opomba: ne bodite presenečeni, če vam vmesna tabela za odgovor zavzame ves preostali prostor na disku
Kartezični produkt (nad.) • Rel. algebra – kartezični produkt • relacija1 X relacija2 • Značilnost: vrne vse možne kombinacije n-teric prve in druge relacije z vsemi atributi • SQL • Kartezični produkt implementiramo tako, da pod FROM navedemo vse tabele • SELECT * FROM tabela1, tabela2, …;
Kartezični produkt - primer Dijak Krozek SELECT * FROM Dijak,Krozek; Dijak Krozek krajši izsek rezultata poizvedbe si lahko ogledate na naslednji prosojnici ):
Theta stik • Rel. algebra – theta stik • relacija1 |X| relacija2 [pogoj] • Značilnost: vrne vse možne kombinacije n-teric z vsemi atributi prve in druge relacije, ki ustrezajo pogoju • SQL • Theta stik implementiramo tako, da pod FROM navedemo vse tabele, pod WHERE pa pogoj(e) SELECT [*|tabela1.atr1,…] FROM tabela1, tabela2, … WHERE pogoj;
Obiskuje Dijak Theta stik - primer SELECT * FROM Dijak,Obiskuje WHERE Dijak.IDDijak=Obiskuje.IDDijak; Dijak || Obiskuje [Dijak.IDdijak=Obiskuje.IDDijak]
Naravni stik • Rel. algebra – naravni stik • relacija1 |X| relacija2 • Značilnost: relacija1 in relacija 2 morata imeti 1 ali več skupnih atributov • vrne vse možne kombinacije n-teric prve in druge relacije, pri katerih sta vrednosti skupnih atributov enaki; vrne vse atribute obeh relacij • SQL • Naravni stik implementiramo z opertorjem INNER JOIN tako, da pod FROM navedemo ime prve tabele pod INNER JOIN pa ime druge tabele in pogoj za povezovanje SELECT * FROM tabela1 INNER JOIN tabela2 ON (tabela1.atributx = tabela2.atributx);
Naravni stik - primer Obiskuje SELECT Dijak.Priimek, Dijak.Ime, Obiskuje.IDKrozek FROM Dijak INNER JOIN Obiskuje ON Dijak.IDDijak = Obiskuje.IDDijak; [Dijak.Priimek, Dijak.Ime, Obiskuje.IDKrozek] (dijak |x| obiskuje) Dijak
Količnik • Rel. algebra – količnik • relacija1 / relacija2 • Značilnost: relacija1 mora imeti vse atribute relacije2 in zraven še lastne (vsaj enega); vrne le atribute, ki so v relaciji 1 in niso v relaciji 2 in sicer le tiste n-terice relacije 1, za katere obstajajo vse kombinacije vrednosti z n-tericama v imenovalcu (relaciji 2) • SQL • Količnik v SQL stavku implementiramo posredno, s povezovanjem tabel in uporabo vgrajene agregirane funkcije COUNT SELECT * FROM tabela1 INNER JOIN tabela2 ON (tabela1.atributx = tabela2.atributx);
Dijak Rel. algebra – postopek Kako dobim seznam vseh krožkov? [Krozek.IDKrozek] Krozek Kako dobim seznam kdo obiskuje katere krožke? relacija obiskuje Kako vem kateri IDDijak obiskuje vse krožke – uporabim količnik? obiskuje / [Krozek.IDKrozek] Krozek Ostal je le atribut IDDijak, kako pridem do priimkov in imen teh dijakov? naredim naravni stik Naredim projekcijo zahtevanih atributov (imena in priimka) Končna rešitev: [Dijak.ime,Dijak.priimek]((Obiskuje/[Krozek.IDKrozek] Krozek) |x| Dijak)) Količnik primerIzpišite imena dijakov, ki obiskujejo vse krožke! 2. 1. 3. 4. 5.
Količnik – primer v SQL-u • SQL – postopek • Preštej koliko je vseh krožkov? SELECT COUNT(Krozek.IDKrozek) FROM Krozek; • Preštej koliko krožkov obiskuje posamezni dijak? SELECT Dijak.Ime, Dijak.Priimek, Count(Obiskuje.IDKrozek) FROM Dijak, Obiskuje WHERE (((Dijak.IDDijak)=[Obiskuje].[IDdijak])) GROUP BY Dijak.Ime, Dijak.Priimek, Dijak.IDDijak; • Izenači dobljena rezultata s pogojem HAVING • Končna rešitev: SELECT Dijak.Ime, Dijak.Priimek FROM Dijak, Obiskuje WHERE (((Dijak.IDDijak)=[Obiskuje].[IDdijak])) GROUP BY Dijak.Ime, Dijak.Priimek, Dijak.IDDijak HAVING (((Count(Obiskuje.IDKrozek))= (SELECT COUNT(Krozek.IDKrozek) FROM Krozek)));
N & N – kdaj uporabiti katero operacijo? • Selekcija in projekcija • Naravni ali theta stik, selekcija, projekcija • Selekcija, projekcija za pogoj1 PRESEK selekcija, projekcija za pogoj2 • Selekcija, projekcija za pogoj1 RAZLIKA selekcija, projekcija za negiran pogoj 1 • Projekcija vseh RAZLIKA selekcija, projekcija tistih, ki ustrezajo pogoju 1 • Projekcija želenih atributov tabele 1 KOLIČNIK projekcija atributa pogoja iz tabele 2 • Izpišite …, ki ustrezajo pogoju (podatki so v eni tabeli) • Izpišite …, ki ustrezajo pogoju (podatki so v različnih tabelah) • Izpišite …, ki ustrezajo pogoju1 in ustrezajo pogoju 2 (pogoja se nanašata na isto zadevo) • Izpišite …, ki ustrezajo samo pogoju1 (obstaja možnost, da nekdo ustreza še kakšnem pogoju iste kategorije kot je pogoj 1) • Izpišite …, ki ne ustrezajo pogoju1 (obstaja možnost, da nekdo ustreza še kakšnem pogoju iste kategorije kot je pogoj 1) • Izpišite …, ki ustrezajo vsem pogojem (pogoji se nanašajo na zalogo vrednosti neke celotne tabele)
Naloge& namigi(SQL stavek in izraz relacijske algebre) • Izpiši abecedni seznam imen krožkov. // projekcija • Izpiši priimke in imena dijakov razreda G2A. // projekcija, selekcija • Izpiši imena krožkov, ki jih obiskuje dijak z IDDijak 12. //projekcija, selekcija, naravni/theta stik • Izpiši imena krožkov, ki jih obiskuje Miha Novak. // projekcija, selekcija, naravni/theta stik • Izpiši imena krožkov, ki jih obiskujejo le dijaki razreda G2A. // projekcija, selekcija, naravni/theta stik, razlika • Izpiši imena krožkov, ki jih ne obiskuje Miha Novak. // projekcija, selekcija, naravni/theta stik, razlika • Izpiši imena krožkov, ki jih obiskuje samo Miha Novak. // projekcija, selekcija, naravni/theta stik, razlika • Izpiši imena krožkov, ki jih obiskuje vsaj 1 dijak razreda G2A in vsaj 1 dijak razreda G2B. // projekcija, selekcija, naravni/theta stik, presek • Izpiši priimke in imena dijakov, ki obiskujejo krožek Šah in Video (oba krožka). // projekcija, selekcija, naravni/theta stik, presek • Izpiši priimke in imena dijakov, ki ne obiskujejo nobenega krožka razen PHP. // projekcija, selekcija, naravni/theta stik, razlika • Izpiši imena krožkov, ki jih obiskujejo vsi dijaki. // projekcija, selekcija, naravni/theta stik, količnik • Izpiši imena krožkov, ki se ne izvajajo (nihče jih ne obiskuje). // projekcija, razlika