relacijska algebra in sql dml (d ata m anipulation l anguage)
Post on 02-Feb-2016
82 Views
Preview:
DESCRIPTION
TRANSCRIPT
Relacijska algebra inRelacijska algebra inSQL DMLSQL DML
(D(Data ata MManipulation anipulation LLanguage)anguage)
22
Manipulacija s podatkiManipulacija s podatki
Teoretična osnova: relacijska algebra Teoretična osnova: relacijska algebra in relacijski računin relacijski račun
Implementacija: SQL DML (Data Implementacija: SQL DML (Data Manipulation Language)Manipulation Language)
Osnovne operacije:Osnovne operacije:– BranjeBranje– DodajanjeDodajanje– SpreminjanjeSpreminjanje– BrisanjeBrisanje
33
Ukazi relac. algebre SQL DML stavkiUkazi relac. algebre SQL DML stavki
ProjekcijaProjekcija SelekcijaSelekcija Unija Unija RazlikaRazlika Kartezični produktKartezični produkt============ PresekPresek Theta stikTheta stik Naravni stikNaravni stik KoličnikKoličnik
SELECTSELECT INSERTINSERT DELETEDELETE UPDATEUPDATE ============ SQL agregirane SQL agregirane
funkcijefunkcije Funkcije za delo z Funkcije za delo z
datumidatumi Funkcije za delo z Funkcije za delo z
nizinizi
44
Osnovno branje podatkovOsnovno branje podatkov Rel. algebra – projekcija Rel. algebra – projekcija [atr1,atr2,..]relacija[atr1,atr2,..]relacijaZnačilnost: ni podvajanj vrstic Značilnost: ni podvajanj vrstic Vrne vrednosti le navedenih atributovVrne vrednosti le navedenih atributov
SQL SQL SELECT [*|atr1,atr2,…] FROM tabela;SELECT [*|atr1,atr2,…] FROM tabela;
Značilnost: vrstice v odgovoru so lahko podvojene!!!Značilnost: vrstice v odgovoru so lahko podvojene!!!
SELECT DISTINCT atr1,atr2,… FROM tabela;SELECT DISTINCT atr1,atr2,… FROM tabela;
Značilnost: vrstice odgovor niso nikoli podvojene!Značilnost: vrstice odgovor niso nikoli podvojene!
Dodatna SQL možnost – razvrščanje podatkovDodatna SQL možnost – razvrščanje podatkov
SELECT atr1,atr2,… FROM tabela ORDER BY atrx [ASC|DESC],atry SELECT atr1,atr2,… FROM tabela ORDER BY atrx [ASC|DESC],atry [ASC|DESC],…;[ASC|DESC],…;
Privzeto razvrščanje je ASC (naraščajoče)Privzeto razvrščanje je ASC (naraščajoče)
Dijak
55
Osnovno branje podatkov primerOsnovno branje podatkov primer
[Dijak.Ime]Dijak[Dijak.Ime]Dijak
Odgovor:Odgovor:
Ime
Andrej
Mateja
Mitja
Maria
Jana
Polona
Janez
Jernej
Miha
Gregor
Anže
Žiga
Jure
Dijak
IDDijak Priimek Ime Razred Rojen
10191 ŠTUPAR Andrej G2A 15.10.1980
10205 MLINAR Mateja G2A 15.11.1985
10301 DOLENC Mitja G2A 15.12.1990
10305 VERK Maria G2C 15.12.1987
10309 ŽAVBI Jana G2B 15.10.1987
10310 JUH Polona G2C 15.10.1980
10320 DOLHAR Andrej G2A 15.10.1980
10330 AMBROŽIČ Jure G2A 15.3.1980
10432 DOLINAR Janez G2B 15.4.1980
10435 MAZI Jernej G2C 15.5.1980
10444 KOŽELJ Jure G2B 13.10.1980
10455 NOVAK Miha G2B 15.10.1980
10666 GREGORIČ Gregor G2B 15.10.1980
10777 POŽAR Anže G2C 10.4.1980
10873 LAVRIH Žiga G2C 15.1.1980
10920 ARHAR Jure G2B 15.2.1980
Ime
Andrej
Mateja
Mitja
Maria
Jana
Polona
Andrej
Jure
Janez
Jernej
Jure
Miha
Gregor
Anže
Žiga
Jure
SELECT DISTINCT Dijak.Ime FROM Dijak;[Dijak.Ime]Dijak
SELECT Dijak.Ime FROM Dijak;
66
Osnovno branje podatkov primer (nad.)Osnovno branje podatkov primer (nad.)
[Dijak.Ime]Dijak[Dijak.Ime]Dijak
Odgovor:Odgovor:
Dijak
IDDijak Priimek Ime Razred Rojen
10191 ŠTUPAR Andrej G2A 15.10.1980
10205 MLINAR Mateja G2A 15.11.1985
10301 DOLENC Mitja G2A 15.12.1990
10305 VERK Maria G2C 15.12.1987
10309 ŽAVBI Jana G2B 15.10.1987
10310 JUH Polona G2C 15.10.1980
10320 DOLHAR Andrej G2A 15.10.1980
10330 AMBROŽIČ Jure G2A 15.3.1980
10432 DOLINAR Janez G2B 15.4.1980
10435 MAZI Jernej G2C 15.5.1980
10444 KOŽELJ Jure G2B 13.10.1980
10455 NOVAK Miha G2B 15.10.1980
10666 GREGORIČ Gregor G2B 15.10.1980
10777 POŽAR Anže G2C 10.4.1980
10873 LAVRIH Žiga G2C 15.1.1980
10920 ARHAR Jure G2B 15.2.1980
SELECT Dijak.Priimek, Dijak.Ime FROM Dijak ORDER BY Dijak.Priimek;
Priimek Ime
AMBROŽIČ Jure
ARHAR Jure
DOLENC Mitja
DOLHAR Andrej
DOLINAR Janez
GREGORIČ Gregor
JUH Polona
KOŽELJ Jure
LAVRIH Žiga
MAZI Jernej
MLINAR Mateja
NOVAK Miha
POŽAR Anže
ŠTUPAR Andrej
VERK Maria
ŽAVBI Jana
77
Osnovno branje podatkov s Osnovno branje podatkov s pogojipogoji Rel. algebra – selekcija Rel. algebra – selekcija
[pogoj]relacija[pogoj]relacija
Značilnost: selekcija vrne vse atribute tistih vrstic, ki ustrezajo Značilnost: selekcija vrne vse atribute tistih vrstic, ki ustrezajo pogoju, ni podvajanj vrstic v odgovorupogoju, ni podvajanj vrstic v odgovoru
V pogoju lahko uporabljamo:V pogoju lahko uporabljamo:• primerjalne operatorje: =, <>, <, <=, >, >=primerjalne operatorje: =, <>, <, <=, >, >=• logične operatorje: AND, OR, NOTlogične operatorje: AND, OR, NOT
SQL SQL SELECT atr1,atr2,… FROM tabela WHERE pogoj;SELECT atr1,atr2,… FROM tabela WHERE pogoj;
V pogoju lahko uporabljamo:V pogoju lahko uporabljamo:– primerjalne operatorjeprimerjalne operatorje– logične operatorjelogične operatorje– operator like v kombinaciji z % (SQL92) ali * (Microsoft)operator like v kombinaciji z % (SQL92) ali * (Microsoft)– Operator BETWEEN spodnja_meja AND zgornja_mejaOperator BETWEEN spodnja_meja AND zgornja_meja– Operator IN (množica elementov) Operator IN (množica elementov)
Dijak
88
Osnovno branje podatkov s pogoji - primerOsnovno branje podatkov s pogoji - primer
[Dijak.Ime]Dijak[Dijak.Ime]Dijak
Odgovor:Odgovor:
Dijak
IDDijak Priimek Ime Razred Rojen
10191 ŠTUPAR Andrej G2A 15.10.1980
10205 MLINAR Mateja G2A 15.11.1985
10301 DOLENC Mitja G2A 15.12.1990
10305 VERK Maria G2C 15.12.1987
10309 ŽAVBI Jana G2B 15.10.1987
10310 JUH Polona G2C 15.10.1980
10320 DOLHAR Andrej G2A 15.10.1980
10330 AMBROŽIČ Jure G2A 15.3.1980
10432 DOLINAR Janez G2B 15.4.1980
10435 MAZI Jernej G2C 15.5.1980
10444 KOŽELJ Jure G2B 13.10.1980
10455 NOVAK Miha G2B 15.10.1980
10666 GREGORIČ Gregor G2B 15.10.1980
10777 POŽAR Anže G2C 10.4.1980
10873 LAVRIH Žiga G2C 15.1.1980
10920 ARHAR Jure G2B 15.2.1980
SELECT DISTINCT Dijak.Ime FROM DijakWHERE Dijak.Ime LIKE “J%”;
[Dijak.Ime] [(Dijak.ime>=‘J’) AND (Dijak.Ime<‘K’)]Dijak
Ime
Jana
Janez
Jernej
Jure
99
Osnovno branje podatkov s pogoji – primeri (nad.)Osnovno branje podatkov s pogoji – primeri (nad.)
[Dijak.Ime]Dijak[Dijak.Ime]Dijak
Odgovor:Odgovor:
Dijak
IDDijak Priimek Ime Razred Rojen
10191 ŠTUPAR Andrej G2A 15.10.1980
10205 MLINAR Mateja G2A 15.11.1985
10301 DOLENC Mitja G2A 15.12.1990
10305 VERK Maria G2C 15.12.1987
10309 ŽAVBI Jana G2B 15.10.1987
10310 JUH Polona G2C 15.10.1980
10320 DOLHAR Andrej G2A 15.10.1980
10330 AMBROŽIČ Jure G2A 15.3.1980
10432 DOLINAR Janez G2B 15.4.1980
10435 MAZI Jernej G2C 15.5.1980
10444 KOŽELJ Jure G2B 13.10.1980
10455 NOVAK Miha G2B 15.10.1980
10666 GREGORIČ Gregor G2B 15.10.1980
10777 POŽAR Anže G2C 10.4.1980
10873 LAVRIH Žiga G2C 15.1.1980
10920 ARHAR Jure G2B 15.2.1980
SELECT DISTINCT Dijak.Ime FROM DijakWHERE Dijak.Razred in (“G2A”,”G2B”);
[Dijak.Ime] [(Dijak.Razred=‘G2A’) OR (Dijak.Razred=‘G2B’)]Dijak
Ime
Andrej
Gregor
Jana
Janez
Jure
Mateja
Miha
Mitja
SELECT DISTINCT Dijak.Ime, Dijak.RojenFROM DijakWHERE (((Dijak.Rojen) Between #1.10.1980# And #31.10.1980#));
[Dijak.Ime]([(Dijak.Rojen)>=‘1.10.1980’) AND (Dijak.Rojen <=’31.10.1980’)]Dijak
Ime Rojen
Andrej 15.10.1980
Gregor 15.10.1980
Jure 13.10.1980
Miha 15.10.1980
Polona 15.10.1980
1010
UnijaUnija
Rel. algebra – unija Rel. algebra – unija relacija1 relacija1 relacija2 relacija2Značilnost: relacija1 in relacija2 morata imeti enaki Značilnost: relacija1 in relacija2 morata imeti enaki
shemi; vrne vse vrstice obeh relacij brez dvojnikov shemi; vrne vse vrstice obeh relacij brez dvojnikov (unija množic)(unija množic)
SQL SQL SELECT atr1,atr2,… FROM tabela1 UNION SELECT atr1,atr2,… FROM tabela1 UNION SELECT atr1,atr2,… FROM tabela2;SELECT atr1,atr2,… FROM tabela2;
Navedeni morajo biti isti atributi iz obeh tabel!Navedeni morajo biti isti atributi iz obeh tabel!
1111
Unija - primerUnija - primer
g2a Razred IDDijak Priimek Ime Rojen
g2a 10191 Štupar Andrej 15.10.1980
G2A 10205 Mlinar Mateja 15.11.1985
G2A 10301 Dolenc Mitja 15.12.1990
G2A 10320 Dolhar Andrej 15.10.1980
G2A 10330 Ambrožič Jure 15.3.1980
g2b Razred IDDijak Priimek Ime Rojen
G2B 10309 Žavbi Jana 15.10.1987
G2B 10920 Arhar Jure 15.2.1980
G2B 10432 Dolinar Janez 15.4.1980
G2B 10444 Koželj Jure 13.10.1980
G2B 10455 Novak Miha 15.10.1980
G2B 10666 Gregorič Gregor 15.10.1980
SELECT * FROM g2a UNION SELECT * FROM g2b;
g2a g2b Razred IDDijak Priimek Ime Rojen
g2a 10191 Štupar Andrej 15.10.1980
G2A 10205 Mlinar Mateja 15.11.1985
G2A 10301 Dolenc Mitja 15.12.1990
G2A 10320 Dolhar Andrej 15.10.1980
G2A 10330 Ambrožič Jure 15.3.1980
G2B 10309 Žavbi Jana 15.10.1987
G2B 10432 Dolinar Janez 15.4.1980
G2B 10444 Koželj Jure 13.10.1980
G2B 10455 Novak Miha 15.10.1980
G2B 10666 Gregorič Gregor 15.10.1980
G2B 10920 Arhar Jure 15.2.1980
1212
RazlikaRazlika
Rel. algebra – razlika Rel. algebra – razlika relacija1 - relacija2relacija1 - relacija2Značilnost: relacija1 in relacija2 morata imeti enaki shemi; Značilnost: relacija1 in relacija2 morata imeti enaki shemi;
vrne vse vrstice relacije1, ki niso v relaciji 2 (razlika množic)vrne vse vrstice relacije1, ki niso v relaciji 2 (razlika množic)
SQLSQL Operacijo razlike izvedemo posredno s pomočjo Operacijo razlike izvedemo posredno s pomočjo
operatorja operatorja NOT atribut IN tabela2NOT atribut IN tabela2(ni element (ni element
množice)množice) SELECT atr1,atr2,… FROM tabela1 WHERE NOT SELECT atr1,atr2,… FROM tabela1 WHERE NOT atrx IN (SELECT atrx FROM tabela2);atrx IN (SELECT atrx FROM tabela2);
Navedeni morajo biti isti atributi iz obeh tabel!Navedeni morajo biti isti atributi iz obeh tabel!
1313
Razlika - primerRazlika - primerDijak IDDijak Priimek Ime Razred Rojen
10191 ŠTUPAR Andrej G2A 15.10.1980
10205 MLINAR Mateja G2A 15.11.1985
10301 DOLENC Mitja G2A 15.12.1990
10305 VERK Maria G2C 15.12.1987
10309 ŽAVBI Jana G2B 15.10.1987
10310 JUH Polona G2C 15.10.1980
10320 DOLHAR Andrej G2A 15.10.1980
10330 AMBROŽIČ Jure G2A 15.3.1980
10432 DOLINAR Janez G2B 15.4.1980
10435 MAZI Jernej G2C 15.5.1980
10444 KOŽELJ Jure G2B 13.10.1980
10455 NOVAK Miha G2B 15.10.1980
10666 GREGORIČ Gregor G2B 15.10.1980
10777 POŽAR Anže G2C 10.4.1980
10873 LAVRIH Žiga G2C 15.1.1980
10920 ARHAR Jure G2B 15.2.1980
Obiskuje IDKrozek IDDijak
G01 10191
G01 10305
G01 10309
G01 10310
G01 10320
G01 10777
G01 10873
G02 10301
G02 10310
G02 10330
G02 10920
R01 10301
R01 10309
R01 10330
R01 10432
R01 10455
R01 10873
R02 10309
R02 10320
R02 10455
R02 10666
R02 10873
SELECT Dijak.IDDijak FROM Dijak WHERE NOT Dijak.IDDijak IN (SELECT Obiskuje.IDDijak FROM Obiskuje);
[Dijak.IDDijak] Dijak - [Obiskuje.IDDijak] Obiskuje
IDDijak
10435
10205
10444
1414
PresekPresek
Rel. algebra – presek Rel. algebra – presek relacija1 relacija1 relacija2 relacija2Značilnost: relacija1 in relacija2 morata imeti enaki shemi; Vrne Značilnost: relacija1 in relacija2 morata imeti enaki shemi; Vrne
skupne vrstice relacije1 in relacije2 brez dvojnikov (presek skupne vrstice relacije1 in relacije2 brez dvojnikov (presek množic)množic)
SQLSQL Operacijo razlike izvedemo posredno s pomočjo Operacijo razlike izvedemo posredno s pomočjo
operatorja operatorja atribut IN tabela2atribut IN tabela2 (je element (je element
množice)množice) SELECT atr1,atr2,… FROM tabela1 WHERE atrx IN SELECT atr1,atr2,… FROM tabela1 WHERE atrx IN (SELECT atrx FROM tabela2);(SELECT atrx FROM tabela2);
Navedeni morajo biti isti atributi iz obeh tabel!Navedeni morajo biti isti atributi iz obeh tabel!
1515
Presek - primerPresek - primer
SELECT g2a.ImeFROM g2aWHERE g2a.Ime IN (SELECT g2b.Ime FROM g2b);
[g2a.ime]g2a [g2b.ime]g2b
g2a Razred IDDijak Priimek Ime Rojen
g2a 10191 Štupar Andrej 15.10.1980
G2A 10205 Mlinar Mateja 15.11.1985
G2A 10301 Dolenc Mitja 15.12.1990
G2A 10320 Dolhar Andrej 15.10.1980
G2A 10330 Ambrožič Jure 15.3.1980
g2b Razred IDDijak Priimek Ime Rojen
G2B 10309 Žavbi Jana 15.10.1987
G2B 10920 Arhar Jure 15.2.1980
G2B 10432 Dolinar Janez 15.4.1980
G2B 10444 Koželj Jure 13.10.1980
G2B 10455 Novak Miha 15.10.1980
G2B 10666 Gregorič Gregor 15.10.1980
Ime
Jure
1616
Kartezični produkt Kartezični produkt Zelo ‘prijazna operacija’ ):Zelo ‘prijazna operacija’ ): Enostavna sintaksaEnostavna sintaksa Dela vedno Dela vedno (pri tej operaciji ponavadi ne naredimo nobene sintaktične napake)(pri tej operaciji ponavadi ne naredimo nobene sintaktične napake)
Poveže vse vrstice relacije1 z vsemi Poveže vse vrstice relacije1 z vsemi vrsticami relacije2vrsticami relacije2
Še zanimivejša izvedba: z enim stavkom povežite v Še zanimivejša izvedba: z enim stavkom povežite v kartezični produkt 3, 4 ali več relacijkartezični produkt 3, 4 ali več relacij
Odgovori na kartezični produkt so tabele s ‘skromnim’ Odgovori na kartezični produkt so tabele s ‘skromnim’ številom vrsticštevilom vrstic
Opomba: ne bodite presenečeni, če vam vmesna tabela za Opomba: ne bodite presenečeni, če vam vmesna tabela za odgovor zavzame ves preostali prostor na diskuodgovor zavzame ves preostali prostor na disku
1717
Kartezični produkt Kartezični produkt (nad.)(nad.)
Rel. algebra – kartezični produkt Rel. algebra – kartezični produkt relacija1 X relacija2relacija1 X relacija2 Značilnost: vrne vse možne kombinacije n-teric prve in Značilnost: vrne vse možne kombinacije n-teric prve in
druge relacije z vsemi atributidruge relacije z vsemi atributi
SQLSQL Kartezični produkt implementiramo tako, da pod FROM Kartezični produkt implementiramo tako, da pod FROM
navedemo vse tabelenavedemo vse tabele SELECT * FROM tabela1, tabela2, …;SELECT * FROM tabela1, tabela2, …;
1818
Kartezični produkt - primerKartezični produkt - primer
SELECT * FROM Dijak,Krozek;
Dijak Krozek
Dijak IDDijak Priimek Ime Razred Rojen
10191 ŠTUPAR Andrej G2A 15.10.1980
10205 MLINAR Mateja G2A 15.11.1985
10301 DOLENC Mitja G2A 15.12.1990
10305 VERK Maria G2C 15.12.1987
10309 ŽAVBI Jana G2B 15.10.1987
10310 JUH Polona G2C 15.10.1980
10320 DOLHAR Andrej G2A 15.10.1980
10330 AMBROŽIČ Jure G2A 15.3.1980
10432 DOLINAR Janez G2B 15.4.1980
10435 MAZI Jernej G2C 15.5.1980
10444 KOŽELJ Jure G2B 13.10.1980
10455 NOVAK Miha G2B 15.10.1980
10666 GREGORIČ Gregor G2B 15.10.1980
10777 POŽAR Anže G2C 10.4.1980
10873 LAVRIH Žiga G2C 15.1.1980
10920 ARHAR Jure G2B 15.2.1980
Krozek
IDKrozek ImeKrozka Opis
G01 Zbor Zborno petje
G02 Orkester Orkester harmonikarjev
L01 Šah Šahovski krožek
R01 Java Programiranje v Javi
R02 PHP Programiranje v PHP
krajši izsek rezultata poizvedbe si lahko ogledate na naslednji prosojnici ):
1919
IDDijak Priimek Ime Razred Rojen IDKrozek ImeKrozka Opis
10191 ŠTUPAR Andrej G2A 15.10.1980 R01 Java Programiranje v Javi
10191 ŠTUPAR Andrej G2A 15.10.1980 G01 Zbor Zborno petje
10191 ŠTUPAR Andrej G2A 15.10.1980 R02 PHP Programiranje v PHP
10191 ŠTUPAR Andrej G2A 15.10.1980 L01 Šah Šahovski krožek
10191 ŠTUPAR Andrej G2A 15.10.1980 G02 Orkester Orkester harmonikarjev
10435 MAZI Jernej G2C 15.5.1980 R01 Java Programiranje v Javi
10435 MAZI Jernej G2C 15.5.1980 G01 Zbor Zborno petje
10435 MAZI Jernej G2C 15.5.1980 R02 PHP Programiranje v PHP
10435 MAZI Jernej G2C 15.5.1980 L01 Šah Šahovski krožek
10435 MAZI Jernej G2C 15.5.1980 G02 Orkester Orkester harmonikarjev
10205 MLINAR Mateja G2A 15.11.1985 R01 Java Programiranje v Javi
10205 MLINAR Mateja G2A 15.11.1985 G01 Zbor Zborno petje
10205 MLINAR Mateja G2A 15.11.1985 R02 PHP Programiranje v PHP
10205 MLINAR Mateja G2A 15.11.1985 L01 Šah Šahovski krožek
10205 MLINAR Mateja G2A 15.11.1985 G02 Orkester Orkester harmonikarjev
10305 VERK Maria G2C 15.12.1987 R01 Java Programiranje v Javi
10305 VERK Maria G2C 15.12.1987 G01 Zbor Zborno petje
10305 VERK Maria G2C 15.12.1987 R02 PHP Programiranje v PHP
10305 VERK Maria G2C 15.12.1987 L01 Šah Šahovski krožek
10305 VERK Maria G2C 15.12.1987 G02 Orkester Orkester harmonikarjev
10309 ŽAVBI Jana G2B 15.10.1987 R01 Java Programiranje v Javi
10309 ŽAVBI Jana G2B 15.10.1987 G01 Zbor Zborno petje
10309 ŽAVBI Jana G2B 15.10.1987 R02 PHP Programiranje v PHP
10309 ŽAVBI Jana G2B 15.10.1987 L01 Šah Šahovski krožek
10309 ŽAVBI Jana G2B 15.10.1987 G02 Orkester Orkester harmonikarjev
10310 JUH Polona G2C 15.10.1980 R01 Java Programiranje v Javi
10310 JUH Polona G2C 15.10.1980 G01 Zbor Zborno petje
10310 JUH Polona G2C 15.10.1980 R02 PHP Programiranje v PHP
10310 JUH Polona G2C 15.10.1980 L01 Šah Šahovski krožek
10310 JUH Polona G2C 15.10.1980 G02 Orkester Orkester harmonikarjev
10920 ARHAR Jure G2B 15.2.1980 R01 Java Programiranje v Javi
10920 ARHAR Jure G2B 15.2.1980 G01 Zbor Zborno petje
10920 ARHAR Jure G2B 15.2.1980 R02 PHP Programiranje v PHP
10920 ARHAR Jure G2B 15.2.1980 L01 Šah Šahovski krožek
10920 ARHAR Jure G2B 15.2.1980 G02 Orkester Orkester harmonikarjev
10301 DOLENC Mitja G2A 15.12.1990 R01 Java Programiranje v Javi
10301 DOLENC Mitja G2A 15.12.1990 G01 Zbor Zborno petje
10301 DOLENC Mitja G2A 15.12.1990 R02 PHP Programiranje v PHP
10301 DOLENC Mitja G2A 15.12.1990 L01 Šah Šahovski krožek
10301 DOLENC Mitja G2A 15.12.1990 G02 Orkester Orkester harmonikarjev
10320 DOLHAR Andrej G2A 15.10.1980 R01 Java Programiranje v Javi
10320 DOLHAR Andrej G2A 15.10.1980 G01 Zbor Zborno petje
10320 DOLHAR Andrej G2A 15.10.1980 R02 PHP Programiranje v PHP
10320 DOLHAR Andrej G2A 15.10.1980 L01 Šah Šahovski krožek
10320 DOLHAR Andrej G2A 15.10.1980 G02 Orkester Orkester harmonikarjev
10330 AMBROŽIČ Jure G2A 15.3.1980 R01 Java Programiranje v Javi
10330 AMBROŽIČ Jure G2A 15.3.1980 G01 Zbor Zborno petje
10330 AMBROŽIČ Jure G2A 15.3.1980 R02 PHP Programiranje v PHP
10330 AMBROŽIČ Jure G2A 15.3.1980 L01 Šah Šahovski krožek
10330 AMBROŽIČ Jure G2A 15.3.1980 G02 Orkester Orkester harmonikarjev
10432 DOLINAR Janez G2B 15.4.1980 R01 Java Programiranje v Javi
10432 DOLINAR Janez G2B 15.4.1980 G01 Zbor Zborno petje
10432 DOLINAR Janez G2B 15.4.1980 R02 PHP Programiranje v PHP
10432 DOLINAR Janez G2B 15.4.1980 L01 Šah Šahovski krožek
10432 DOLINAR Janez G2B 15.4.1980 G02 Orkester Orkester harmonikarjev
10444 KOŽELJ Jure G2B 13.10.1980 R01 Java Programiranje v Javi
10444 KOŽELJ Jure G2B 13.10.1980 G01 Zbor Zborno petje
10444 KOŽELJ Jure G2B 13.10.1980 R02 PHP Programiranje v PHP
10444 KOŽELJ Jure G2B 13.10.1980 L01 Šah Šahovski krožek
10444 KOŽELJ Jure G2B 13.10.1980 G02 Orkester Orkester harmonikarjev
10455 NOVAK Miha G2B 15.10.1980 R01 Java Programiranje v Javi
10455 NOVAK Miha G2B 15.10.1980 G01 Zbor Zborno petje
10455 NOVAK Miha G2B 15.10.1980 R02 PHP Programiranje v PHP
10455 NOVAK Miha G2B 15.10.1980 L01 Šah Šahovski krožek
10455 NOVAK Miha G2B 15.10.1980 G02 Orkester Orkester harmonikarjev
10666 GREGORIČ Gregor G2B 15.10.1980 R01 Java Programiranje v Javi
10666 GREGORIČ Gregor G2B 15.10.1980 G01 Zbor Zborno petje
10666 GREGORIČ Gregor G2B 15.10.1980 R02 PHP Programiranje v PHP
10666 GREGORIČ Gregor G2B 15.10.1980 L01 Šah Šahovski krožek
10666 GREGORIČ Gregor G2B 15.10.1980 G02 Orkester Orkester harmonikarjev
10777 POŽAR Anže G2C 10.4.1980 R01 Java Programiranje v Javi
10777 POŽAR Anže G2C 10.4.1980 G01 Zbor Zborno petje
10777 POŽAR Anže G2C 10.4.1980 R02 PHP Programiranje v PHP
10777 POŽAR Anže G2C 10.4.1980 L01 Šah Šahovski krožek
10777 POŽAR Anže G2C 10.4.1980 G02 Orkester Orkester harmonikarjev
10873 LAVRIH Žiga G2C 15.1.1980 R01 Java Programiranje v Javi
10873 LAVRIH Žiga G2C 15.1.1980 G01 Zbor Zborno petje
10873 LAVRIH Žiga G2C 15.1.1980 R02 PHP Programiranje v PHP
10873 LAVRIH Žiga G2C 15.1.1980 L01 Šah Šahovski krožek
10873 LAVRIH Žiga G2C 15.1.1980 G02 Orkester Orkester harmonikarjev
2020
Theta stikTheta stik
Rel. algebra – theta stikRel. algebra – theta stik relacija1 |X| relacija2relacija1 |X| relacija2
[pogoj][pogoj] Značilnost: vrne vse možne kombinacije n-teric z vsemi Značilnost: vrne vse možne kombinacije n-teric z vsemi
atributi prve in druge relacije, ki ustrezajo pogojuatributi prve in druge relacije, ki ustrezajo pogoju
SQLSQL Theta stik implementiramo tako, da pod FROM navedemo Theta stik implementiramo tako, da pod FROM navedemo
vse tabele, pod WHERE pa pogoj(e)vse tabele, pod WHERE pa pogoj(e)SELECT [*|tabela1.atr1,…] FROM tabela1, tabela2, …SELECT [*|tabela1.atr1,…] FROM tabela1, tabela2, …
WHERE pogoj;WHERE pogoj;
2121
Theta stik - primerTheta stik - primerDijak IDDijak Priimek Ime Razred Rojen
10191 ŠTUPAR Andrej G2A 15.10.1980
10205 MLINAR Mateja G2A 15.11.1985
10301 DOLENC Mitja G2A 15.12.1990
10305 VERK Maria G2C 15.12.1987
10309 ŽAVBI Jana G2B 15.10.1987
10310 JUH Polona G2C 15.10.1980
10320 DOLHAR Andrej G2A 15.10.1980
10330 AMBROŽIČ Jure G2A 15.3.1980
10432 DOLINAR Janez G2B 15.4.1980
10435 MAZI Jernej G2C 15.5.1980
10444 KOŽELJ Jure G2B 13.10.1980
10455 NOVAK Miha G2B 15.10.1980
10666 GREGORIČ Gregor G2B 15.10.1980
10777 POŽAR Anže G2C 10.4.1980
10873 LAVRIH Žiga G2C 15.1.1980
10920 ARHAR Jure G2B 15.2.1980
Obiskuje IDKrozek IDDijak
G01 10191
G01 10305
G01 10309
G01 10310
G01 10320
G01 10777
G01 10873
G02 10301
G02 10310
G02 10330
G02 10920
R01 10301
R01 10309
R01 10330
R01 10432
R01 10455
R01 10873
R02 10309
R02 10320
R02 10455
R02 10666
R02 10873
SELECT * FROM Dijak,Obiskuje WHERE Dijak.IDDijak=Obiskuje.IDDijak; Dijak || Obiskuje[Dijak.IDdijak=Obiskuje.IDDijak]
IDDijak Priimek Ime Razred Rojen IDKrozek
10191 ŠTUPAR Andrej G2A 15.10.1980 G01
10301 DOLENC Mitja G2A 15.12.1990 G02
10301 DOLENC Mitja G2A 15.12.1990 R01
10305 VERK Maria G2C 15.12.1987 G01
10309 ŽAVBI Jana G2B 15.10.1987 G01
10309 ŽAVBI Jana G2B 15.10.1987 R01
10309 ŽAVBI Jana G2B 15.10.1987 R02
10310 JUH Polona G2C 15.10.1980 G01
10310 JUH Polona G2C 15.10.1980 G02
10320 DOLHAR Andrej G2A 15.10.1980 G01
10320 DOLHAR Andrej G2A 15.10.1980 R02
10330 AMBROŽIČ Jure G2A 15.3.1980 G02
10330 AMBROŽIČ Jure G2A 15.3.1980 R01
10432 DOLINAR Janez G2B 15.4.1980 R01
10455 NOVAK Miha G2B 15.10.1980 R01
10455 NOVAK Miha G2B 15.10.1980 R02
10666 GREGORIČ Gregor G2B 15.10.1980 R02
10777 POŽAR Anže G2C 10.4.1980 G01
10873 LAVRIH Žiga G2C 15.1.1980 G01
10873 LAVRIH Žiga G2C 15.1.1980 R01
10873 LAVRIH Žiga G2C 15.1.1980 R02
10920 ARHAR Jure G2B 15.2.1980 G02
2222
Naravni stikNaravni stik
Rel. algebra – naravni stikRel. algebra – naravni stik relacija1 |X| relacija2relacija1 |X| relacija2 Značilnost: relacija1 in relacija 2 morata imeti 1 ali več skupnih Značilnost: relacija1 in relacija 2 morata imeti 1 ali več skupnih
atributovatributov vrne vse možne kombinacije n-teric prve in druge relacije, pri katerih vrne vse možne kombinacije n-teric prve in druge relacije, pri katerih
sta vrednosti skupnih atributov enaki; vrne vse atribute obeh relacijsta vrednosti skupnih atributov enaki; vrne vse atribute obeh relacij
SQLSQL Naravni stik implementiramo z opertorjem INNER JOIN tako, da pod Naravni stik implementiramo z opertorjem INNER JOIN tako, da pod
FROM navedemo ime prve tabele pod INNER JOIN pa ime druge FROM navedemo ime prve tabele pod INNER JOIN pa ime druge tabele in pogoj za povezovanjetabele in pogoj za povezovanjeSELECT * FROM tabela1 INNER JOIN tabela2 ON (tabela1.atributx = SELECT * FROM tabela1 INNER JOIN tabela2 ON (tabela1.atributx =
tabela2.atributx);tabela2.atributx);
2323
Naravni stik - primerNaravni stik - primer
Dijak
IDDijak Priimek Ime Razred Rojen
10191 ŠTUPAR Andrej G2A 15.10.1980
10205 MLINAR Mateja G2A 15.11.1985
10301 DOLENC Mitja G2A 15.12.1990
10305 VERK Maria G2C 15.12.1987
10309 ŽAVBI Jana G2B 15.10.1987
10310 JUH Polona G2C 15.10.1980
10320 DOLHAR Andrej G2A 15.10.1980
10330 AMBROŽIČ Jure G2A 15.3.1980
10432 DOLINAR Janez G2B 15.4.1980
10435 MAZI Jernej G2C 15.5.1980
10444 KOŽELJ Jure G2B 13.10.1980
10455 NOVAK Miha G2B 15.10.1980
10666 GREGORIČ Gregor G2B 15.10.1980
10777 POŽAR Anže G2C 10.4.1980
10873 LAVRIH Žiga G2C 15.1.1980
10920 ARHAR Jure G2B 15.2.1980
Obiskuje IDKrozek IDDijak
G01 10191
G01 10305
G01 10309
G01 10310
G01 10320
G01 10777
G01 10873
G02 10301
G02 10310
G02 10330
G02 10920
R01 10301
R01 10309
R01 10330
R01 10432
R01 10455
R01 10873
R02 10309
R02 10320
R02 10455
R02 10666
R02 10873
SELECT Dijak.Priimek, Dijak.Ime, Obiskuje.IDKrozekSELECT Dijak.Priimek, Dijak.Ime, Obiskuje.IDKrozekFROM Dijak INNER JOIN Obiskuje ON Dijak.IDDijak = FROM Dijak INNER JOIN Obiskuje ON Dijak.IDDijak = Obiskuje.IDDijak;Obiskuje.IDDijak; [Dijak.Priimek, Dijak.Ime, Obiskuje.IDKrozek] [Dijak.Priimek, Dijak.Ime, Obiskuje.IDKrozek] (dijak |x| obiskuje)(dijak |x| obiskuje)
Priimek Ime IDKrozek
ŠTUPAR Andrej G01
DOLENC Mitja R01
DOLENC Mitja G02
VERK Maria G01
ŽAVBI Jana R01
ŽAVBI Jana R02
ŽAVBI Jana G01
ŽAVBI Jana G02
ŽAVBI Jana L01
JUH Polona G01
JUH Polona G02
DOLHAR Andrej R02
DOLHAR Andrej G01
AMBROŽIČ Jure R01
AMBROŽIČ Jure G02
DOLINAR Janez R01
NOVAK Miha R02
NOVAK Miha R01
GREGORIČ Gregor R02
POŽAR Anže G01
LAVRIH Žiga R02
LAVRIH Žiga R01
LAVRIH Žiga G01
ARHAR Jure G02
2424
KoličnikKoličnik
Rel. algebra – količnikRel. algebra – količnik relacija1 / relacija2relacija1 / relacija2 Značilnost: relacija1 mora imeti vse atribute relacije2 in Značilnost: relacija1 mora imeti vse atribute relacije2 in
zraven še lastne (vsaj enega); vrne le atribute, ki so v relaciji 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 1 in niso v relaciji 2 in sicer le tiste n-terice relacije 1, za katere obstajajo vse kombinacije vrednosti z n-tericama v katere obstajajo vse kombinacije vrednosti z n-tericama v imenovalcu (relaciji 2)imenovalcu (relaciji 2)
SQLSQL Količnik v SQL stavku implementiramo posredno, s Količnik v SQL stavku implementiramo posredno, s
povezovanjem tabel in uporabo vgrajene agregirane funkcije povezovanjem tabel in uporabo vgrajene agregirane funkcije COUNTCOUNTSELECT * FROM tabela1 INNER JOIN tabela2 ON SELECT * FROM tabela1 INNER JOIN tabela2 ON
(tabela1.atributx = tabela2.atributx);(tabela1.atributx = tabela2.atributx);
2525
Količnik primerKoličnik primerIzpišite imena dijakov, ki obiskujejo vse krožke!Izpišite imena dijakov, ki obiskujejo vse krožke!
Rel. algebra – postopek Rel. algebra – postopek 1.1. Kako dobim seznam vseh krožkov? Kako dobim seznam vseh krožkov? [Krozek.IDKrozek] Krozek[Krozek.IDKrozek] Krozek
2.2. Kako dobim seznam kdo obiskuje katere krožke? relacija obiskujeKako dobim seznam kdo obiskuje katere krožke? relacija obiskuje
3.3. Kako vem kateri IDDijak obiskuje vse krožke – uporabim količnik? obiskuje / Kako vem kateri IDDijak obiskuje vse krožke – uporabim količnik? obiskuje / [Krozek.IDKrozek] Krozek[Krozek.IDKrozek] Krozek
4.4. Ostal je le atribut IDDijak, kako pridem do priimkov in imen teh dijakov? Ostal je le atribut IDDijak, kako pridem do priimkov in imen teh dijakov? naredim naravni stiknaredim naravni stik
5.5. Naredim projekcijo zahtevanih atributov (imena in priimka)Naredim projekcijo zahtevanih atributov (imena in priimka)
- Končna rešitev:Končna rešitev: [Dijak.ime,Dijak.priimek]((Obiskuje/[Dijak.ime,Dijak.priimek]((Obiskuje/[Krozek.IDKrozek] Krozek) |x| Dijak))[Krozek.IDKrozek] Krozek) |x| Dijak))
Dijak
1.2.
3.
4.
5.
2626
Količnik – primer v SQL-uKoličnik – primer v SQL-u SQL – postopek SQL – postopek
1.1. Preštej koliko je vseh krožkov? Preštej koliko je vseh krožkov? SELECT COUNT(Krozek.IDKrozek) FROM KrozekSELECT COUNT(Krozek.IDKrozek) FROM Krozek;;
2.2. Preštej koliko krožkov obiskuje posamezni dijak?Preštej koliko krožkov obiskuje posamezni dijak?SELECT Dijak.Ime, Dijak.Priimek, Count(Obiskuje.IDKrozek)SELECT Dijak.Ime, Dijak.Priimek, Count(Obiskuje.IDKrozek)FROM Dijak, ObiskujeFROM Dijak, ObiskujeWHERE (((Dijak.IDDijak)=[Obiskuje].[IDdijak]))WHERE (((Dijak.IDDijak)=[Obiskuje].[IDdijak]))GROUP BY Dijak.Ime, Dijak.Priimek, Dijak.IDDijak;GROUP BY Dijak.Ime, Dijak.Priimek, Dijak.IDDijak;
3.3. Izenači dobljena rezultata s pogojem HAVINGIzenači dobljena rezultata s pogojem HAVING
- Končna rešitev:Končna rešitev:SELECT Dijak.Ime, Dijak.PriimekSELECT Dijak.Ime, Dijak.PriimekFROM Dijak, ObiskujeFROM Dijak, ObiskujeWHERE (((Dijak.IDDijak)=[Obiskuje].[IDdijak]))WHERE (((Dijak.IDDijak)=[Obiskuje].[IDdijak]))GROUP BY Dijak.Ime, Dijak.Priimek, Dijak.IDDijakGROUP BY Dijak.Ime, Dijak.Priimek, Dijak.IDDijakHAVING (((Count(Obiskuje.IDKrozek))=HAVING (((Count(Obiskuje.IDKrozek))= (SELECT COUNT(Krozek.IDKrozek) FROM Krozek)));(SELECT COUNT(Krozek.IDKrozek) FROM Krozek)));
2727
N & N – kdaj uporabiti katero operacijo?N & N – kdaj uporabiti katero operacijo?
Izpišite …, ki ustrezajo Izpišite …, ki ustrezajo pogoju pogoju (podatki so v eni tabeli)(podatki so v eni tabeli)
Izpišite …, ki ustrezajo Izpišite …, ki ustrezajo pogoju pogoju (podatki so v različnih tabelah)(podatki so v različnih tabelah)
Izpišite …, ki ustrezajo Izpišite …, ki ustrezajo pogoju1 in ustrezajo pogoju pogoju1 in ustrezajo pogoju 2 2 (pogoja se nanašata na isto zadevo)(pogoja se nanašata na isto zadevo)
Izpišite …, ki ustrezajo Izpišite …, ki ustrezajo samo pogoju1 samo pogoju1 (obstaja možnost, da (obstaja možnost, da nekdo ustreza še kakšnem pogoju iste nekdo ustreza še kakšnem pogoju iste kategorije kot je pogoj 1)kategorije kot je pogoj 1)
Izpišite …, ki ne ustrezajo Izpišite …, ki ne ustrezajo pogoju1 pogoju1 (obstaja možnost, da nekdo (obstaja možnost, da nekdo ustreza še kakšnem pogoju iste kategorije kot ustreza še kakšnem pogoju iste kategorije kot je pogoj 1)je pogoj 1)
Izpišite …, ki ustrezajo Izpišite …, ki ustrezajo vsem pogojem vsem pogojem (pogoji se nanašajo (pogoji se nanašajo na zalogo vrednosti neke celotne tabele)na zalogo vrednosti neke celotne tabele)
Selekcija in projekcijaSelekcija in projekcija
Naravni ali theta stik, selekcija, Naravni ali theta stik, selekcija, projekcijaprojekcija
Selekcija, projekcija za pogoj1 Selekcija, projekcija za pogoj1 PRESEK selekcija, projekcija za PRESEK selekcija, projekcija za pogoj2pogoj2
Selekcija, projekcija za pogoj1 Selekcija, projekcija za pogoj1 RAZLIKA selekcija, projekcija za RAZLIKA selekcija, projekcija za negiran pogoj 1negiran pogoj 1
Projekcija vseh RAZLIKA selekcija, Projekcija vseh RAZLIKA selekcija, projekcija tistih, ki ustrezajo projekcija tistih, ki ustrezajo pogoju 1pogoju 1
Projekcija želenih atributov Projekcija želenih atributov tabele 1 KOLIČNIK projekcija tabele 1 KOLIČNIK projekcija atributa pogoja iz tabele 2atributa pogoja iz tabele 2
2828
NalogeNaloge & namigi& namigi
(SQL stavek in izraz relacijske algebre) (SQL stavek in izraz relacijske algebre)
1. Izpiši abecedni seznam imen krožkov. // projekcija
2. Izpiši priimke in imena dijakov razreda G2A. // projekcija, selekcija
3. Izpiši imena krožkov, ki jih obiskuje dijak z IDDijak 12. //projekcija, selekcija, naravni/theta stik
4. Izpiši imena krožkov, ki jih obiskuje Miha Novak. // projekcija, selekcija, naravni/theta stik
5. Izpiši imena krožkov, ki jih obiskujejo le dijaki razreda G2A. // projekcija, selekcija, naravni/theta stik, razlika
6. Izpiši imena krožkov, ki jih ne obiskuje Miha Novak. // projekcija, selekcija, naravni/theta stik, razlika
7. Izpiši imena krožkov, ki jih obiskuje samo Miha Novak. // projekcija, selekcija, naravni/theta stik, razlika
8. 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
9. Izpiši priimke in imena dijakov, ki obiskujejo krožek Šah in Video (oba krožka). // projekcija, selekcija, naravni/theta stik, presek
10.Izpiši priimke in imena dijakov, ki ne obiskujejo nobenega krožka razen PHP. // projekcija, selekcija, naravni/theta stik, razlika
11.Izpiši imena krožkov, ki jih obiskujejo vsi dijaki. // projekcija, selekcija, naravni/theta stik, količnik
12.Izpiši imena krožkov, ki se ne izvajajo (nihče jih ne obiskuje). // projekcija, razlika
top related