I.RÉSZ: RELÁCIÓS ADATMODELL, RELÁCIÓS ALGEBRAI LEKÉRDEZÉSEK
- Ullman-Widom Tankönyv 2.4. fejezete: UW_24_RelAlg.pdf (alap relációs algebra)
- Alapok: Relációs algebrához relax környezet táblákkal: dbis uibk github io/relax
- A fenti linken elérhető DB (ELTE-AB1) táblákat is használjuk a lekérdezésekhez,
de magunk is létrehozhatunk táblákat: Relax_Szeret.txt; Relax_Dolg_Oszt.txt
- A relációs algebrai műveletek eredménye halmaz, vagyis ez az implementáció
minden művelet elvégzése után automatikusan megszünteti az ismétlődéseket.
A relációs algebrai fület használjuk, ez a szintaxis érzékeny a kis-nagybetűre,
algebrában a szűrőfeltételben nem használható alkérdés (az csak SQL-ben).
- Volt az 1.gyak: egy táblára vonatkozó lekérdezések és a halmazműveletek
Unér műveletek: pi-vetítés, sigma-kiválasztás, rho-átnevezés (táblák v. oszlopok)
Halmazműveletek: unió (union), halmazműv.különbség (-), metszet (intersect)
- 2.gyak. új anyag: binér műveletek: direkt szorzat (cross join), összekapcsolások,
selfjoin (egy tábla önmagával vett direkt szorzata, ehhez rho-tábla átnevezése),
átgondolni maximum kifejezése táblaműveletekkel, függvények használata nélkül,
köv.héten folytatjuk több tábla természetes összekapcsolása, összekapcsolások.
--- Példa: Szeret (nev, gyumolcs) sémájú tábla létrehozása: Relax_Szeret.txt
Szeret (nev, gyumolcs) tábla sok-sok kapcsolatot ír le, azaz egy vevő
több gyümölcsöt is szerethet és egy gyümölcsöt több vevő is szerethet.

- Volt: Rel.alg.1.rész: lásd 1.gyak.1f-6f. Adjunk más megoldást a 4.feladatra!
4. Kik szeretik az almát is és a körtét is? Hogyan tudunk relációs algebrában
sorpárokat összehasonlítani? (selfjoin: tábla önmagával vett direkt szorzata)
- Mai anyag: Rel.alg.2.rész: Tábla átnevezése, önmagával vett direkt szorzata.
Az alap relációs algebrában nem használhatóak függvények, összesítések!
7. Kik szeretnek legalább kétféle gyümölcsöt? (direkt szorzattal)
8. Kik szeretnek legalább háromféle gyümölcsöt?
9. Kik szeretnek legfeljebb kétféle gyümölcsöt?
10. Kik szeretnek pontosan kétféle gyümölcsöt?
- Folyt.köv.: Maximum/minimum kifejezése alap relációs algebrai kifejezéssel:
Tankönyvből 2.4.1. Termékek-feladatok.pdf 2.4.3. Csatahajók-feladatok.pdf
További feladatok "minden" kifejezése (Kik szeretnek minden gyümölcsöt?)
II.RÉSZ: SQL egytáblás lekérdezések, vetítés és kiválasztás műveletei
- Gyakorlatok példáihoz a táblák létrehozása Oracle SQL-ben
>> createSzeret -- 1.példa: szeret(nev, gyumolcs)
>> createDolgozo -- 2.példa: osztaly, dolgozo, fiz_kategoria
- 2.példa E/K diagramja: Entitások: Dolgozó, Osztály; Kapcsolatok: dolg, fonok

- Az E/K modellt átalakítjuk relációs modellre:
-- 1a.) lépés: Entitások átírása relációsémákra
Osztaly (oazon, onev, telephely)
Dolgozo (dkod, dnev, foglalkozas, belepes, fizetes, jutalek)
-- 1b.) lépés: Kapcsolatok átírása relációsémákra
dolg(dkod, oazon)
fonok(dkod, fonoke)
-- 2.lépés Táblák összevonása után a végső adatbázis séma:
Osztaly (oazon, onev, telephely)
Dolgozo (dkod, dnev, foglalkozas, fonoke, belepes, fizetes, jutalek, oazon)
FELADATOK: Egy tábla lekérdezése (oszlopok vetítése és sorok kiválasztása)
- SELECT.1.rész: select lista from T where feltétel <=> pi lista sigma feltétel (T)
- Rel.algebra vetítés művelete (SQL-ben multihalmaz -> rel.alg.-ban halmaz!)
1. Adjuk meg a dolgozók között előforduló foglalkozások neveit! (select lista)
2. Adjuk meg a dolgozók között előforduló foglalkozások neveit (DISTINCT is),
az eredmény halmaz legyen, vagyis minden foglalkozást csak egyszer írjuk ki!
3. Adjuk meg a dolgozók kódját, nevét és az éves fizetését, amikor kifejezést
használunk az oszlopnevek helyén, ott adjunk új oszlopnevet ("éves fizetés")
- Rel.algebra kiválasztás művelete és az SQL SELECT utasítás WHERE feltétele
- NULL hiányzó érték, lásd SQL Lang.Ref. Nulls, 3 értékű logika, lásd igazságtábla
4. Kik azok a dolgozók, akiknek a fizetése > 2800? (kiválasztás: elemi feltételek)
5. Adjuk meg azokat a dolgozókat, akiknek a foglalkozása 'MANAGER' (kar.tip.érték)
6. Kik azok a dolgozók, akiknek a fizetése 2000 és 4500 között van? (dkod, dnev)
(1.mo: where-ben: intervallum); (HF 2.mo: rel.alg.kiválasztás: összetett feltétel)
7. Kik azok a dolgozók, akik a 10-es vagy a 20-as osztályon dolgoznak?
(1.mo: where-ben: in feltétel); (HF 2.mo: rel.alg.kiválasztás: összetett feltétel)
8. Adjuk meg azon dolgozókat, akik nevének második betűje 'A' (where: like)
9. Kik azok a dolgozók, akiknek a jutaléka nagyobb, mint 600?
10. Kik azok a dolgozók, akiknek a jutaléka kisebb-vagy-egyenlő, mint 600?
11. Kik azok a dolgozók, akiknek a jutaléka ismeretlen/hiányzó adat. (NULL felt)
12. Kik azok a dolgozók, akiknek a jutaléka ismert (vagyis nem NULL)
- Az eredménytábla sorainak rendezése (SELECT utasítás ORDER BY záradéka)
(Ez itt nem alap relációs algebrai művelet, de az SQL lekérdezésekben hasznos)
13. Listázzuk ki a dolgozókat foglalkozásonként, azon belül nevenként rendezve.
14. Listázzuk ki a dolgozókat fizetés szerint csökkenőleg rendezve.
15. Rendezés segítségével az első N sor elérése Oracle 12.2 adatbázisban,
lásd Row Limiting Examples.html (forrás: Oracle Database SQL Lang. Ref. html)
Összefoglalás: 2.gyak. II. SQL SELECT utasítás egytáblás lekérdezések
- Oracle segédanyagok: SQL02_select_lista.pdf; SQL03_where_feltetel.pdf
Az Oracle demo lekérdezésekhez elég szinonimát használni: createHRsyn.txt