28
Relacijska algebra in Relacijska algebra in SQL DML SQL DML (D (D ata ata M M anipulation anipulation L L anguage) anguage)

Relacijska algebra in SQL DML (D ata M anipulation L anguage)

  • Upload
    tejana

  • View
    79

  • Download
    0

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

Page 1: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

Relacijska algebra inRelacijska algebra inSQL DMLSQL DML

(D(Data ata MManipulation anipulation LLanguage)anguage)

Page 2: Relacijska algebra in SQL DML (D ata  M anipulation  L 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

Page 3: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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

Page 4: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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

Page 5: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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;

Page 6: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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

Page 7: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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

Page 8: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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

Page 9: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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

Page 10: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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!

Page 11: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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

Page 12: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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!

Page 13: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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

Page 14: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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!

Page 15: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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

Page 16: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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

Page 17: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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, …;

Page 18: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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 ):

Page 19: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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

Page 20: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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;

Page 21: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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

Page 22: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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);

Page 23: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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

Page 24: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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);

Page 25: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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.

Page 26: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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)));

Page 27: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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

Page 28: Relacijska algebra in SQL DML (D ata  M anipulation  L anguage)

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