2.GYAKORLAT (ADATBÁZISOK)
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.
- Ez a környezet nem támogatja
az alkérdéseket (az később lesz az
SQL-ben).,
vannak
különbségek
az SQL szintaxisban,
olvassák el a
használatról a Help-et.
- Relációs
algebrai alapok: Volt az 1.gyak:
Vetítés,
kiválasztás és 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ó
(alapműv), halmazműv.különbség (alapműv),
és metszet
- 2.gyak. új anyag: binér
műveletek: direkt
szorzat, selfjoin (ehhez rho-átnevezés)
Köv.gyak. folytatjuk
még a binér műveletekekkel: az
összekapcsolások lesznek.
--- 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: egy
táblára vonatkozó
lekérdezések
és a halmazműveletek
- Emlékeztető, lásd 1.gyak.1f-6f.
Adjunk
más megoldást is a 3.f. és a
4.feldatatra:
1. Kik szeretik az almát?
2. Kik nem szeretik az almát? (de valami
mást igen)
3. Kik szeretik vagy az almát vagy a
körtét?
4. Kik szeretik az almát is és a
körtét is?
5. Kik azok, akik szeretik az almát, de nem
szeretik a körtét?
6. Kik szeretik vagy az almát vagy a
körtét, de csak az egyiket?
- Mai anyag: Rel.alg.2.rész:
Tábla átnevezése,
önmagával vett direkt szorzata
- Feladatok direkt szorzatra
(táblákkal,
összesítő függvények
nélkül)
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.:
Hányados
(minden
kifejezése) relációs
algebrában
11. Kik szeretnek minden gyümölcsöt?
(Kik szeretik az összes olyan
gyümölcsöt, amit valaki szeret?)
12. Kik azok, akik legalább azokat a
gyümölcsöket szeretik, mint
Micimackó?
13. Kik azok, akik legfeljebb azokat a
gyümölcsöket szeretik, mint
Micimackó?
14. Kik azok, akik pontosan azokat a
gyümölcsöket szeretik, mint
Micimackó?
II.RÉSZ:
SQL
egytáblás lekérdezések,
vetítés és
kiválasztás műveletei
- 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
--- Gyakorlat
példáihoz a táblák
létrehozása Oracle SQL-ben: createDolgozo.txt
Ma csak a
Dolgozo
táblát használjuk (egy
táblára
vonatkozó lekérdezések)
Osztaly (oazon,
onev,
telephely)
Dolgozo (dkod,
dnev, foglalkozas,
fonoke, belepes, fizetes, jutalek, oazon)
Fiz_Kategoria
(kategoria,
also, felso)
FELADATOK: Egy
tábla
lekérdezése (oszlopok
vetítése és sorok
kiválasztása)
- SELECT.1.rész:
select lista from tábla where feltétel;
- 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)