Relasjonsalgebra
Resultatet av en relasjonsalgebraisk operasjon er ALLTID en ny relasjon!
 |
 |
SELECT |
Plukker ut spesielle rader/tupler fra en bestemt relasjon |
 |
 |
 |
PROJECT |
Plukker ut spesielle attributter/kolonner fra en bestemt relasjon |
 |
 |
 |
PRODUCT |
Kombinerer en og en tuple fra en relasjon med hvert tuple i en annen,
og bygger således opp en ny relasjon. Kalles også kartesisk
produkt.
|
 |
 |
 |
UNION |
Alle tupler i en eller begge relasjoner(='OR') |
 |
 |
 |
INTERSECTION |
Alle tupler som forekommer i begge relasjonene(='AND') |
 |
 |
 |
DIFFERENCE |
Alle tupler som forekommer i den første relasjonen, men ikke i den andre |
 |
|
 |
JOIN |
PROJECT av en SELECT av et kartesisk produkt. Kombinerer tupler fra to
relasjoner slik at hvert tuplepar tilfredsstiller spesifiserte krav.
|
|
 |
 |
DIVIDE |
Har to relasjoner, en binær og en unær.
Resultatet av DIVIDE blir da de tuplene i den binære som
tilfredsstiller alle verdier i den unære
|
 |
Mer om join
Join, intersect og divide kan defineres ved hjelp av select,
project, product, union og difference, men de er nyttige likevel
så derfor har vi de.
De fleste typene join er mellom en primærnøkkel og en
matchende fremmednøkkel.
De forskjellige typene join som finnes:
- Natural join
- Left outer join
- Right outer join
- Full outer join
- Theta/Equi join
- Semi join
Natural join
- Ta det kartesiske produkt av relasjonene R og S
- Selekter ut de tuplene fra produktet hvor alle
fellesattributtene i R og S har samme verdi
- Fjern alle dobbeltforekomster av attributter fra 2,
slik at det bare blir en forekomst av hvert av de
opprinnelige fellesattributter
Eksempel:
List ut alle studenter og deres karakterer i de enkelte fag:
|
studentnr |
fnavn |
enavn |
1 |
Jan |
Andersen |
2 |
Ingrid |
Johansen |
3 |
Anna |
Olsen |
4 |
Ole |
Jakobsen |
5 |
Trine |
Solbakken |
6 |
Finn |
Eriksen |
|
 |
studentnr |
kursnr |
karakter |
1 |
1 |
2.7 |
1 |
3 |
|
1 |
5 |
3.3 |
2 |
1 |
2.4 |
2 |
3 |
1.8 |
3 |
3 |
1.5 |
3 |
5 |
1.3 |
6 |
2 |
3.4 |
|
= |
studentnr |
kursnr |
karakter |
fnavn |
enavn |
1 |
1 |
2.7 |
Jan |
Andersen |
1 |
3 |
|
Jan |
Andersen |
1 |
5 |
3.3 |
Jan |
Andersen |
2 |
1 |
2.4 |
Ingrid |
Johansen |
2 |
3 |
1.8 |
Ingrid |
Johansen |
3 |
3 |
1.5 |
Anna |
Olsen |
3 |
5 |
1.3 |
Anna |
Olsen |
6 |
2 |
3.4 |
Finn |
Eriksen |
|
Left outer join
- Ta det kartesiske produkt av relasjonene R og S
- Lag en ny relasjon som inneholder alle tupler fra R
- Der det er mulig, kombineres det enkelte tuple fra R
med de tupler i S der fellesattributtene har samme verdi
- For de øvrige tupler i R kombineres disse med NULL i alle
S-attributtene
Eksempel:
List ut nr, navn og leder for alle hybelhus, og all info om deres hybler
|
hybelnusnr |
hybelhusnavn |
leder |
1 |
Os Plaza |
Anne Tvedt |
2 |
Sentrum |
Truls Johansen |
3 |
Øst |
Kenneth Hagen |
4 |
Idd |
Jens Olsen |
|
 |
