4. előadás Relációalgebra és relációkalkulusok Adatbázisrendszerek előadás 2016. október 10. Általános, és Debreceni Egyetem Informatikai Kar Az előadások Elmasry & Navathe: Database Systems alapján készültek. i műveletek 4.1
Relációs adatbázisséma Relációsémák egy halmaza és az integritási megszorítások összessége. Mi hiányzik még? Az adatbázisban nem csak adatokat akarunk tárolni (input), hanem szeretnénk információkat is kinyerni belőle (output). Ehhez műveletek szükségesek, amelyekkel manipulációkat hajthatunk végre a relációkon. Ezek révén elégíthetik ki a felhasználók alapvető információ kinyerési igényeiket olymódon, hogy kinyerési (keresési) kéréseket (lekérdezéseket) specifikálnak. Ezen műveletek eredménye a relációs modellben minden esetben egy újabb reláció, amely egy vagy több input relációból jöhet létre. Ez a tulajdonság zárttá teszi az algebrát (kalkulust), minden eredményül kapott objektum szintén reláció lesz. Általános i műveletek 4.2
relációalgebra relációkalkulus rekordalapú tartományalapú A relációalgebrában egy eljárást adunk meg (a hogyant mondjuk meg) a kinyerni kívánt információ előállítására. Procedurális nyelv. A relációkalkulusban deklaratív kifejezéssel adjuk meg (a mit mondjuk meg) a kinyerni kívánt információt. Nemprocedurális nyelv. Megjegyzés A három nyelv kifejezőerejük tekintetében megegyezik. Általános i műveletek 4.3
Relációalgebra a matematikai halmazelméleten alapuló lekérdező nyelv a lekérdezés egy kifejezés, amelyben az operátorok relációalgebrai műveletek, az operandusok pedig relációk a lekérdezés eredménye szintén egy reláció Relációkalkulus az elsőrendű predikátumkalkulusra épülő lekérdező nyelv a lekérdezés egy speciális alakú kifejezés, amely egy halmazt definiál a lekérdezés eredménye az előbb említett halmaz által meghatározott reláció Általános i műveletek 4.4
műveletei szelekció (σ) projekció (π) átnevezés (ρ) halmazműveletek unió ( ), metszet ( ), különbség ( vagy \) (belső szorzat, ) (join) általános (theta join, ) egyenlőségalapú (equijoin); természetes (natural join, ) bal oldali/jobb oldali/teljes külső (left/right/full outer join,,, ) hányados ( ) A műveletek egy sorozata a relációs algebra egy kifejezése. Általános i műveletek 4.5
Általános alakja σ szelekciós feltétel (R) R azt a relációt jelöli, amelyből a szelekciós feltétel -nek eleget tevő rekordokat válogatjuk ki. A szelekciós feltétel egy logikai kifejezés, amely logikai operátorokkal összekapcsolt részkifejezésekből épül föl. A részkifejezések alakja a következők valamelyike lehet: attribútum hasonlító op. konstans vagy attribútum hasonlító op. attribútum, ahol az attribútum az R egy attribútumának neve, a hasonlító op. a { =,, <, >,, } operátorok egyike, a konstans pedig egy konstans érték az attribútum tartományából. Egy általános szelekciós feltételben a részkifejezéseket az és, a vagy és a nem logikai operátorokkal kapcsolhatjuk össze. Általános i műveletek 4.6
Megjegyzés A { =,, <, >,, } halmaz operátorait csak olyan attribútumok esetén használhatjuk, amelyek tartományai egymással összehasonlítható elemeket tartalmaznak (pl. számok, dátumok). Ha nem összehasonlítható értékek alkotják az attribútum tartományát, akkor csak a { =, } halmazbeli operátorok használhatók (pl. színek). Egyes tartományok esetén további hasonlító operátorokat is használhatunk (pl. RÉSZSZTRING operátor). Általános A szelekció megvalósítása SQL-ben: SELECT * FROM R WHERE szelekciós feltétel; i műveletek 4.7
A szelekció tulajdonságai A szelekció unáris művelet. Az eredményül kapott reláció foka és sémája megegyezik R fokával, illetve sémájával. Az eredményül kapott reláció számossága mindig kisebb vagy egyenlő R számosságánál, azaz bármely f feltétel esetén σ f (R) R Két egymásba ágyazott szelekciós művelet végrehajtási sorrendje felcserélhető: σ felt1 (σ felt2 (R)) = σ felt2 (σ felt1 (R)) Minden többszörösen egymásba ágyazott (kaszkádolt) szelekció átírható egyetlen szelekcióvá, amelynek a feltétele az eredeti feltételek konjunkciója: σ felt1 (σ felt2 (... (σ feltn (R))...)) = σ felt1 AND felt 2 AND... AND felt n (R) Általános i műveletek 4.8
Válasszuk ki azokat a dolgozókat, akik vagy a 4-es osztályon dolgoznak, és többet keresnek 325 000 Ft-nál, vagy az 5-ös osztályon dolgoznak, és többet keresnek 390 000 Ft-nál! Általános i műveletek 4.9
Válasszuk ki azokat a dolgozókat, akik vagy a 4-es osztályon dolgoznak, és többet keresnek 325 000 Ft-nál, vagy az 5-ös osztályon dolgoznak, és többet keresnek 390 000 Ft-nál! σ (Osz=4 AND Fizetés>325000) OR(Osz=5 AND Fizetés>390000) (DOLGOZÓ) Vnév Knév Szabó Mária Takács József Horváth Erzsébet Szsz Szdátum Lakcím 2 551208 2219 1955. december 8. 1 410620 4902 1941. június 20. 1097 Budapest 4027 Debrecen 2 620915 3134 1962. szeptember 15. 1092 Budapest Nem N F N Fizetés Főnök_szsz 520000 1 371110 4519 559000 1 371110 4519 494000 2 551208 2219 Osz 5 4 5 Általános i műveletek 4.9
Válasszuk ki azokat a dolgozókat, akik vagy a 4-es osztályon dolgoznak, és többet keresnek 325 000 Ft-nál, vagy az 5-ös osztályon dolgoznak, és többet keresnek 390 000 Ft-nál! σ (Osz=4 AND Fizetés>325000) OR(Osz=5 AND Fizetés>390000) (DOLGOZÓ) Vnév Knév Szabó Mária Takács József Horváth Erzsébet Szsz Szdátum Lakcím 2 551208 2219 1955. december 8. 1 410620 4902 1941. június 20. 1097 Budapest 4027 Debrecen 2 620915 3134 1962. szeptember 15. 1092 Budapest Nem N F N Fizetés Főnök_szsz 520000 1 371110 4519 559000 1 371110 4519 494000 2 551208 2219 Osz 5 4 5 A feladat megoldása SQL-ben: SELECT * FROM DOLGOZÓ WHERE (Osz=4 AND Fizetés>325000) OR (Osz=5 AND Fizetés>390000); Általános i műveletek 4.9
Általános alakja π attribútumlista (R) Az attribútumlista az R reláció lekérdezni kívánt attribútumainak listája. A projekció megvalósítása SQL-ben: SELECT attribútumlista FROM R; ahol az attribútumlista elemeit vesszővel választjuk el és a tulajdonos reláció azonosítására, ha több relációt sorolunk fel, alkalmazható a pontozott jelölés, R.A. Általános i műveletek 4.10
A projekció tulajdonságai A projekció unáris művelet. Az eredményül kapott reláció fokát és sémáját az attribútumlistában szereplő attribútumok határozzák meg: az eredmény sémájában az attribútumok sorrendje megegyezik a listában megadott attribútumok sorrendjével, a fokszám a listában megadott attribútumok darabszáma lesz. Ha az attribútumlista nem tartalmaz kulcs attribútumot, akkor az eredményül kapott reláció számossága kisebb lehet R számosságánál, ugyanis az eredményben nem jelenhetnek meg duplikált rekordok. Ha az attribútumlista R szuperkulcsa, akkor az eredmény számossága megegyezik R számosságával. Két egymásba ágyazott projekciós művelet eredménye megegyezik a külső projekció eredményével: π lista1 (π lista2 (R)) = π lista1 (R) Általános i műveletek ha lista 2 lista 1, egyébként a baloldal nem értelmezhető. 4.11
Adjuk meg a dolgozók vezetéknevét, keresztnevét és fizetését! Általános i műveletek 4.12
Adjuk meg a dolgozók vezetéknevét, keresztnevét és fizetését! π Vnév,Knév,Fizetés (DOLGOZÓ) Vnév Knév Fizetés Kovács László 390000 Szabó Mária 520000 Kiss Takács István József 325000 559000 Horváth Erzsébet 494000 Tóth János 325000 Fazekas Ilona 325000 Általános Nagy Zoltán 715000 i műveletek 4.12
Adjuk meg a dolgozók vezetéknevét, keresztnevét és fizetését! π Vnév,Knév,Fizetés (DOLGOZÓ) Vnév Knév Fizetés Kovács László 390000 Szabó Mária 520000 Kiss Takács István József 325000 559000 Horváth Erzsébet 494000 Tóth János 325000 Fazekas Ilona 325000 Általános Nagy Zoltán 715000 A feladat megoldása SQL-ben: SELECT Vnév, Knév, Fizetés FROM DOLGOZÓ; i műveletek 4.12
Adjuk meg a dolgozók nemét és fizetését! Általános i műveletek 4.13
Adjuk meg a dolgozók nemét és fizetését! π Nem,Fizetés (DOLGOZÓ) Nem F N F F N N F Fizetés 390000 520000 325000 559000 494000 325000 715000 Általános i műveletek 4.13
Adjuk meg a dolgozók nemét és fizetését! π Nem,Fizetés (DOLGOZÓ) Nem F N F F N N F Fizetés 390000 520000 325000 559000 494000 325000 715000 Általános A feladat megoldása SQL-ben: SELECT Nem, Fizetés FROM DOLGOZÓ; i műveletek 4.13
Adjuk meg az 5-ös osztályon dolgozók vezetéknevét, keresztnevét és fizetését! Általános i műveletek 4.14
Adjuk meg az 5-ös osztályon dolgozók vezetéknevét, keresztnevét és fizetését! π Vnév,Knév,Fizetés (σ Osz=5 (DOLGOZÓ)) Vnév Knév Fizetés Kovács László 390000 Szabó Horváth Mária Erzsébet 520000 494000 Tóth János 325000 Általános i műveletek 4.14
Adjuk meg az 5-ös osztályon dolgozók vezetéknevét, keresztnevét és fizetését! π Vnév,Knév,Fizetés (σ Osz=5 (DOLGOZÓ)) Vnév Knév Fizetés Kovács László 390000 Szabó Horváth Mária Erzsébet 520000 494000 Tóth János 325000 OSZT5_DOLG σ Osz=5 (DOLGOZÓ) EREDMÉNY π Vnév,Knév,Fizetés (OSZT5_DOLG) Általános i műveletek 4.14
Adjuk meg az 5-ös osztályon dolgozók vezetéknevét, keresztnevét és fizetését! π Vnév,Knév,Fizetés (σ Osz=5 (DOLGOZÓ)) Vnév Knév Fizetés Kovács László 390000 Szabó Horváth Mária Erzsébet 520000 494000 Tóth János 325000 OSZT5_DOLG σ Osz=5 (DOLGOZÓ) EREDMÉNY π Vnév,Knév,Fizetés (OSZT5_DOLG) A feladat megoldása SQL-ben: Általános i műveletek SELECT Vnév, Knév, Fizetés FROM DOLGOZÓ WHERE Osz=5; 4.14
Megváltoztathatjuk a relációnk jelölését és átnevezhetjük az attribútumait is értékadás végrehajtásakor: TEMP TEMP σ Osz=5 (DOLGOZÓ) Vnév Knév Szsz Szdátum Lakcím Nem Fizetés Főnök_szsz Osz Kovács László 1 650109 0812 1965. január 9. 4033 Debrecen F 390000 2 551208 2219 5 Szabó Mária 2 551208 2219 1955. december 8. 1097 Budapest N 520000 1 371110 4519 5 Horváth Erzsébet 2 620915 3134 1962. szeptember 15. 1092 Budapest N 494000 2 551208 2219 5 Tóth János 1 720731 2985 1972. július 31. 6726 Szeged F 325000 2 551208 2219 5 R(Vezetéknév, Keresztnév, Fizetés) π Vnév,Knév,Fizetés (TEMP) R Vezetéknév Keresztnév Kovács László Szabó Mária Horváth Erzsébet Tóth János A feladat megoldása SQL-ben: Fizetés 390000 520000 494000 325000 Általános i műveletek SELECT Vnév AS "Vezetéknév", Knév AS "Keresztnév", Fizetés FROM DOLGOZÓ WHERE Osz=5; 4.15
Az átnevezés tulajdonságai Általános alakja ρ S(B1,B 2,...,B n )(R) vagy ρ S (R) vagy ρ (B1,B 2,...,B n )(R) Az S a reláció jelölésére használt új szimbólum, B 1, B 2,..., B n az új attribútumnevek. Az átnevezés unáris művelet. Az eredményül kapott reláció foka és számossága megegyezik R fokával, illetve számosságával. Az eredményül kapott reláció sémája a B 1, B 2,..., B n attribútumokkal meghatározott séma lesz, ha megadtuk őket, megegyezik az R sémájával, ha a B 1, B 2,..., B n attribútumokat nem soroltuk fel. Általános i műveletek 4.16
Uniókompatibilitás Definíció Az R(A 1, A 2,..., A n ) és S(B 1, B 2,..., B n ) relációkat egymással uniókompatibilisnek (típuskompatibilisnek) mondjuk, ha azonos a fokszámuk, és dom(a i ) = dom(b i ) minden 1 i n esetén. Megjegyzés Az uniókompatibilitás tehát azt jelenti, hogy a két relációnak ugyanannyi attribútuma van, és attribútumaik tartományai páronként megegyeznek egymással. Általános i műveletek 4.17
Unió, metszet, különbség Definíció unió: R S metszet: R S különbség: R S A műveletek tulajdonságai: Az unió, a metszet és a különbség bináris műveletek. Az eredményül kapott reláció sémája megállapodás szerint az első (R) reláció sémájával egyezik meg. Az unió és a metszet műveletek kommutatívak: R S = S R és R S = S R. Az unió és a metszet műveletek asszociatívak: R (S T ) = (R S) T és R (S T ) = (R S) T. A különbség művelet általában nem kommutatív: Általános i műveletek R S S R. 4.18
Példák (a) HALLGATÓ OKTATÓ Vn Kn Vnév Knév (b) Vn Kn Kovács László Nagy Zoltán Kovács László Szabó Mária Varga Gábor Szabó Mária Kiss István Kovács László Kiss István Takács József Dudás Péter Takács József Horváth Erzsébet Szabó Mária Horváth Erzsébet Tóth János Tóth János Fazekas Ilona Fazekas Nagy Varga Dudás Ilona Zoltán Gábor Péter (c) Vn Kovács Kn László (d) Vn Kiss Kn Istán (e) Vnév Nagy Knév Zoltán Szabó Mária Takács József Horváth Erzsébet Varga Dudás Gábor Péter Általános Tóth Fazekas János Ilona i műveletek (b) HALLGATÓ OKTATÓ (d) HALLGATÓ OKTATÓ (c) HALLGATÓ OKTATÓ (e) OKTATÓ HALLGATÓ 4.19
Példák (a) HALLGATÓ Vn Kn OKTATÓ Vnév Knév (b) Vn Kn Kovács László Nagy Zoltán Kovács László Szabó Mária Varga Gábor Szabó Mária Kiss István Kovács László Kiss István Takács József Dudás Péter Takács József Horváth Erzsébet Szabó Mária Horváth Erzsébet Tóth János Tóth János Fazekas Ilona Fazekas Ilona Nagy Zoltán Varga Dudás Gábor Péter (c) Vn Kovács Szabó Kn László Mária (d) Vn Kiss Takács Horváth Erzsébet Tóth Fazekas Kn Istán József János Ilona Vnév Nagy Varga Dudás Knév Zoltán Gábor A feladat megoldása SQL-ben: UNION ( ), INTERSECT ( ) és EXCEPT (-) operátorok (e) Péter Általános i műveletek SELECT * FROM HALLGATÓ UNION [ALL] SELECT * FROM OKTATÓ; 4.20
Általános alakja R(A 1, A 2,..., A n ) S(B 1, B 2,..., B m ) Két tetszőleges sémájú reláció között elvégezhető bináris művelet. Az eredményül kapott Q reláció egy n + m fokszámú reláció, melynek sémája: Q(A 1, A 2,..., A n, B 1, B 2,..., B m ). R -rel és S -sel jelölve az eredeti két reláció számosságát, az eredményül kapott reláció számossága: R S = R S. Az eredményül kapott relációban az eredeti két reláció minden rekordjának összes lehetséges kombinációja szerepelni fog. Általános i műveletek 4.21
Általános Általános alakja R i feltétel S Bináris művelet, operandusai R(A 1, A 2,..., A n ) és S(B 1, B 2,..., B m ) sémájú relációk. Az eredményül kapott Q egy n + m fokszámú reláció, melynek sémája: Q(A 1, A 2,..., A n, B 1, B 2,..., B m ). Az eredményül kapott relációban benne lesz az R és az S relációk rekordjainak minden olyan kombinációja, amely kielégíti az i feltételt. Általános i műveletek 4.22
Az i feltétel A join művelet i feltételének általános alakja feltétel AND feltétel AND... AND feltétel, ahol mindegyik feltétel A i ΘB j alakú, A i az R attribútuma, B j az S attribútuma, az A i és B j attribútumok tartománya megegyezik, Θ egyike a { =,, <, >,, } halmaz összehasonlító műveleteinek. Az ilyen i feltétellel megadott általános i műveletet theta join műveletnek is nevezzük. Az általános SQL-ben: SELECT * FROM R, S WHERE i feltétel; Általános i műveletek 4.23
Definíció Azt az általános i műveletet, amelynek i feltételében csak az egyenlőségjel (=) szerepel összehasonlító műveleti jelként, egyenlőségen alapuló nak vagy más szóval equijoin műveletnek nevezzük. Az egyenlőségen alapuló eredményeként kapott reláció minden rekordjában van legalább egy pár azonos érték. A egyenlőségen alapuló SQL-ben: SELECT * FROM R [INNER] JOIN S ON R.ID = S.ID; Amennyiben a két reláció megegyező nevű összekapcsoló attribútumokkal rendelkezik, úgy az SQL-92 szabvány megengedi az alábbi egyenlőségen alapuló t: SELECT * FROM R INNER JOIN S USING(ID); Általános i műveletek 4.24
Az egyenlőségen alapuló eredményeként kapott relációban a rekordokban felbukkanó azonos értékpárok miatt mindig találhatók felesleges értékek. A természetes műveletét az egyenlőségen alapuló műveletéből származtatjuk oly módon, hogy az ott kapott relációból eltávolítjuk az alapjául szolgáló, a hozzájuk tartozó értékek egyenlősége miatt felesleges attribútumok egyikét. Az összekapcsolandó két relációban az alapjául szolgáló attribútumok nevének meg kell egyezniük. (Ez azonban okozhat problémát is ha a műveletet nem átgondoltan használjuk. Ezért lehetőleg tartózkodjunk a használatától.) Általános alakja Általános i műveletek R S 4.25
Az eredményül kapott reláció sémája az eredeti két reláció sémájának az attribútumait tartalmazza, ám az alapjául szolgáló attribútumok közül páronként csak egyet. Az eredményül kapott reláció foka az eredeti két reláció fokszámának az összegénél annyival kevesebb, ahány azonos nevű attribútumot tartalmaznak. Az eredményül kapott reláció számossága 0-tól az eredeti relációk számosságainak szorzatáig terjedhet. A természetes SQL-ben: SELECT * FROM R NATURAL JOIN S; Általános i műveletek 4.26
i műveletek Bebizonyítható, hogy a relációalgebrai operátorok { σ, π,,, } halmaza teljes halmaz, azaz bármelyik másik relációalgebrai művelet kifejezhető ezen halmazbeli operátorokkal végzett műveletek sorozataként. Példa R S (R S) ((R S) (S R)) Példa Általános R feltétel S σ feltétel (R S) i műveletek 4.27
Általános alakja R S Jelöljük Z -vel az R sémáját alkotó attribútumok halmazát, X-szel az S sémáját alkotó attribútumok halmazát! Az osztás művelete akkor hajtható végre, ha X Z. Jelöljük T -vel az eredmény relációt! Legyen Y = Z X! Ekkor Y lesz a T sémáját alkotó attribútumok halmaza. A hányados művelet az alábbi műveletek sorozataként fogható fel: Megvalósítás SQL-ben: T 1 π Y (R) T 2 π Y ((S T 1 ) R) T T 1 T 2 CREATE TABLE T1 AS SELECT Y FROM R; CREATE TABLE T2 AS (SELECT Y FROM S,T1 EXCEPT T1); SELECT * FROM T1 EXCEPT SELECT * FROM T2; Általános i műveletek 4.28
Példák (a) SZSZ_PSZ KOVÁCS_PSZ (b) R S Dszsz Psz Psz A B A 1 650109 0812 1 1 a1 b1 a1 1 650109 0812 2 2 a2 b1 a2 2 620915 3134 3 a3 b1 a3 1 720731 2985 1 a4 b1 1 720731 2985 2 SZSZ a1 b2 T 2 551208 2219 2 Szsz a3 b2 B 2 551208 2219 2 551208 2219 3 10 1 650109 0812 1 720731 2985 a2 a3 b3 b3 b1 b4 2 551208 2219 1 680119 6749 20 30 a4 a1 b3 b4 1 680119 6749 2 690329 1099 10 10 a2 a3 b4 b4 2 690329 1099 30 Általános 1 410620 4902 30 1 410620 4902 20 1 371110 4519 20 i műveletek (a) SZSZ(Szsz) SZSZ_PSZ KOVÁCS_PSZ (b) T R S 4.29
Adjuk meg az összes női dolgozó hozzátartozója nevét a dolgozó nevével együtt! Általános i műveletek 4.30
Adjuk meg az összes női dolgozó hozzátartozója nevét a dolgozó nevével együtt! NŐI_DOLGOZÓK σ Nem= N (DOLGOZÓ) DOLG_NEVEK π Vnév,Knév,Szsz (NŐI_DOLGOZÓK) TÉNY_HTART (DOLG_NEVEK Szsz=Dszsz HOZZÁTARTOZÓ) EREDMÉNY π Vnév,Knév,Hozzátartozó_név (TÉNY_HTART) Általános i műveletek 4.30
Adjuk meg az összes női dolgozó hozzátartozója nevét a dolgozó nevével együtt! NŐI_DOLGOZÓK σ Nem= N (DOLGOZÓ) DOLG_NEVEK π Vnév,Knév,Szsz (NŐI_DOLGOZÓK) TÉNY_HTART (DOLG_NEVEK Szsz=Dszsz HOZZÁTARTOZÓ) EREDMÉNY π Vnév,Knév,Hozzátartozó_név (TÉNY_HTART) Egyetlen kifejezéssel felírva: π Vnév,Knév,Hozzátartozó_név (σ Nem= N ( DOLGOZÓ Szsz=Dszsz HOZZÁTARTOZÓ)) Általános i műveletek 4.30
Adjuk meg az összes női dolgozó hozzátartozója nevét a dolgozó nevével együtt! NŐI_DOLGOZÓK σ Nem= N (DOLGOZÓ) DOLG_NEVEK π Vnév,Knév,Szsz (NŐI_DOLGOZÓK) TÉNY_HTART (DOLG_NEVEK Szsz=Dszsz HOZZÁTARTOZÓ) EREDMÉNY π Vnév,Knév,Hozzátartozó_név (TÉNY_HTART) Egyetlen kifejezéssel felírva: π Vnév,Knév,Hozzátartozó_név (σ Nem= N ( DOLGOZÓ Szsz=Dszsz HOZZÁTARTOZÓ)) A feladat megoldása SQL-ben: SELECT Vnév, Knév, Hozzátartozó_név FROM DOLGOZÓ d, HOZZÁTARTOZÓ h WHERE d.szsz=h.dszsz AND Nem= N ; Általános i műveletek 4.30
Az elemi relációalgebra műveletek során létrejövő relációk NŐI_DOLGOZÓK Vnév Knév Szsz Szdátum Szabó Mária 2 551208 2219 1955. december 8. Lakcím Nem Fizetés Főnök_szsz Osz 1097 Budapest N 520000 1 371110 4519 5 Horváth Erzsébet 2 620915 3134 1962. szeptember 15. 1092 Budapest N 494000 2 551208 2219 5 Fazekas Ilona 2 690329 1099 1969. március 29. 3535 Miskolc N 325000 1 410620 4902 4 DOLG_NEVEK Vnév Szabó Knév Mária Szsz 2 551208 2219 Horváth Erzsébet 2 620915 3134 Fazekas Ilona 2 690329 1099 DOLG_HOZZÁTARTOZÓK Vnév Knév Szsz Dszsz Hozzátartozó_név Nem Szdátum... Szabó Mária 2 551208 2219 2 551208 2219 Anna N 1986. április 5.... Szabó Mária 2 551208 2219 2 551208 2219 Bence F 1983. október 25.... Szabó Mária 2 551208 2219 2 551208 2219 Máté F 1958. május 3.... Szabó Szabó Mária Mária 2 551208 2219 1 410620 4902 Viktória 2 551208 2219 1 650109 0812 Balázs N F 1942. február 28. 1988. január 4....... Szabó Mária 2 551208 2219 1 650109 0812 Anna N 1988. december 30.... Szabó Mária 2 551208 2219 1 650109 0812 Réka N 1967. május 5.... Horváth Erzsébet 2 620915 3134 2 551208 2219 Anna N 1986. április 5.... Horváth Erzsébet 2 620915 3134 2 551208 2219 Bence F 1983. október 25.... Horváth Erzsébet 2 620915 3134 2 551208 2219 Máté F 1958. május 3.... Horváth Erzsébet 2 620915 3134 1 410620 4902 Viktória N 1942. február 28.... Horváth Erzsébet 2 620915 3134 1 650109 0812 Balázs F 1988. január 4.... Horváth Erzsébet 2 620915 3134 1 650109 0812 Anna N 1988. december 30.... Horváth Erzsébet 2 620915 3134 1 650109 0812 Réka N 1967. május 5.... Fazekas Ilona 2 690329 1099 2 551208 2219 Anna N 1986. április 5.... Fazekas Ilona 2 690329 1099 2 551208 2219 Bence F 1983. október 25.... Fazekas Ilona 2 690329 1099 2 551208 2219 Máté F 1958. május 3.... Fazekas Ilona 2 690329 1099 1 410620 4902 Viktória N 1942. február 28.... Fazekas Ilona 2 690329 1099 1 650109 0812 Balázs F 1988. január 4.... Fazekas Ilona 2 690329 1099 1 650109 0812 Anna N 1988. december 30.... Fazekas Ilona 2 690329 1099 1 650109 0812 Réka N 1967. május 5.... TÉNYLEGES_HOZZÁTARTOZÓK Vnév Knév Szsz Dszsz Hozzátartozó_név Nem Szdátum... Szabó Mária 2 551208 2219 2 551208 2219 Anna N 1986. április 5.... Szabó Mária 2 551208 2219 2 551208 2219 Bence F 1983. október 25.... Szabó Mária 2 551208 2219 2 551208 2219 Máté F 1958. május 3.... EREDMÉNY Általános i műveletek Vnév Szabó Szabó Szabó Knév Mária Mária Mária Hozzátartozó_név Anna Bence Máté 4.31
Adjuk meg az összes olyan dolgozó nevét és lakcímét, aki a Kutatás osztályon dolgozik! Általános i műveletek 4.32
Adjuk meg az összes olyan dolgozó nevét és lakcímét, aki a Kutatás osztályon dolgozik! KUTATÁS_OSZT σ Onév= Kutatás (OSZTÁLY) KUTATÁS_DOLG (KUTATÁS_OSZT Oszám=Osz DOLGOZÓ) EREDMÉNY π Vnév,Knév,Lakcím (KUTATÁS_DOLG) Általános i műveletek 4.32
Adjuk meg az összes olyan dolgozó nevét és lakcímét, aki a Kutatás osztályon dolgozik! KUTATÁS_OSZT σ Onév= Kutatás (OSZTÁLY) KUTATÁS_DOLG (KUTATÁS_OSZT Oszám=Osz DOLGOZÓ) EREDMÉNY π Vnév,Knév,Lakcím (KUTATÁS_DOLG) Egyetlen kifejezéssel felírva: π Vnév,Knév,Lakcím (σ Onév= Kutatás (OSZTÁLY Oszám=Osz DOLGOZÓ)) Ahogy a példán látható, az és a szelekció műveletek sorrendje felcserélhető, de akár az általános helyett természetes t is használhatnánk egy átnevezést követően. Általános i műveletek 4.32
Adjuk meg az összes olyan dolgozó nevét és lakcímét, aki a Kutatás osztályon dolgozik! KUTATÁS_OSZT σ Onév= Kutatás (OSZTÁLY) KUTATÁS_DOLG (KUTATÁS_OSZT Oszám=Osz DOLGOZÓ) EREDMÉNY π Vnév,Knév,Lakcím (KUTATÁS_DOLG) Egyetlen kifejezéssel felírva: π Vnév,Knév,Lakcím (σ Onév= Kutatás (OSZTÁLY Oszám=Osz DOLGOZÓ)) Ahogy a példán látható, az és a szelekció műveletek sorrendje felcserélhető, de akár az általános helyett természetes t is használhatnánk egy átnevezést követően. A feladat megoldása SQL-ben: SELECT Vnév, Knév, Lakcím FROM OSZTÁLY o, DOLGOZÓ d WHERE o.oszám=d.osz AND Onév= Kutatás ; Általános i műveletek 4.32
Minden kecskeméti projekt esetén adjuk meg a projekt számát, a projektet irányító osztály számát, valamint az osztályvezető vezetéknevét, lakcímét és születési dátumát! Általános i műveletek 4.33
Minden kecskeméti projekt esetén adjuk meg a projekt számát, a projektet irányító osztály számát, valamint az osztályvezető vezetéknevét, lakcímét és születési dátumát! KECSKEMÉTI_PROJ σ Phelyszín= Kecskemét (PROJEKT) IR_OSZT (KECSKEMÉTI_PROJ Osz=Oszám OSZTÁLY) PROJ_OSZT_VEZ (IR_OSZT Vez_szsz=Szsz DOLGOZÓ) EREDMÉNY π Pszám,Oszám,Vnév,Lakcím,Szdátum (PROJ_OSZT_VEZ) Általános i műveletek 4.33
Minden kecskeméti projekt esetén adjuk meg a projekt számát, a projektet irányító osztály számát, valamint az osztályvezető vezetéknevét, lakcímét és születési dátumát! KECSKEMÉTI_PROJ σ Phelyszín= Kecskemét (PROJEKT) IR_OSZT (KECSKEMÉTI_PROJ Osz=Oszám OSZTÁLY) PROJ_OSZT_VEZ (IR_OSZT Vez_szsz=Szsz DOLGOZÓ) EREDMÉNY π Pszám,Oszám,Vnév,Lakcím,Szdátum (PROJ_OSZT_VEZ) A feladat megoldását egyetlen kifejezéssel is felírhatjuk mely alapján a feladat megoldása SQL-ben: SELECT Pszám, Oszám, Vnév, Lakcím, Szdátum FROM PROJEKT p, OSZTÁLY o, DOLGOZÓ d WHERE o.oszám=d.osz AND o.vez_szsz=d.szsz AND Phelyszín= Kecskemét ; Általános i műveletek 4.33
Adjuk meg azon dolgozók vezeték- és keresztnevét, akik minden olyan projekten dolgoznak, amit az 5-ös osztály irányít! Általános i műveletek 4.34
Adjuk meg azon dolgozók vezeték- és keresztnevét, akik minden olyan projekten dolgoznak, amit az 5-ös osztály irányít! OSZT5_PROJ(Psz) π Pszám (σ Osz=5 (PROJEKT)) DOLG_PROJ(Szsz, Psz) π Dszsz,Psz (DOLGOZIK_RAJTA) E_DOLG_SZSZ DOLG_PROJ OSZT5_PROJ EREDMÉNY π Vnév,Knév (E_DOLG_SZSZ DOLGOZÓ) Általános i műveletek 4.34
Adjuk meg azon projektek projektszámait, amelyekhez köze van Kovács vezetéknevű dolgozónak, akár a projekten munkálkodó dolgozóként, akár a projektet irányító osztály vezetőjeként! Általános i műveletek 4.35
Adjuk meg azon projektek projektszámait, amelyekhez köze van Kovács vezetéknevű dolgozónak, akár a projekten munkálkodó dolgozóként, akár a projektet irányító osztály vezetőjeként! KOVÁCSOK(Dszsz) π Szsz (σ Vnév= Kovács (DOLGOZÓ)) KOVÁCS_MUNKÁS_PROJ π Psz (DOLGOZIK_RAJTA KOVÁCSOK) VEZETŐK π Vnév,Oszám (DOLGOZÓ Szsz=Vez_szsz OSZTÁLY) KOVÁCS_IR_OSZT(Osz) π Oszám (σ Vnév= Kovács (VEZETŐK)) KOVÁCS_IR_PROJ π Pszám (KOVÁCS_IR_OSZT PROJEKT) EREDMÉNY (KOVÁCS_MUNKÁS_PROJ KOVÁCS_IR_PROJ) Általános i műveletek 4.35
Adjuk meg azon projektek projektszámait, amelyekhez köze van Kovács vezetéknevű dolgozónak, akár a projekten munkálkodó dolgozóként, akár a projektet irányító osztály vezetőjeként! KOVÁCSOK(Dszsz) π Szsz (σ Vnév= Kovács (DOLGOZÓ)) KOVÁCS_MUNKÁS_PROJ π Psz (DOLGOZIK_RAJTA KOVÁCSOK) VEZETŐK π Vnév,Oszám (DOLGOZÓ Szsz=Vez_szsz OSZTÁLY) KOVÁCS_IR_OSZT(Osz) π Oszám (σ Vnév= Kovács (VEZETŐK)) KOVÁCS_IR_PROJ π Pszám (KOVÁCS_IR_OSZT PROJEKT) EREDMÉNY (KOVÁCS_MUNKÁS_PROJ KOVÁCS_IR_PROJ) Egyetlen kifejezéssel felírva: π Psz (DOLGOZIK_RAJTA Dszsz=Szsz (π Szsz (σ Vnév= Kovács (DOLGOZÓ))) π Psz ((π Oszám (σ Vnév= Kovács (π Vnév,Oszám (DOLGOZÓ))) Szsz=Vez_szsz OSZTÁLY)) Oszám=Osz PROJEKT) Általános i műveletek 4.35
Adjuk meg azon projektek projektszámait, amelyekhez köze van Kovács vezetéknevű dolgozónak, akár a projekten munkálkodó dolgozóként, akár a projektet irányító osztály vezetőjeként! Általános i műveletek 4.36
Adjuk meg azon projektek projektszámait, amelyekhez köze van Kovács vezetéknevű dolgozónak, akár a projekten munkálkodó dolgozóként, akár a projektet irányító osztály vezetőjeként! A feladat megoldása SQL-ben: SELECT Pszám FROM DOLGOZÓ d, DOLGOZIK_RAJTA dr WHERE dr.dszsz=d.szsz AND d.vnév= Kovács UNION SELECT Pszám FROM DOLGOZÓ d, OSZTÁLY o, PROJEKT p WHERE d.szsz=o.vez_szsz AND o.oszám=p.osz AND d.vnév= Kovács ; Általános i műveletek 4.36
Adjuk meg azon projektek projektszámait, amelyekhez köze van Kovács vezetéknevű dolgozónak, akár a projekten munkálkodó dolgozóként, akár a projektet irányító osztály vezetőjeként! A feladat megoldása SQL-ben: SELECT Pszám FROM DOLGOZÓ d, DOLGOZIK_RAJTA dr WHERE dr.dszsz=d.szsz AND d.vnév= Kovács UNION SELECT Pszám FROM DOLGOZÓ d, OSZTÁLY o, PROJEKT p WHERE d.szsz=o.vez_szsz AND o.oszám=p.osz AND d.vnév= Kovács ; Beágyazott SELECT használatával hatékonyabb (nagyobb számosságú relációk esetén gyorsabb) megoldást kapunk: SELECT Pszám FROM DOLGOZIK_RAJTA dr INNER JOIN (SELECT Szsz FROM DOLGOZÓ d WHERE Vnév= Kovács ) ksz ON dr.dszsz=ksz.szsz UNION SELECT Pszám FROM PROJEKT p INNER JOIN (SELECT Oszám FROM OSZTÁLY o INNER JOIN (SELECT Szsz DOLGOZÓ d WHERE Vnév= Kovács ) ksz ON ksz.szsz=o.vez_szsz) osz ON osz.oszám=p.osz; Általános i műveletek 4.36
Adjuk meg azoknak a dolgozóknak a vezeték- és keresztnevét, akiknek nincs egyetlen hozzátartozójuk sem! Általános i műveletek 4.37
Adjuk meg azoknak a dolgozóknak a vezeték- és keresztnevét, akiknek nincs egyetlen hozzátartozójuk sem! ÖSSZES_DOLG π Szsz (DOLGOZÓ) DOLG_HTVAL(Szsz) π Dszsz (HOZZÁTARTOZÓ) DOLG_HT_NÉLKÜL (ÖSSZES_DOLG DOLG_HTVAL) EREDMÉNY π Vnév,Knév (DOLG_HT_NÉLKÜL DOLGOZÓ) Általános i műveletek 4.37
Adjuk meg azoknak a dolgozóknak a vezeték- és keresztnevét, akiknek nincs egyetlen hozzátartozójuk sem! ÖSSZES_DOLG π Szsz (DOLGOZÓ) DOLG_HTVAL(Szsz) π Dszsz (HOZZÁTARTOZÓ) DOLG_HT_NÉLKÜL (ÖSSZES_DOLG DOLG_HTVAL) EREDMÉNY π Vnév,Knév (DOLG_HT_NÉLKÜL DOLGOZÓ) Egyetlen kifejezéssel felírva: π Vnév,Knév ((π Szsz (DOLGOZÓ) ρ Szsz (π Dszsz (HOZZÁTARTOZÓ))) DOLGOZÓ) A példában a Dszsz attribútum Szsz-re történő átnevezése elhagyható. Általános i műveletek 4.37
Adjuk meg azoknak a dolgozóknak a vezeték- és keresztnevét, akiknek nincs egyetlen hozzátartozójuk sem! ÖSSZES_DOLG π Szsz (DOLGOZÓ) DOLG_HTVAL(Szsz) π Dszsz (HOZZÁTARTOZÓ) DOLG_HT_NÉLKÜL (ÖSSZES_DOLG DOLG_HTVAL) EREDMÉNY π Vnév,Knév (DOLG_HT_NÉLKÜL DOLGOZÓ) Egyetlen kifejezéssel felírva: π Vnév,Knév ((π Szsz (DOLGOZÓ) ρ Szsz (π Dszsz (HOZZÁTARTOZÓ))) DOLGOZÓ) A példában a Dszsz attribútum Szsz-re történő átnevezése elhagyható. A feladat megoldása SQL-ben: SELECT Vnév, Knév, Szsz FROM DOLGOZÓ EXCEPT SELECT Vnév, Knév, Szsz FROM DOLGOZÓ d, HOZZÁTARTOZÓ h WHERE d.szsz=h.dszsz; Általános i műveletek 4.37
Adjuk meg azoknak az osztályvezetőknek a nevét, akiknek legalább egy hozzátartozójuk van! Általános i műveletek 4.38
Adjuk meg azoknak az osztályvezetőknek a nevét, akiknek legalább egy hozzátartozójuk van! VEZETŐK(Szsz) π Vez_szsz (OSZTÁLY) DOLG_HTVAL(Szsz) π Dszsz (HOZZÁTARTOZÓ) VEZETŐ_HTVAL (VEZETŐK DOLG_HTVAL) EREDMÉNY π Vnév,Knév (VEZETŐ_HTVAL DOLGOZÓ) Általános i műveletek 4.38
Adjuk meg azoknak az osztályvezetőknek a nevét, akiknek legalább egy hozzátartozójuk van! VEZETŐK(Szsz) π Vez_szsz (OSZTÁLY) DOLG_HTVAL(Szsz) π Dszsz (HOZZÁTARTOZÓ) VEZETŐ_HTVAL (VEZETŐK DOLG_HTVAL) EREDMÉNY π Vnév,Knév (VEZETŐ_HTVAL DOLGOZÓ) A feladat megoldása SQL-ben: SELECT d.vnév, d.knév FROM DOLGOZÓ d INNER JOIN (SELECT Vez_szsz FROM OSZTÁLY INTERSECT SELECT Dszsz AS Vez_szsz FROM HOZZÁTARTOZÓ) sz ON d.szsz=sz.vez_szsz; Általános i műveletek 4.38