2.GYAKORLAT (ADATBÁZISOK)
I.RÉSZ: FOLYT.
RELÁCIÓS ALGEBRA FELADATSOR
/szeret tábla/
Relációs
sémája: szeret (nev, gyumolcs)
Feladatok
rel.algebrai
lekérdezésekre (alapműveletekkel)
Relációs
algebrához relax környezet
táblákkal: dbis
uibk github io/relax
-- Ismétlés: 1.gyak:
Kezdetek: Vetítés,
kiválasztás és halmazműveletek
Unér műveletek:
pi-vetítés,
sigma-kiválasztás,
rho-átnevezés
Halmazműveletek: unió, halmazműveleti
különbség, metszet
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?
-- Folyt. 2.gyak: Szorzás jellegű
műveletek
7. Kik szeretnek legalább
kétféle gyümölcsöt?
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?
11. Legyen SZM(n, gy, m) vagyis a korábbi szeret(nev,
gyumolcs) rel.sémát
egészítsük ki egy 3.oszloppal: m -
minősítés (1 és 10
közötti egész) és
összesítő
függvények nélkül, vagyis alap
relációs algebrában fejezzük
ki,
hogy kik adták a
legmagasabb minősítéseket!
II.RÉSZ:
SQL SELECT utasítás select lista és
where feltétel /dolgozo, osztaly/
Témakör:
Az
SQL SELECT
utasítás
SELECT lés WHERE záradéka
>> Oracle segédanyagok
példái: FROM EMPLOYEES helyett HR.EMPLOYEES, stb
SQL00_bevezetes.pdf;
SQL01_select_lista.pdf; SQL02_where_feltetel.pdf
>> Táblák
előkészítése az SQL-ben: Dolgozo,
Osztaly táblák: createDolg
Dolgozo (dkod,
dnev, foglalkozas,
fonoke, belepes, fizetes, jutalek, oazon)
Osztaly (oazon, onev,
telephely)
Fiz_Kategoria (kategoria,
also, felso)
--- 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 azh SQL SELECT utasítás WHERE
feltétele
4. Kik azok a dolgozók, akiknek a
fizetése
> 2800? (kiválasztás, elemi
feltétel)
5. Írjuk ki a 'KING' nevű dolgozó(k)
adatait! (kar.tip.konstans megadása 'KING')
6. Kik azok a dolgozók, akiknek a
fizetése 2000 és 4500 között
van?
(1.mo:
kiválasztás, összetett
feltétel; 2.mo: where-ben: intervallum)
7. Kik azok a dolgozók, akik a
10-es vagy a 20-as osztályon dolgoznak?
(1.mo:
kiválasztás, összetett
feltétel; 2.mo: where-ben: in értékek)
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,
nincs kitöltve)
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)
KIEG.: Neumann csoportnak: Sorfüggvények
használata SQL lekérdezésekben
Többieknek: Később az I.ZH után, a II.ZH-ig fokozatosan több
gyakorlaton nézzük
Témakör:
Az
SQL SELECT
utasítás
SELECT és WHERE záradékaiban szereplő
attribútumok különböző
típusaira kifejezések és a
sorfüggvények
használhatók.
I. Oracle
beépített
adattípusok: OracleTipusok.html
(forrás: Oracle
Data Types)
II. Oracle
beépített
függvények: SQL03_fuggvenyek.pdf
(lásd Oracle
Functions)
--- Numerikus függvények
1. Adjuk meg
dolgozók nevét és az
éves fizetését, akik a 10-es
osztályon
dolgoznak.
2. Adjuk meg azon dolgozókat, akik
fizetése osztható 15-tel.
3. Adjuk meg a dolgozók fizetéseinek
négyzetgyökét két tizedesre,
és ennek
egészrészét.
--- Karakterkezelő függvények,
szövegkeresés, szöveg "grafikus"
megjelenítése
4. Adjuk meg azon dolgozókat, akik
nevének második betűje 'A'.
5. Adjuk meg azon dolgozókat, akik
nevében van legalább két 'L' betű.
(Többféle
megoldást is keressünk
a lekérdezésre, LIKE, INSTR
függvény)
6. Adjuk meg a dolgozók nevének
utolsó három betűjét.
7. Adjuk meg azon dolgozókat, akik
nevének utolsó előtti betűje 'T'.
+1.6.példa (Kende-Nagy) Listázza ki a
dolgozók nevét és
fizetését egy
oszlopban,
legyen a két oszlop
között az
elvásztójel a kettőspont, és a
fizetésük szerint
csökkenően írjuk
ki, valamint
jelenítsük meg
a fizetést grafikusan úgy,
hogy
a fizetést 1000 Ft-ra
kerekítve, minden 1000
Ft-ot egy '#' jel jelöl.
(például 5000
-> #####, 800 -> #) (LPAD és RPAD
függvények)
--- Konverziós függvények és
dátumkezelő függvények
8. Kik azok a dolgozók, akik '1982.01.01.'
után léptek be?
(Aktuális
dátumformátumot lásd -> SYSDATE
fv.)
9. Adjuk meg, hogy hány hete dolgozik a
cégnél ADAMS és milyen
hónapban
és milyen nap
(hétfő, kedd, stb. magyar/angol) lépett be
(dátum formátumok)
10. Adjuk meg azokat a dolgozókat, akik keddi napon
léptek be.
(Vigyázzunk a visszaadott
értékkel!)
11.*Adjuk meg, hogy hány nap volt KING és JONES
belépési dátuma
között?
(Tegyük fel, hogy pontosan
egy KING és pontosan egy JONES nevű dolgozó
van)
[* Itt
kipróbálhatjuk, hogy
skalár helyett
skalárérétékű (SFW)
lekérdezés is lehet!]
12. Adjuk meg, hogy milyen napra esett KING
belépési dátuma
hónapjának utolsó napja.
13. Adjuk meg, hogy milyen napra esett KING
belépési dátuma
hónapjának első napja.
14. Számoljuk ki, egészekre
kerekítve, hogy a mai nap
hány naposak vagyunk,
azt is, hogy hány
hetesek,
továbbá hány hónaposak
vagyunk (DUAL tábla)
--- Nullértéket kezelő
függvények és speciális
függvények
15. Adjuk meg a dolgozók éves
jövedelmét, ahol a havi jövedelem a
fizetés
és jutalék
összege, ahol nincs jutalék megadva,ott a 0
helyettesítő
értékkel
számoljunk (NVL függvény
alkalmazása).
+1.2.példa (Kende-Nagy) Adjuk meg a
dolgozók
nevét, foglalkozását és
jutalékát
oly módon, hogy akinek
nincs
jutaléke, annál azt írja ki, hogy "Nem
jár
jutalék".
(DECODE
függvénnyel és CASE
kifejezéssel is)
+1.8.példa (Kende-Nagy) Listázzuk ki
azoknak a
dolgozóknak a
nevét, fizetését,
jutalékát,
és a jutalék/fizetés
arányát két tizedesjegy
pontosságig, akiknek
a foglalkozása
eladó
(SALESMAN) vagy hivatalnok (CLERK), fizetés szerint
csökkenően rendezve.
>>
Önálló
gyakorlás: Oracle
Példatár Feladatok.pdf
1.fejezet 1.1.-1.18. feladatok
[Megj.: 1.14.feladatban
foglalkozás szerint rendezve, és
nem-"csoportosítva",
ugyanis a
csoportosítást -
összesítések és group by
később lesz,
itt: order by]