hybelnr |
hybelhusnr |
romnr |
utleiesats |
1 |
1 |
1 |
500 |
4 |
1 |
4 |
625 |
5 |
2 |
1 |
650 |
6 |
2 |
2 |
400 |
11 |
3 |
1 |
750 |
14 |
3 |
4 |
700 |
|
= |
hybelhusnr |
hybelhusnavn |
leder |
hybelnr |
romnr |
utleiesats |
1 |
Os Plaza |
Anne Tvedt |
1 |
1 |
500 |
1 |
Os Plaza |
Anne Tvedt |
4 |
4 |
625 |
2 |
Sentrum |
Truls Johansen |
5 |
1 |
650 |
2 |
Sentrum |
Truls Johansen |
6 |
2 |
400 |
3 |
Øst |
Kenneth Hagen |
11 |
1 |
750 |
3 |
Øst |
Kenneth Hagen |
14 |
4 |
700 |
4 |
Idd |
Jens Olsen |
null |
null |
null |
|
Right outer join
- Ta det kartesiske produkt av relasjonene R og S
- Lag en ny relasjon som inneholder alle tupler fra S
- Der det er mulig, kombineres det enkelte tuple fra S
med de tupler i R der fellesattributtene har samme verdi
- For de øvrige tupler i S kombineres disse med NULL i alle
R-attributtene
Eksempel:
List ut nummer, fullt navn og all utleieinfo for alle studenter.
|
avtalenr |
studentnr |
hybelnr |
startdato |
sluttdato |
1 |
2 |
3 |
15.08.99 |
15.06.00 |
2 |
3 |
6 |
10.08.99 |
05.06.00 |
3 |
4 |
2 |
20.08.99 |
01.06.00 |
4 |
6 |
1 |
15.08.99 |
15.06.00 |
5 |
7 |
4 |
15.08.99 |
01.06.00 |
6 |
8 |
7 |
20.08.99 |
10.06.00 |
|
 |
studentnr |
fnavn |
enavn |
1 |
Jan |
Andersen |
2 |
Ingrid |
Johansen |
3 |
Anna |
Olsen |
4 |
Ole |
Jakobsen |
5 |
Trine |
Solbakken |
8 |
Harald |
Øvrevoll |
10 |
Harald |
Kong |
|
= |
studentnr |
fnavn |
enavn |
avtalenr |
hybelnr |
startdato |
sluttdato |
1 |
Jan |
Andersen |
null |
null |
null |
null |
2 |
Ingrid |
Johansen |
1 |
3 |
15.08.99 |
15.06.00 |
3 |
Anna |
Olsen |
2 |
6 |
10.08.99 |
05.06.00 |
4 |
Ole |
Jakobsen |
6 |
1 |
15.08.99 |
15.06.00 |
5 |
Trine |
Solbakken |
null |
null |
null |
null |
8 |
Harald |
Øvrevoll |
6 |
7 |
20.08.99 |
10.06.00 |
10 |
Harald |
Kong |
null |
null |
null |
null |
|
Full outer join
- Ta det kartesiske produkt av relasjonene R og S
- Lag en ny relasjon som inneholder alle tupler fra R og S
- Der det er mulig, kombineres det enkelte tuple fra R
med de tupler i S der fellesattributtene har samme verdi
- For de øvrige tupler kombineres disse med NULL i alle
R- og S-attributtene
Eksempel:
Lag en oversikt over alle hybler med og uten leieavtale
|
avtalenr |
studentnr |
hybelnr |
startdato |
sluttdato |
1 |
2 |
3 |
15.08.99 |
15.06.00 |
2 |
3 |
6 |
10.08.99 |
05.06.00 |
3 |
4 |
2 |
20.08.99 |
01.06.00 |
4 |
6 |
1 |
15.08.99 |
15.06.00 |
5 |
7 |
4 |
15.08.99 |
01.06.00 |
6 |
8 |
7 |
20.08.99 |
10.06.00 |
|
 |
