05. ADATBÁZISOK (LEV.INFOTANÁR)
Lekérdezések
kifejezése relációs
algebrában
>> 2.ea.pdf (1-17.o.)
- 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 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.
- Vannak különbségek
az SQL szintaxisban,
olvassák el a
használatról a Help-et.
FELADATSOR /szeret tábla/ rel.algebrai
lekérdezések (alapműveletekkel)
>> Relációs sémája: szeret (nev, gyumolcs)
A relációs algebrai
feladatokat nézzük meg párhuzamosan az SQL-ben is,
írjuk át SELECT utasításra, lásd lentebb SQL gyak.példái: createSzeret.txt
-- 1.rész: 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?
-- 2.rész: Szorzás jellegű műveletek (átnevezés, direkt szorzat önmagával)
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?
Lekérdezések
kifejezése SQL-ben
>> 2.ea.pdf (18-52.o.)
-- 1.rész: Halmazműveletek SQL-ben: UNION [ALL],
INTERSECT, MINUS
>> Oracle DB SQL
példák: SQL04_set_operators.pdf;
>> Oracle DB SQL Lang.Ref.
>> 4.Op. >> Set Operators (halmazműv.)
(A fenti demo
lekérdezésekhez volt: createHRsyn.txt szinonimák)
>> A korábbi relációs algebrai
feladatokat írjuk át SELECT utasításra!
>> Gyakorlat
példái: createSzeret.txt
séma: szeret(név,
gyümölcs)
Feladatok: SQL lekérdezések
és a halmazműveletek használata:
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?
-- 2.rész: FROM lista többtáblás
lekérdezések: direkt
szorzat, összekapcsolások
>> Gyakorlat
példái: Dolgozo, Osztaly, Fiz_Kategoria
táblák: createDolg.txt
Dolgozo (dkod,
dnev, foglalkozas,
fonoke, belepes, fizetes, jutalek, oazon)
Osztaly (oazon, onev,
telephely)
Fiz_Kategoria (kategoria,
also, felso)
>> Szorzások,
összekapcsolások a FROM listán
(rövid összefoglaló)
-- Direkt szorzat: SELECT * FROM dolgozo, osztaly;
-- Joinok:
SELECT * FROM dolgozo NATURAL JOIN
osztaly;
SELECT * FROM
dolgozo, osztaly WHERE dolgozo.oazon=osztaly.oazon;
SELECT * FROM dolgozo JOIN osztaly ON
dolgozo.oazon=osztaly.oazon;
-- Theta-join:
SELECT * FROM dolgozo JOIN
fiz_kategoria ON fizetes BETWEEN also and felso;
SELECT * FROM dolgozo JOIN
fiz_kategoria ON fizetes >= also and fizetes <=
felso;
-- folyt. külső
joinok (lent), továbbá az
alkérdéseknél lesz szemijoin, antijoin (később).
Feladatok:
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. Kik azok a dolgozók, akiknek a
fizetése > 2000 vagy a CHICAGO-ban dolgoznak.
9. Melyik osztálynak nincs
dolgozója?
10. Kik azok a dolgozók, akiknek van
2000-nél nagyobb fizetésű beosztottja.
11. Kik azok a dolgozók, akiknek nincs
2000-nél nagyobb fizetésű beosztottja.
12. Mely telephelyeken van elemző (ANALYST)
foglalkozású dolgozó.
13. Mely telephelyeken 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.
-- 3.rész: FROM lista többtáblás
lekérdezések: összekapcsolások -- 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;
>> Oracle DB SQL
példák: SQL07_osszekapcsolas.pdf
>> Oracle DB SQL Lang.Ref
>> Joins (Self Joins, Inner Joins, Outer Joins)
Feladatok:
1. 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.