g2b - Vegova

Download Report

Transcript g2b - Vegova

Relacijska algebra in
SQL DML
(Data Manipulation Language)
Manipulacija s podatki
Teoretična osnova: relacijska algebra in
relacijski račun
 Implementacija: SQL DML (Data
Manipulation Language)
 Osnovne operacije:

– Branje
– Dodajanje
– Spreminjanje
– Brisanje
2
Ukazi relac. algebre
Projekcija
Selekcija
Unija
Razlika
Kartezični produkt
======
 Presek
 Theta stik
 Naravni stik
 Količnik





SQL DML stavki
SELECT
INSERT
DELETE
UPDATE
======
SQL agregirane funkcije
Funkcije za delo z
datumi
 Funkcije za delo z nizi







3
Osnovno branje podatkov

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)
4
Osnovno branje podatkov primer
IDDijak
Priimek
Ime
Razred
Rojen
10191
ŠTUPAR
Andrej
G2A
15.10.1980
MLINAR
Mateja G2A
[Dijak.Ime]Dijak
DOLENC
Mitja G2A
Odgovor:
VERK
Maria G2C
15.11.1985
10205
10301
10305
10309
10310
10320
10330
10432
10435
10444
10455
10666
ŽAVBI
JUH
DOLHAR
AMBROŽIČ
DOLINAR
MAZI
KOŽELJ
NOVAK
GREGORIČ
Jana
Polona
Andrej
Jure
Janez
Jernej
Jure
Miha
Gregor
G2B
G2C
G2A
G2A
G2B
G2C
G2B
G2B
G2B
Ime
SELECT DISTINCT Dijak.Ime FROM Dijak;
[Dijak.Ime]Dijak
Andrej
Mateja
15.12.1990
Mitja
15.12.1987
Maria
Jana
15.10.1987
Ime
15.10.1980
15.10.1980
15.3.1980
15.4.1980
15.5.1980
13.10.1980
15.10.1980
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
Polona
Andrej
SELECT Dijak.Ime FROM Dijak;
Mateja
Mitja
Maria
Jana
Polona
Andrej
Janez
Jernej
Miha
Gregor
Anže
Žiga
Jure
Jure
Janez
Jernej
Jure
Miha
Gregor
Anže
Žiga
Jure
5
Osnovno branje podatkov primer (nad.)
IDDijak
Priimek
Ime
Razred
Rojen
10191
ŠTUPAR
Andrej
G2A
15.10.1980
[Dijak.Ime]Dijak
DOLENC
Mitja G2A
Odgovor:
VERK
Maria G2C
15.11.1985
10205
10301
10305
MLINAR
10309
ŽAVBI
10310
Mateja
G2A
SELECT Dijak.Priimek, Dijak.Ime FROM
Dijak ORDER BY Dijak.Priimek;
15.12.1990
15.12.1987
Priimek
Ime
Jana
G2B
15.10.1987
AMBROŽIČ
Jure
JUH
Polona
G2C
15.10.1980
ARHAR
Jure
10320
DOLHAR
Andrej
G2A
15.10.1980
DOLENC
Mitja
10330
AMBROŽIČ
Jure
G2A
15.3.1980
DOLHAR
Andrej
10432
DOLINAR
Janez
G2B
15.4.1980
DOLINAR
Janez
10435
MAZI
Jernej
G2C
15.5.1980
GREGORIČ
Gregor
10444
KOŽELJ
Jure
G2B
13.10.1980
JUH
Polona
10455
NOVAK
Miha
G2B
15.10.1980
KOŽELJ
Jure
10666
GREGORIČ
Gregor
G2B
15.10.1980
LAVRIH
Žiga
10777
POŽAR
Anže
G2C
10.4.1980
MAZI
Jernej
10873
LAVRIH
Žiga
G2C
15.1.1980
MLINAR
Mateja
10920
ARHAR
Jure
G2B
15.2.1980
NOVAK
Miha
POŽAR
Anže
ŠTUPAR
Andrej
VERK
Maria
ŽAVBI
Jana
6
Osnovno branje podatkov s pogoji

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)
7
Osnovno branje podatkov s pogoji - primer
IDDijak
Priimek
Ime
Razred
Rojen
10191
ŠTUPAR
Andrej
G2A
15.10.1980
[Dijak.Ime]Dijak
DOLENC
Mitja G2A
Odgovor:
VERK
Maria G2C
15.11.1985
10205
10301
10305
MLINAR
10309
ŽAVBI
10310
Mateja
G2A
15.12.1990
SELECT DISTINCT Dijak.Ime
FROM Dijak
WHERE Dijak.Ime LIKE “J%”;
15.12.1987
Jana
G2B
15.10.1987
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
[Dijak.Ime] [(Dijak.ime>=‘J’) AND
(Dijak.Ime<‘K’)]Dijak
Ime
Jana
Janez
Jernej
Jure
8
Osnovno branje podatkov s pogoji – primeri (nad.)
Ime
IDDijak
Priimek
Ime
Razred
Rojen
10191
ŠTUPAR
Andrej
G2A
15.10.1980
MLINAR
Mateja G2A
[Dijak.Ime]Dijak
DOLENC
Mitja G2A
Odgovor:
VERK
Maria G2C
15.11.1985
10205
10301
10305
10309
ŽAVBI
10310
15.12.1990
15.12.1987
SELECT DISTINCT Dijak.Ime
FROM Dijak
WHERE Dijak.Razred in (“G2A”,”G2B”);
Andrej
Gregor
Jana
[Dijak.Ime] [(Dijak.Razred=‘G2A’) OR
(Dijak.Razred=‘G2B’)]Dijak
Janez
Jure
Jana
G2B
15.10.1987
Mateja
JUH
Polona
G2C
15.10.1980
Miha
10320
DOLHAR
Andrej
G2A
15.10.1980
Mitja
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
SELECT DISTINCT Dijak.Ime, Dijak.Rojen
FROM Dijak
WHERE (((Dijak.Rojen) Between #1.10.1980#
And #31.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
[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
9
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!
10
Unija - primer
g2a
g2b
Razred
IDDijak
Priimek
Ime
Rojen
Razred
IDDijak
Priimek
Ime
Rojen
g2a
10191
Štupar
Andrej
15.10.1980
G2B
10309
Žavbi
Jana
15.10.1987
G2A
10205
Mlinar
Mateja
15.11.1985
G2B
10920
Arhar
Jure
15.2.1980
G2A
10301
Dolenc
Mitja
15.12.1990
G2B
10432
Dolinar
Janez
15.4.1980
G2A
10320
Dolhar
Andrej
15.10.1980
G2B
10444
Koželj
Jure
13.10.1980
G2A
10330
Ambrožič
Jure
15.3.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
11
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!
12
Dijak
Razlika - primer
Obiskuje
IDKrozek
IDDijak
IDDijak
Priimek
Ime
Razred
Rojen
G01
10191
10191
ŠTUPAR
Andrej
G2A
15.10.1980
G01
10305
10205
MLINAR
Mateja
G2A
15.11.1985
G01
10309
10301
DOLENC
Mitja
G2A
15.12.1990
G01
10310
10305
VERK
Maria
G2C
15.12.1987
G01
10320
10309
ŽAVBI
Jana
G2B
15.10.1987
G01
10777
10310
JUH
Polona
G2C
15.10.1980
G01
10873
10320
DOLHAR
Andrej
G2A
15.10.1980
G02
10301
10330
AMBROŽIČ
Jure
G2A
15.3.1980
G02
10310
10432
DOLINAR
Janez
G2B
15.4.1980
G02
10330
10435
MAZI
Jernej
G2C
15.5.1980
G02
10920
10444
KOŽELJ
Jure
G2B
13.10.1980
R01
10301
10455
NOVAK
Miha
G2B
15.10.1980
R01
10309
10666
GREGORIČ
Gregor
G2B
15.10.1980
R01
10330
10777
POŽAR
Anže
G2C
10.4.1980
R01
10432
10873
LAVRIH
Žiga
G2C
15.1.1980
R01
10455
10920
ARHAR
Jure
G2B
15.2.1980
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
13
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!
14
Presek - primer
g2b
g2a
Razred
IDDijak
Priimek
Ime
Rojen
Razred
IDDijak
Priimek
Ime
Rojen
g2a
10191
Štupar
Andrej
15.10.1980
G2B
10309
Žavbi
Jana
15.10.1987
G2A
10205
Mlinar
Mateja
15.11.1985
G2B
10920
Arhar
Jure
15.2.1980
G2A
10301
Dolenc
Mitja
15.12.1990
G2B
10432
Dolinar
Janez
15.4.1980
G2A
10320
Dolhar
Andrej
15.10.1980
G2B
10444
Koželj
Jure
13.10.1980
G2A
10330
Ambrožič
Jure
15.3.1980
G2B
10455
Novak
Miha
15.10.1980
G2B
10666
Gregorič
Gregor
15.10.1980
SELECT g2a.Ime
FROM g2a
WHERE g2a.Ime IN (SELECT g2b.Ime FROM g2b);
Ime
[g2a.ime]g2a  [g2b.ime]g2b
Jure
15
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
16
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, …;
17
Kartezični produkt - 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
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
SELECT * FROM Dijak,Krozek;
Dijak  Krozek
krajši izsek rezultata poizvedbe si lahko
ogledate na naslednji prosojnici ):
18
IDDijak
Priimek
Ime
Razred
10191
ŠTUPAR
Andrej
G2A
10191
ŠTUPAR
Andrej
10191
ŠTUPAR
10191
Rojen
IDKrozek
ImeKrozka
Opis
15.10.1980
R01
Java
Programiranje v Javi
G2A
15.10.1980
G01
Zbor
Zborno petje
Andrej
G2A
15.10.1980
R02
PHP
Programiranje v PHP
Š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
19
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;
20
Obiskuje
Dijak
IDKrozek
IDDijak
IDDijak
Priimek
Ime
Razred
Rojen
G01
10191
10191
ŠTUPAR
Andrej
G2A
15.10.1980
G01
10305
10205
MLINAR
Mateja
G2A
15.11.1985
G01
10309
10301
DOLENC
Mitja
G2A
15.12.1990
G01
10310
10305
VERK
Maria
G2C
15.12.1987
G01
10320
10309
ŽAVBI
Jana
G2B
15.10.1987
G01
10777
10310
JUH
Polona
G2C
15.10.1980
G01
10873
10320
DOLHAR
Andrej
G2A
15.10.1980
G02
10301
10330
AMBROŽIČ
Jure
G2A
15.3.1980
G02
10310
10432
DOLINAR
Janez
G2B
15.4.1980
G02
10330
10435
MAZI
Jernej
G2C
15.5.1980
G02
10920
10444
KOŽELJ
Jure
G2B
13.10.1980
R01
10455
NOVAK
Miha
G2B
15.10.1980
R01
10666
GREGORIČ
Gregor
G2B
15.10.1980
R01
10777
POŽAR
Anže
G2C
10.4.1980
R01
10873
LAVRIH
Žiga
G2C
15.1.1980
R01
10920
ARHAR
Jure
G2B
15.2.1980
R01
10301
IDDijak
10309
10191
10330
10301
10432
10301
10455
10305
10873
10309
10309
10309
10320
10309
10455
10310
10666
10310
10873
10320
R02
R02
R02
R02
R02
Theta stik - primer
SELECT *
FROM Dijak,Obiskuje
WHERE
Dijak.IDDijak=Obiskuje.IDDijak;
Dijak || Obiskuje
[Dijak.IDdijak=Obiskuje.IDDijak]
Priimek
Ime
Razred
Rojen
IDKrozek
ŠTUPAR
Andrej
G2A
15.10.1980
G01
DOLENC
Mitja
G2A
15.12.1990
G02
DOLENC
Mitja
G2A
15.12.1990
R01
VERK
Maria
G2C
15.12.1987
G01
ŽAVBI
Jana
G2B
15.10.1987
G01
ŽAVBI
Jana
G2B
15.10.1987
R01
ŽAVBI
Jana
G2B
15.10.1987
R02
JUH
Polona
G2C
15.10.1980
G01
JUH
Polona
G2C
15.10.1980
G02
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
21
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);
22
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(dijak |x| obiskuje)
IDKrozek
IDDijak
G01
10191
G01
10305
G01
10309
G01
10310
G01
10320
IDDijak
Priimek
Ime
Razred
Rojen
G01
10777
10191
ŠTUPAR
Andrej
G2A
15.10.1980
Priimek
Ime
IDKrozek
G01
10873
10205
MLINAR
Mateja
G2A
15.11.1985
ŠTUPAR
Andrej
G01
G02
10301
10301
DOLENC
Mitja
G2A
15.12.1990
DOLENC
Mitja
R01
G02
10310
10305
VERK
Maria
G2C
15.12.1987
DOLENC
Mitja
G02
G02
10330
10309
ŽAVBI
Jana
G2B
15.10.1987
VERK
Maria
G01
G02
10920
10310
JUH
Polona
G2C
15.10.1980
ŽAVBI
Jana
R01
R01
10301
10320
DOLHAR
Andrej
G2A
15.10.1980
ŽAVBI
Jana
R02
R01
10309
10330
AMBROŽIČ
Jure
G2A
15.3.1980
ŽAVBI
Jana
G01
R01
10330
10432
DOLINAR
Janez
G2B
15.4.1980
ŽAVBI
Jana
G02
R01
10432
10435
MAZI
Jernej
G2C
15.5.1980
ŽAVBI
Jana
L01
R01
10455
10444
KOŽELJ
Jure
G2B
13.10.1980
JUH
Polona
G01
R01
10873
10455
NOVAK
Miha
G2B
15.10.1980
JUH
Polona
G02
R02
10309
10666
GREGORIČ
Gregor
G2B
15.10.1980
DOLHAR
Andrej
R02
R02
10320
10777
POŽAR
Anže
G2C
10.4.1980
DOLHAR
Andrej
G01
R02
10455
10873
LAVRIH
Žiga
G2C
15.1.1980
AMBROŽIČ
Jure
R01
R02
10666
10920
ARHAR
Jure
G2B
15.2.1980
AMBROŽIČ
Jure
G02
R02
10873
Janez
R01
DOLINAR
23
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);
24
Količnik primer
Izpišite imena dijakov, ki obiskujejo vse krožke!