hybelnr |
hybelhusnr |
romnr |
utleiesats |
1 |
1 |
1 |
500 |
4 |
1 |
4 |
625 |
5 |
2 |
1 |
650 |
2 |
1 |
2 |
525 |
6 |
2 |
2 |
400 |
3 |
1 |
3 |
475 |
7 |
2 |
3 |
375 |
8 |
2 |
4 |
400 |
9 |
1 |
5 |
450 |
10 |
1 |
6 |
600 |
11 |
3 |
1 |
750 |
12 |
3 |
2 |
650 |
13 |
3 |
3 |
650 |
14 |
3 |
4 |
700 |
15 |
3 |
5 |
700 |
16 |
3 |
6 |
700 |
|
= |
avtalenr |
studentnr |
hybelnr |
startdato |
sluttdato |
hybelhusnr |
romnr |
utleiesats |
4 |
6 |
1 |
15.08.99 |
15.06.00 |
1 |
1 |
500 |
5 |
7 |
4 |
15.08.99 |
01.06.00 |
1 |
4 |
625 |
null |
null |
5 |
null |
null |
2 |
1 |
650 |
3 |
4 |
2 |
20.08.99 |
01.06.00 |
1 |
2 |
525 |
2 |
3 |
6 |
10.08.99 |
05.06.00 |
2 |
2 |
400 |
1 |
2 |
3 |
15.08.99 |
15.06.00 |
1 |
3 |
475 |
6 |
8 |
7 |
20.08.99 |
10.06.00 |
2 |
3 |
375 |
null |
null |
8 |
null |
null |
2 |
4 |
400 |
null |
null |
9 |
null |
null |
1 |
5 |
450 |
null |
null |
10 |
null |
null |
1 |
6 |
600 |
null |
null |
11 |
null |
null |
3 |
1 |
750 |
null |
null |
12 |
null |
null |
3 |
2 |
650 |
null |
null |
13 |
null |
null |
3 |
3 |
650 |
null |
null |
14 |
null |
null |
3 |
4 |
700 |
null |
null |
15 |
null |
null |
3 |
5 |
700 |
null |
null |
16 |
null |
null |
3 |
6 |
700 |
|
Theta/Equi join
- Ta det kartesiske produkt av relasjonene R og S
- Velger ut alle de tuplene fra det kartesiske produkt
som tilfresstiller predikatet F
kan være en av operatorene
<, <=, >, >=, = eller ~=(ikke lik). Det finnes
også mer komplekse operatorer som ikke er med her.
- Dersom predikatet F kun inneholder test på likhet(=),
kalles det en equi join. Ellers er det en theta join
Eksempel:
Lag en liste over studenter med leieavtale
|
student.studennr |
fnavn |
enavn |
avtalenr |
leieavtale.studentnr |
hybelnr |
2 |
Ingrid |
Johansen |
1 |
2 |
3 |
3 |
Anna |
Olsen |
2 |
3 |
6 |
4 |
Ole |
Jakobsen |
3 |
4 |
2 |
6 |
Finn |
Eriksen |
4 |
6 |
1 |
7 |
Jonas |
Mykle |
5 |
7 |
4 |
8 |
Harald |
Øvrevoll |
6 |
8 |
7 |
|
Semi join
En vanlig theta join kombinert med en projection av tuplene
i R(i sluttresulatet har vi bare med tuplene fra R)
Eksempel:
Lag en liste over alle studenter som bor i Tistedal
|
studentnr |
fdato |
stud_ant_aar |
status |
fnavn |
enavn |
gateadresse |
postnr |
poststed |
5 |
02.03.77 |
2 |
Venter |
Trine |
Solbakken |
Flatebyveien 41 |
1790 |
Tistedal |
|