2.HETI GYAKORLAT (LEVELEZŐ INFO TANÁR - ADATBÁZISOK)
1.rész: SQL SELECT és RELÁCIÓS ALGEBRA FELADATSOR /szeret tábla/
Táblák előkészítése az SQL-ben: szeret;
Sémája: szeret (nev, gyumolcs)
Feladatok
rel.algebrai
lekérdezésekre (alapműveletekkel)
--
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?
--
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?
2.rész: Többtáblás lekérdezések /Dolgozo, Osztaly, Fiz_Kategoria/
Táblák előkészítése az SQL-ben: createDolg (az 1.héten ez már volt)
Dolgozo (dkod, dnev, foglalkozas,
fonoke, belepes, fizetes, jutalek, oazon)
Osztaly (oazon, onev, telephely)
Fiz_Kategoria (kategoria, also, felso)
1. Kik azok a dolgozók, akiknek nincs
főnöke?
2. Kik azok a dolgozók, akiknek a főnöke KING?
3. Adjuk meg azoknak a főnököknek a nevét, akiknek a foglalkozása nem 'MANAGER'.
4. Adjuk meg azokat a dolgozókat, akik többet keresnek a főnöküknél.
5. Kik azok a dolgozók, akik főnökének a főnöke KING?
6. Kik azok a dolgozók, akik osztályának telephelye DALLAS vagy CHICAGO?
7. Kik azok a dolgozók, akik osztályának telephelye nem DALLAS és nem CHICAGO?
8. Adjuk meg azoknak a nevét, akiknek a fizetése > 2000 vagy a CHICAGO-i osztályon dolgoznak.
9. Melyik osztálynak nincs dolgozója?
10. Adjuk meg azokat a dolgozókat, akiknek van 2000-nél nagyobb fizetésű beosztottja.
11. Adjuk meg azokat a dolgozókat, akiknek nincs 2000-nél nagyobb fizetésű beosztottja.
12. Adjuk meg azokat a telephelyeket, ahol van elemző (ANALYST) foglalkozású dolgozó.
13. Adjuk meg azokat a telephelyeket, ahol nincs elemző (ANALYST) foglalkozású dolgozó.
14. Adjuk meg azon osztályok nevét
és
telephelyét, amelyeknek van 1-es
fizetési
kategóriájú
dolgozója.
15. Adjuk meg azon osztályok nevét
és
telephelyét, amelyeknek nincs 1-es
fizetési
kategóriájú dolgozója.
>> Önálló
gyakorlás: Oracle
Példatár Feladatok.pdf
3.fejezet feladataiból azok a típusok,
amelyeket relációs algebrai
kifejezésekkel is fel tudunk írni (SELECT lista =
vetítés),
(FROM lista = direkt szorzat,
összekapcsolások), (WHERE felt = kiválasztás,
szűrés)
és halmazműveletek
segítségével. A 3.fejezetben vannak olyan
pédák, feladatok is,
amit később veszünk, pl. hierarchikus
lekérdezések, alkérdések nem lesznek a
zh-án!
3.rész: Egy
táblára vonatkozó csoportosítás,
összesítő függvények
Témakör: Oracle
gépes gyakorlat,
az SQL SELECT
utasítás GROUP BY, HAVING
és ORDER BY
záradékai,
csoportosítás és
összesítő
függvények használata
> Oracle Példák: SQL04_csoportok.pdf
- összesítés, group by, having
záradékok
1. Mennyi a legnagyobb fizetés a
dolgozók között? (max) és a legkisebb? (min)
2. Mennyi a dolgozók
összfizetése? (sum)
3. Adjuk meg, hogy hány
különböző foglalkozás fordul elő
a dolgozók között!
(count, count(distinct foglalkozas))
4. Mennyi a 10-es (és majd a 20-as, ill. 30-as) osztályon az
átlagfizetés? (avg)
5. Adjuk meg az átlagfizetést az egyes osztályokon! (csoportosítás: group by oazon)
6. Adjuk meg az átlagfizetést és azt, hogy hányan dolgoznak az egyes osztályokon,
de csak azokra ahol legalább ketten dolgoznak
7. Adjuk meg az átlagfizetést és azt, hogy hányan dolgoznak az egyes osztályokon,
de csak azokra ahol legalább ketten dolgoznak. Csak azoknak a dolgozóknak
számoljuk bele a fizetését, akiknek a fizetése nagyobb mint 1000
8. Adjuk meg azokra az
osztályokra az
átlagfizetést, ahol ez nagyobb mint 2000.
9. Adjuk meg osztályonként az
ott dolgozó hivatalnokok (FOGLALKOZAS='CLERK')
átlagfizetését, de csak
azokon az osztályokon, ahol legalább
két hivatalnok dolgozik!
10. Adjuk meg a legmagasabb
osztályonkénti
átlagfizetést!
>> Önálló
gyakorlás: Oracle
Példatár Feladatok.pdf
2.fejezet 2.1-2.24 feladatok
4.rész:
Több táblára vonatkozó
csoportosítás, összesítő
függvények
Összefoglaló az összekapcsolásokról (inner és outer join-ok)
-- Direkt szorzat: SELECT * FROM dolgozo,osztaly;
-- Joinok:
SELECT * FROM dolgozo NATURAL JOIN osztaly;
SELECT * FROM dolgozo JOIN osztaly ON dolgozo.oazon=osztaly.oazon;
-- Theta-join:
SELECT * FROM dolgozo JOIN fiz_kategoria
ON dolgozo.fizetes BETWEEN fiz_kategoria.also and fiz_kategoria.felso;
-- Külső joinok:
SELECT * FROM dolgozo LEFT JOIN osztaly ON dolgozo.oazon=osztaly.oazon;
SELECT * FROM dolgozo RIGHT JOIN osztaly ON dolgozo.oazon=osztaly.oazon;
SELECT * FROM dolgozo FULL JOIN osztaly ON dolgozo.oazon=osztaly.oazon;
1. Adjuk meg osztályonként az osztályok
nevét, telephelyét és az
átlagfizetést.
2. Adjuk meg osztályonként az osztályok
nevét, telephelyét és az
átlagfizetést,
ahol az átlagfizetés nagyobb mint 2000.
3. Adjuk meg az átlagfizetést és telephelyet azokon az osztályokon, ahol legalább
ketten dolgoznak.
4. Adjuk meg azokat a fizetési kategóriákat, amelybe pontosan 3 dolgozó fizetése esik.
5. Adjuk meg azokat a fizetési kategóriákat, amelyekbe eső dolgozók mindannyian
ugyanazon az osztályon dolgoznak.
6. Adjuk meg azon osztályok nevét és telephelyét, amelyeknek van 1-es fizetési
kategóriájú dolgozója.
7. Adjuk meg azon osztályok nevét és telephelyét, amelyeknek legalább 2 fő
1-es fizetésű kategóriájú dolgozója van.
8. Adjuk meg azokat a fizetési
kategóriákat,
amelyekbe beleesik legalább három
olyan dolgozónak a fizetése, akinek nincs beosztottja.
9. Adjuk meg azokat a foglalkozásokat, amelyek
csak egyetlen osztályon fordulnak elő.
10. Adjuk meg osztályonként a
dolgozók
összfizetését az osztály
nevét megjelenítve
ONEV, SUM(FIZETES) formában,
és azok
az osztályok is jelenjenek meg ahol
nem dolgozik senki, ott az
összfizetés 0
legyen. Valamint ha van olyan dolgozó,
akinek nincs megadva, hogy mely
osztályon
dolgozik, azokat a dolgozókat
egy 'FIKTIV' nevű osztályon
gyűjtsük
össze. Minden osztályt a nevével plusz
ezt a 'FIKTIV' osztált is
jelenítsük meg az itt dolgozók
összfizetésével
együtt.