Rel. algebra – postopek
1. Kako dobim seznam vseh krožkov? [Krozek.IDKrozek] Krozek
2. Kako dobim seznam kdo obiskuje katere krožke? relacija obiskuje
3. Kako vem kateri IDDijak obiskuje vse krožke – uporabim količnik? obiskuje /
[Krozek.IDKrozek] Krozek
4. Ostal je le atribut IDDijak, kako pridem do priimkov in imen teh dijakov? naredim naravni
stik
5. Naredim projekcijo zahtevanih atributov (imena in priimka)
-
Končna rešitev:
[Dijak.ime,Dijak.priimek]((Obiskuje/[Krozek.IDKrozek] Krozek) |x| Dijak))
2.
1.
3.
4.
5.
25
Količnik – primer v SQL-u

SQL – postopek
1. Preštej koliko je vseh krožkov?
SELECT COUNT(Krozek.IDKrozek) FROM Krozek;
2. 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;
3. 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)));
26
N & N – kdaj uporabiti katero operacijo?

Izpišite …, ki ustrezajo pogoju

Selekcija in projekcija

Izpišite …, ki ustrezajo pogoju


Izpišite …, ki ustrezajo pogoju1
in ustrezajo pogoju 2 (pogoja se

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
(podatki so v eni tabeli)
(podatki so v različnih tabelah)
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)

27
Naloge
& namigi
(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.
4. Izpiši imena krožkov, ki jih obiskuje Miha Novak.
//projekcija, selekcija, naravni/theta stik
// projekcija, selekcija, naravni/theta stik
5. Izpiši imena krožkov, ki jih obiskujejo le dijaki razreda G2A.
naravni/theta stik, razlika
6. Izpiši imena krožkov, ki jih ne obiskuje Miha Novak.
razlika
// projekcija, selekcija, naravni/theta stik,
7. Izpiši imena krožkov, ki jih obiskuje samo Miha Novak.
razlika
// projekcija, selekcija,
// projekcija, selekcija, naravni/theta stik,
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.
selekcija, naravni/theta stik, razlika
11. Izpiši imena krožkov, ki jih obiskujejo vsi dijaki.
//
// projekcija,
// projekcija, selekcija, naravni/theta stik, količnik
12. Izpiši imena krožkov, ki se ne izvajajo (nihče jih ne obiskuje).
// projekcija, razlika
28