Adatbázis-kezelés 3. Ea: Viszonyított betűszámtan
(2013)
Relációs algebra alapok (átgondolt verzió)
v: 2015.02.15
Szűcs Miklós - ME, ÁIT. 1.o
Témakörök
Relációs algebra
Ellenőrző kérdések
2.o
Relációs algebra
Műveletek
Gyakorlás
3.o
Relációs algebra Algebrai módszerek arra, hogy miként építhetünk új
relációkat a régi relációkból. A kifejezések alapja (operandusai) a relációk. Kevés, egyszerű művelet A halmazműveletek csak azonos szerkezetű relációkon hajthatók végre! A relációk megadása: 1.
2.
rsz
típus
szín
r1
Fiat
zöld
r2
Opel
kék
r5
Fiat
kék
AUTÓ [ rsz, típus, szín ]
3. AUTÓ rsz
típus szín
4.o
A relációs algebra műveletei Szelekció Projekció Kiterjesztés Aggregáció Csoportképzés
Egy operandusú
Join Metszet Különbség Unió Osztás
Két operandusú
} } } Halmazműveletek
5.o
Szelekció (kiválasztás) Szelekció: a megadott feltételnek eleget tévő rekordok kerülnek át az eredmény relációba. Jele:
felt(r)
Formálisan:
Feladat: Megoldás:
AUTÓ
X Y(r) = { t r | t(X) t(Y)}
A kék színű, vagy a Mazda típusú autó adatai
szín=‘kék’ OR típus=‘Mazda’ (AUTÓ)
rsz
típus
szín
r1
Fiat
zöld
rsz
típus
szín
r2
Opel
kék
r2
Opel
kék
r6
Mazda
piros
r6
Mazda
piros
r4
Skoda
kék
r4
Skoda
kék
r9
Lada
piros 6.o
Projekció (vetítés) Projekció: csak a kijelölt mezők jelennek meg az eredmény relációban. Jele:
mlista(r) Feladat: Megoldás:
AUTÓ
Formálisan:
X (r)
= {t(X) r | t r}
A típus és a szín mezők megjelenítése
típus, szín (AUTÓ)
rsz
típus
szín
típus
szín
r1
Fiat
zöld
Fiat
zöld
r2
Opel
kék
Opel
kék
r6
Mazda
piros
Mazda
piros
r4
Skoda
kék
Skoda
kék
r9
Lada
piros
Lada
piros 7.o
A szelekció és a projekció kombinálása A kék színű, vagy a Mazda típusú autó rendszámai
Feladat: Megoldás:
AUTÓ
rsz (szín=‘kék’ OR típus=‘Mazda’ (AUTÓ) ) rsz
típus
szín
r1
Fiat
zöld
r2
Opel
kék
r6
Mazda
piros
r4
Skoda
kék
r9
Lada
piros
szelekció
projekció
rsz r2
r6 r4
8.o
Kiterjesztés Kiterjesztés: a reláció kibővítése származtatott mezőkkel. Jele:
mezőlista(r)
Az új mezőérték a többi mező értékéből számítható. Feladat: Megoldás:
Autók adatai és teljesítményadója
adó: lóerő/0.005 (AUTO)
AUTÓ rsz
típus
lóerő
rsz
típus
lóerő
adó
r1
Opel
110
r1
Opel
110
22000
r2
Merci
320
r2
Merci
320
64000
r5
Trabi
29
r5
Trabi
29
5800
9.o
Aggregáció Aggregáció: a relációból összesítő rekordot állít elő. Jele:
aggregációs-lista (r)
Aggregációs függvények: SUM(mez.kif) – Összeg AVG(mez.kif) – Átlag COUNT(mez.kif) – Darabszám MAX(mez.kif) – Legnagyobb érték MIN(mez.kif) – Legkisebb érték
10.o
Aggregáció Feladat: Megoldás:
Az autók összára
sum(ár)
Feladat: Megoldás:
(AUTÓ)
AUTÓ
Az autók száma
count(*) (AUTÓ)
AUTÓ
rsz
típus
ár
r1
Opel
4000
r2
Merci
12000
r5
Trabi
35
rsz
típus
ár
sum(ár)
r1
Opel
4000
count(*)
16035
r2
Merci
12000
3
r5
Trabi
35
11.o
Csoportképzés Csoportképzés és aggregáció: a reláció rekordjait csoportokba rendezi, és minden csoportra egy összesítő rekordot állít elő.
Jele:
aggregációs-lista csoport képző
(r)
Feladat:
Az autók átlagára típusonként
Megoldás:
AUTÓ
típus, avg(ár) típus
rsz
típus
ár
r1
Opel
3200
r2
Fiat
3800
típus
avg(ár)
r3
Opel
2400
Opel
3200
r4
Opel
4000
Fiat
3000
r5
Merci
8000
Merci
8000
r6
Fiat
2200
(AUTÓ)
12.o
Join (szorzat, illesztés) Join: a két reláció rekordjainak párosait adja eredményként. Alap join: (Descartes-szorzat): r1 r2 = {(t,s) | t r1 , s r2}
Jele: r1 r2 vagy r1 x r2 Feladat: Megoldás:
AUTÓ
Az autók és a tulajdonosok teljes variációja
AUTÓ EMBER
rsz
típus
szín
r1
Fiat
zöld
r2
Opel
kék
r5
Fiat
kék
EMBER
rsz
típus
szín
név
kor
r1
Fiat
zöld
Pali
36
r2
Opel
kék
Pali
36
r5
Fiat
kék
Pali
36
név
kor
r1
Fiat
zöld
Anna
29
Pali
36
r2
Opel
zöld
Anna
29
Anna
29
r5
Fiat
kék
Anna
29 13.o
Szelekciós join (feltételes illesztés) Szelekciós join: a két reláció rekordpárosaiból a feltételnek eleget tévő párosokat adja eredményként.
Jele: r1 felt r2 Feladat: Megoldás:
AUTÓ
Formálisan: r1
felt r2
= felt(r1 r2 )
Az autó tulajdonosok listája
AUTÓ tulaj=id EMBER EMBER
rsz
tulaj
név
id
r1
3
Béla
1
r2
1
Jenő
2
r5
4
Pali
3
Anna
4
rsz
tulaj
név
id
r1
3
Pali
3
r2
1
Béla
1
r5
4
Anna
4 14.o
Natural join (természetes illesztés) Natural join: olyan szelekciós join, mely az azonos elnevezésű mezők értékegyezőségén alapszik.
Jele: r1 = r2 Feladat: Megoldás:
AUTÓ
Az autó tulajdonosok listája
AUTÓ = EMBER EMBER
rsz
id
név
id
r1
3
Béla
1
r2
1
Jenő
2
r5
4
Pali
3
Anna
4
rsz
id
név
r1
3
Pali
r2
1
Béla
r5
4
Anna 15.o
Outer join (külső illesztés) Outer join: olyan szelekciós join, melyben az illeszkedő pár nélküli rekordok is bekerülnek az eredmény halmazba (üres étékekkel kiegészítve).
Jele: r1 +feltétel r2 Típusai: Left Right Full
Lista az emberekről, ha van autójuk, arról is.
Feladat: Megoldás:
EMBER
EMBER + ember.id=autó.tulaj AUTÓ
AUTÓ
név
id
rsz
tulaj
név
id
Béla
1
r1
3
Béla
1
Jenő
2
r2
1
Jenő
2
Pali
3
r5
4
Pali
Anna
4
Anna
rsz tulaj r2
1
3
r1
3
4
r5
4 16.o
Semi join (félillesztés) Semi join: olyan szelekciós join, melyben az illeszkedő párokból csak a megadott oldal mezői szerepelnek.
Jele: r1 feltétel r2 Lista azon emberekről, akiknek van autójuk.
Feladat: Megoldás:
EMBER
EMBER
Típusai: Left Right
ember.id=autó.tulaj AUTÓ
AUTÓ
név
id
rsz
tulaj
név
id
Béla
1
r1
3
Béla
1
Jenő
2
r2
1
Pali
3
Pali
3
r5
4
Anna
4
Anna
4 17.o
Unió (egyesítés) Unió: azonos sémájú relációk rekordhalmazának A egyesítése.
B
Jele: r1 r2 Feladat: Megoldás:
AB
Az összes ember adata
EMBER1 EMBER2
EMBER1
EMBER2
név
id
név
id
név
id
Béla
1
Béla
1
Géza
4
Jenő
2
Jenő
2
Ödön
5
Anna
3
Anna
3
Zoli
6
Géza
4
Ödön
5
Zoli
6 18.o
Metszet (közös rész) Metszet: azonos sémájú relációk rekordhalmazának A metszete.
B
Jele: r1 r2 Feladat:
Azok a futók, akik síelnek is
Megoldás:
Futók Síelők
Futók
AB
Síelők
név
id
név
id
Béla
1
Géza
4
Jenő
2
Jenő
2
Anna
3
Béla
1
név
id
Béla
1
Jenő
2
19.o
Különbség Különbség: azonos sémájú relációk rekordhalmazának A B különbsége.
Jele: r1 \ r2 Feladat: Megoldás:
Futók
A\B
Azok a futók, akik nem síelnek
Futók \ Síelők Síelők
név
id
név
id
Béla
1
Géza
4
Jenő
2
Jenő
2
Anna
3
Béla
1
név
id
Anna
3
20.o
Osztás Osztás: a Descartes szorzat inverze, azon legnagyobb reláció, melynek Descartes szorzata r2-vel benne van r1-ben. Feladat:
Azok, akik miden sportágat űznek
Megoldás:
Emberek ÷ Sportág
Jele: r1 ÷ r2 Ember
sport
név
foci
Béla
bringa
Béla
bringa
Géza
sport
név
foci
Jenő
foci
Béla
futás
Zoli
bringa
Jenő
foci
Zoli
bringa
Jenő
Sportág
21.o
Relációs algebra
Műveletek
Gyakorlás
22.o
Gyakorló feladat: Termék-Vásárló Az adatbázis ER modellje:
Tkód
Név
Azonosító
Név
Vásárlás Termék
Ár
Leírás
Vásárló
Dátum
Darab
Irsz.
Lakcím
Város
FizMód
Cím
23.o
Gyakorló feladat: Termék-Vásárló 2. Az adatbázis relációs modellje: Termék Tkód Név C5 C25
Vásárlás Ár Leírás N6 C30
Kód C5
Dátum Darab D N6
Azon C5
Vásárló Azonosító Név Irsz Város Cím C5 C25 C4 C40 C30
Séma:
FizMód C15
Termék [ Tkód, Név, Ár, Leírás ] Vásárlás [ Kód, Dátum, Darab, Azon ]
Vásárló [ Azonosító, Név, Irsz, Város, Cím, FizMód ] 24.o
Gyakorló feladat: Termék-Vásárló 3. Séma:
Termék [ Tkód, Név, Ár, Leírás ] Vásárlás [ Kód, Dátum, Darab, Azon ] Vásárló [ Azonosító, Név, Irsz, Város, Cím, FizMód ]
1. Termékek neve:
П név (termék) 2. A 2000 Ft-nál olcsóbb termékek neve:
П név (σ
ár<2000
(termék))
3. A Kis Rozi által vásárolt termékek neve:
П termék.név (σ
vásárló.név=‘Kis Rozi’
(vásárló ►◄ azonosító=azon
vásárlás ►◄ kód=tkód termék)) 25.o
Gyakorló feladat: Termék-Vásárló 4. Séma:
Termék [ Tkód, Név, Ár, Leírás ] Vásárlás [ Kód, Dátum, Darab, Azon ] Vásárló [ Azonosító, Név, Irsz, Város, Cím, FizMód ]
4. Azon termékek neve, amelyeket már vásároltak: П név (termék ►◄ tkód=kód vásárlás) 5. Azon termékek neve, amelyeket még nem vásároltak:
П név (termék) \ П név (termék ►◄ tkód=kód vásárlás) 6. Hány féle termék van? Γ count(*) (termék) 7. A legdrágább termék(ek) neve, ára:
П név,ár (σ ár=
Γ max(ár) (termék) termék) 26.o
Gyakorló feladat: Termék-Vásárló 5. Séma:
Termék [ Tkód, Név, Ár, Leírás ] Vásárlás [ Kód, Dátum, Darab, Azon ] Vásárló [ Azonosító, Név, Irsz, Város, Cím, FizMód ]
8. Hányszor vásároltak a t605-ös kódú termékből?
Γ count(*) (σ kód=’t605’ (vásárlás)) 9. Összesen hány darabot vásároltak a t605-ös kódú termékből?
Γ sum(darab) (σ kód=’t605’ (vásárlás)) 10. Összesen hány darabot vásároltak az egyes termékből? Γ kód, sum(darab) (vásárlás) kód
27.o
Gyakorló feladat: Termék-Vásárló 6. Séma:
Termék [ Tkód, Név, Ár, Leírás ] Vásárlás [ Kód, Dátum, Darab, Azon ] Vásárló [ Azonosító, Név, Irsz, Város, Cím, FizMód ]
11. Az egyes városokban hány vásárló van? Γ város, count(*) (vásárló) város
12. Összesen mennyit fizetett Kis Rozi?
Γ ár*darab (
σ
vásárló.név=‘Kis Rozi’
(vásárló ►◄ azonosító=azon vásárlás
►◄ kód=tkód termék)) 13. 2010 májusában mennyi volt a bevétel?
Γ ár*darab (
σ
dátum=‘2010.05.*’
(vásárlás ►◄ kód=tkód termék)) 28.o
Gyakorló feladat: Oktató-Tantárgy-Hallgató neptunkód
név
kód
Oktató
kredit
Tárgy
oktat
megnevezés
félév
tanszék
hallgat
neptunkód
vizsgajegy név Hallgató
cím
irszám
város
utca
hsz
tankör életkor
szül.d. 29.o
Gyakorló feladat: Oktató-Tantárgy-Hallgató 2. neptunkód
Oktató
név
kód
oktat
kredit
Tárgy
megnevezés
tanszék
Relációs sémák: OKTATÓ [ neptunkód, név, tanszék ] TÁRGY [ kód, megnevezés, kredit, oktató ]
30.o
Gyakorló feladat: Oktató-Tantárgy-Hallgató 3. Tárgy
félév neptunkód
hallgat vizsgajegy
név Hallgató
cím
irszám
város
utca
hsz
tankör életkor
szül.d.
Relációs sémák: HALLGATÓ [neptunkód, név, szül.d, tankör, irsz, város, utca, hsz] HALLGAT [ hallgató, tárgy, félév, vizsgajegy ] 31.o
Gyakorló feladat: Oktató-Tantárgy-Hallgató 4. Relációs sémák: OKTATÓ [ neptunkód, név, tanszék ] TÁRGY [ kód, megnevezés, kredit, oktató ] HALLGATÓ [neptunkód, név, szül.d, tankör, irsz, város, utca, hsz] HALLGAT [ hallgató, tárgy, félév, vizsgajegy ]
1. Oktatók neve:
П név (oktató) 2. Oktatók és tantárgyaik neve:
oktató.neptunkód=tárgy.oktató
П név, megnevezés ( oktató ►◄ o.neptunkód=t.oktató tárgy ) 3. Oktatók és tantárgyaik neve (azok az oktatók is, akiknek nincs tárgya):
П név, megnevezés ( oktató +►◄ o.neptunkód=t.oktató tárgy ) oktató.neptunkód=tárgy.oktató 32.o
Gyakorló feladat: Oktató-Tantárgy-Hallgató 5. Relációs sémák: OKTATÓ [ neptunkód, név, tanszék ] TÁRGY [ kód, megnevezés, kredit, oktató ] HALLGATÓ [neptunkód, név, szül.d, tankör, irsz, város, utca, hsz] HALLGAT [ hallgató, tárgy, félév, vizsgajegy ]
4. A VIR Tsz-en dolgozó oktatók neve és tárgyaik címe:
П név, megnevezés (σ tanszék=’VIR’ (oktató) ►◄o.neptunkód=t.oktató tárgy) 5. Az átlagos kreditpontszám:
oktató.neptunkód=tárgy.oktató
Γ avg(kredit) (tárgy) 6. A VIR Tsz.-en oktatók létszáma:
Γ count(*) (σ tanszék=’VIR’ ( oktató ) ) 33.o
Gyakorló feladat: Oktató-Tantárgy-Hallgató 6. Relációs sémák: OKTATÓ [ neptunkód, név, tanszék ] TÁRGY [ kód, megnevezés, kredit, oktató ] HALLGATÓ [neptunkód, név, szül.d, tankör, irsz, város, utca, hsz] HALLGAT [ hallgató, tárgy, félév, vizsgajegy ]
7. A legnagyobb kreditpontszámú tárgy(ak) címe:
Π megnevezés ( σ kredit=Γ max(kredit) (tárgy) (tárgy) ) 8. Azok az oktatók, akiknek nincs tárgya:
Π név (oktató) \ Π név ( oktató ►◄ o.neptunkód=t.oktató tárgy ) oktató.neptunkód=tárgy.oktató
34.o
Gyakorló feladat: Oktató-Tantárgy-Hallgató 7. Relációs sémák: OKTATÓ [ neptunkód, név, tanszék ] TÁRGY [ kód, megnevezés, kredit, oktató ] HALLGATÓ [neptunkód, név, szül.d, tankör, irsz, város, utca, hsz] HALLGAT [ hallgató, tárgy, félév, vizsgajegy ]
9. Azok a hallgatók, akik a 2003/2004 tanév II. félévében nem vettek fel tárgyat:
Π név (hallgató) \ Π név ( (σ félév=’2003/2004 2.’ (hallgató) ) ►◄h.neptunkód=h.hallgató hallgat ►◄hallgat.tárgy=tárgy.kód tárgy ) hallgató.neptunkód=hallgat.hallgató
10. Határozzuk meg az életkort:
ε kor=rendszer_dátum-szül_dátum (hallgató) 35.o
Gyakorló feladat: Oktató-Tantárgy-Hallgató 8. Relációs sémák: OKTATÓ [ neptunkód, név, tanszék ] TÁRGY [ kód, megnevezés, kredit, oktató ] HALLGATÓ [neptunkód, név, szül.d, tankör, irsz, város, utca, hsz] HALLGAT [ hallgató, tárgy, félév, vizsgajegy ]
11. Tanszékenként az oktatók létszáma: count(*) (oktató) Γ tanszék, tanszék
12. Melyik tárgyat hányan hallgatják:
Γ megnevezés, count(*) (tárgy ►◄tárgy.kód=hallgat.tárgy hallgat megnevezés
►◄ hallgat.hallgató=hallgató.neptunkód hallgató) 36.o
Gyakorló feladat: Oktató-Tantárgy-Hallgató 9. Relációs sémák: OKTATÓ [ neptunkód, név, tanszék ] TÁRGY [ kód, megnevezés, kredit, oktató ] HALLGATÓ [neptunkód, név, szül.d, tankör, irsz, város, utca, hsz] HALLGAT [ hallgató, tárgy, félév, vizsgajegy ]
13. Azok az oktatók, akiknek 2-nél több tárgyuk van:
Π név ( σ db>2 (Γnév név,count(*) db (oktató ►◄o.neptunkód=t.oktató tárgy) oktató.neptunkód=tárgy.oktató 14. Az átlagnál alacsonyabb kreditpontú tárgyak oktatóinak neve:
Π név ( σ kredit < Γ avg(kredit) (tárgy) (tárgy) ►◄o.nepunkód=t.oktató oktató)
oktató.neptunkód=tárgy.oktató
37.o
Gyakorló feladat: Oktató-Tantárgy-Hallgató 10. Relációs sémák: OKTATÓ [ neptunkód, név, tanszék ] TÁRGY [ kód, megnevezés, kredit, oktató ] HALLGATÓ [neptunkód, név, szül.d, tankör, irsz, város, utca, hsz] HALLGAT [ hallgató, tárgy, félév, vizsgajegy ]
15. A legtöbb tárgyat tanító oktató neve: db (oktató ►◄ X = Γ név, count(*) o.nepunkód=t.oktató tárgy) név
Π név (σ db=Γ max(db) (X) (X))
oktató.neptunkód=tárgy.oktató
16. Kik azok a hallgatók, akik minden tárgyat felvettek?
Π név (( Π hallgató,tárgy (hallgat) / Π kód (tárgy)) ►◄hallgat.hallgató=hallgató.neptunkód hallgató ) 38.o
Témakörök
Relációs algebra
Ellenőrző kérdések
39.o
Ellenőrző kérdések 1. 1. Milyen algebrai műveleteket kell alkalmazni az alábbi feladat megoldásakor: A piros autók rendszáma Tulajdonos
30 mp
Autó
Projekció Szelekció Aggregáció Kiterjesztés Join 40.o
Ellenőrző kérdések 2. 2. Milyen algebrai műveleteket kell alkalmazni az alábbi feladat megoldásakor: A miskolci tulajdonosok összes adatának kiírása Tulajdonos
30 mp
Autó
Projekció Szelekció Aggregáció Kiterjesztés Join 41.o
Ellenőrző kérdések 3. 3. Milyen algebrai műveleteket kell alkalmazni az alábbi feladat megoldásakor: A miskolci tulajdonosok neve és autóik rendszáma Tulajdonos
40 mp
Autó
Projekció Szelekció Aggregáció Kiterjesztés Join 42.o
Ellenőrző kérdések 4. 4. Milyen algebrai műveleteket kell alkalmazni az alábbi feladat megoldásakor: Az Opel típusú autók rendszáma Tulajdonos
40 mp
Autó
Projekció Szelekció Aggregáció Kiterjesztés Join 43.o
Ellenőrző kérdések 5. 5. Milyen algebrai műveleteket kell alkalmazni az alábbi feladat megoldásakor: Az Opel típusú autók átlagára Tulajdonos
40 mp
Autó
Projekció Szelekció Aggregáció Kiterjesztés Join 44.o
Ellenőrző kérdések 6. 6. Milyen algebrai műveleteket kell alkalmazni az alábbi feladat megoldásakor: Városonként az autók darabszáma Tulajdonos
40 mp
Autó
Projekció Szelekció Aggregáció Kiterjesztés Join 45.o
Ellenőrző kérdések 7.
40 mp
7. Milyen algebrai műveleteket kell alkalmazni az alábbi feladat megoldásakor: Rendszám és adó (mely a teljesítmény 150-szerese) Tulajdonos
Autó
Projekció Szelekció Aggregáció Kiterjesztés Join 46.o
Ellenőrző kérdések 8. 8. Milyen algebrai műveleteket kell alkalmazni az alábbi feladat megoldásakor:
40 mp
Adó (mely a teljesítmény 150-szerese) összege városonként Tulajdonos
Autó
Projekció Szelekció Aggregáció Kiterjesztés Join 47.o
Ellenőrző kérdések 9. 9. Adja meg a megoldást relációs algebrával!
300 mp
Termék [ Tkód, Név, Ár, Leírás ] Raktár [ RaktHely, Tkkód, Darab ]
A: Mely termékek leírásában szerepel a női szó? B: Mely raktárhelyeken van 100-nál több termék? C: Mely raktárhelyeken van bikini nevű termék? D: Mennyi a termékek átlagára? E: Összesen hány darab bikini van a raktárban? F: Összesen mennyi értékű bikini van a raktárban? G: Hány féle 1000 Ft-nál drágább termék van? H: Hány darab 1000 Ft-nál drágább termék van? I: Mely raktárhelyeken van 100000 Ft-nál nagyobb érték? 48.o
Gratulálok! Ön átvette a tananyagot, és letesztelte a tudását! 49.o
Felhasznált irodalom Kovács László elektronikus jegyzetei Szelezsán János: Adatbázisok, LSI Oktatóközpont, 1999 Baksáné Varga Erika elektronikus jegyzetei IHM: Adatbázis-kezelés, elektronikus jegyzet
50.o
KÉRDÉSEK
és VÁLASZOK 51.o