INFORMÁCIÓS
RENDSZEREK / ADATBÁZIS-KEZELÉS ELTE, 2016/2017-es tanév II.félévében [2017.febr] |
|
EA+GY: Péntek 8:30-11:00 (3 óra: 3 x 45' + 15' szünet) 2-710 PC10 labor
Konzultáció: Péntek 11:15-12:00 vagy 2-507 szoba vagy 2-710 PC10 labor
Az előadás és gyakorlat kötelező, katalógus van, 4 hiányzás lehetséges.
>> Ellenőrzésre jelenléti ív (név-> 4kar-kód) hallgato/[jelszóval] [itt: .pdf]
A kurzus célja: Információs rendszerek fejlesztése, adatbázisok tervezése
és az adatbázis-kezelő rendszerek (pl. Oracle) használata a gyakorlatban.
További információ: ELTE IK informatika specializáció interdiszciplináris képzés
Követelmények: két (8:30-10:00-ig 90'perces) dolgozat, beadandó feladat
-- ZH: 7.GY (2017.03.31.) Lekérdezések: SQL SELECT és relációs algebra
-- Kötelező beadandó feladatok: Saját adatbázis tervezése, E/K diagram és
rel.sématervezés, +megvalósítása SQL-ben. SQL haladó témák, PL/SQL
-- JavZH: 12.GY (2017.05.19.) és a kötelező beadandó feladatok bemutatása
-- GyakUV: 2017.05.26. és 2017.06.02. Péntek 10:15-11:45 2.520 MI labor
Tankönyv: Jeffrey D. Ullman, Jennifer Widom: Adatbázisrendszerek Alapvetés
Második átdolgozott kiadás, Panem, 2009. (a kék könyv)
top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | «
1.GY: 2017.02.17. --- SQL egytáblás lekérdezések, egyszerű SELECT
Előadás: 1.előadás.pdf (1.-43.-ig volt) --- ami egytáblás lekérdezésekhez kell
> Tk.1.fej. (később) Adatbázis-kezelő rendszerre milyen elvárásaink vannak?
> Tk.2.1. Strukturált és félig-strukturált adatmodellek áttekintése
> Tk.2.2. A relációs modell alapjai, sémák, sorok, előfordulás (folyt.köv.)
> Tk.2.3. Egyszerű relációsémák definiálása SQL-ben (folyt.köv.)
> Tk.2.4. Relációs algebra egytáblás műveletei: vetítés és kiválasztás
> Tk.6.1. Egyszerű egytáblás lekérdezések az SQL-ben, select utasítás
select, from és where záradékai, nullérték, műveletek nullértékekkel,
az ismeretlen igazságérték (U), háromértékű (T, F, U) logika.
Gépes gyak: Oracle adatbázisok elérése, SQL Developer használata
> Az órai feladatokhoz előkészítés: TÁBLÁK LÉTREHOZÁSÁRA scriptek:
>> szeret -- Hozzuk létre SZERET(NEV, GYUMOLCS) sémájú táblát
>> createDolg -- OSZTALY, DOLGOZO, FIZ_KATEGORIA táblák létrehozása
FELADATSOR-1/A (egytáblás lekérdezések, egyszerű SELECT utasítás)
1. Milyen azonosítójú osztályon dolgoznak a dolgozók? (kiterjesztett vetítés)
2. Adjuk meg a dolgozók között előforduló foglalkozások neveit (vetítés,
az eredmény halmaz legyen, vagyis minden foglalkozást csak egyszer írjuk ki!)
3. Kik azok a dolgozók, akiknek a fizetése > 2800? (kiválasztás, elemi feltétel)
4. 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)
5. 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)
6. Adjuk meg azon dolgozókat, akik nevének második betűje 'A' (where: like)
7. Kik azok a dolgozók, akiknek a jutaléka nagyobb, mint 600?
8. Kik azok a dolgozók, akiknek a jutaléka kisebb-vagy-egyenlő, mint 600?
9. Kik azok a dolgozók, akiknek a jutaléka ismeretlen (hiányzó adat, nincs kitöltve)
10. Kik azok a dolgozók, akiknek a jutaléka ismert (vagyis nem NULL)
11. Listázzuk ki a dolgozókat foglalkozásonként, azon belül nevenként rendezve.
12. Listázzuk ki a dolgozókat fizetés szerint csökkenőleg rendezve.
Önálló feladat: Az SQL Developer otthoni használata, adatbázisok elérése
Áttekintés: A fenti feladatok megoldásához demo példák a HR séma alapján
>> HR séma a dokumentációban: Sample Schemas - Schema Diagram: HR
>> Lekérdezésekhez: createHRsyn (elég a szinonimákat használni)
>> 1.lecke - vetítés kiterjesztése, kifejezések
>> 2.lecke - kiválasztás, kiválasztott sorok rendezése
top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | «
2.GY: 2017.02.24. --- Relációs adatbázis-séma tervezés, E/K diagram
>>> 1.előadás.pdf (folyt.44.-tól) --- ami az egytáblás lekérdezésekhez kell
>>> 2.előadás.pdf (1.-30.-ig volt) --- ami a többtáblás lekérdezésekhez kell
Elkezdjük az adatmodellezést, E/K diagramot és átírását relációkra,
így el lehet kezdeni a saját feladat specifikációját és a modellezését!
> Tk.4.fej. Relációs adatmodellek tervezése, E/K modell alapjai (folyt.köv.)
> Tk.2.2. (folyt.) Relációs modell, kulcsok és külső kulcsok, hivatkozási épség
> Tk.2.3. (folyt.) Tk.7.1. Relációsémák és megszorítások definiálása SQL-ben
Önálló feladat: Saját feladat specifikációja (e-mailben csak a témaválasztást).
Az adatmodellezéshez a terveket elég papíron felrajzolni a gyakorlatra elhozni,
E/K diagram átírása relációs sémákra, táblák létrehozása, adatok felvitele.
top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | «
3.GY: 2017.03.03. --- Relációs algebra. SQL többtáblás lekérdezések
>>> 2.előadás.pdf (folyt.31.-től) --- ami a többtáblás lekérdezésekhez kell
> Tk.2.4. Egy algebrai lekérdező nyelv, relációs algebráról teljes áttekintés
> Tk.6.2. Több relációra vonatkozó lekérdezések az SQL-ben, szemantika
>>> 3.előadás.pdf (1.-39.-ig volt) Alkérdések. Példák: Rel.alg. és SQL SELECT
> Tk.6.3. Alkérdések az SQL lekérdezések WHERE záradékában (folyt.köv.)
> Tk.2.4. Példák: Relációs algebrai feladatok (Tk.2.4.1.feladat) Termékek
Relációs algebrai kifejezések, kifejezőfák átírása SQL lekérdezésekre
> Tankönyv feladatai: Termékek-feladatok.pdf -- Ehhez: create Termékek,
Folyt.köv. órán megbeszéljük (1.-39.-ig c.)-ig volt, d.)-től folyt.köv.)
FELADATSOR-2/A (több táblás lekérdezések, összekapcsolások)
1. Kik azok a dolgozók, akiknek nincs főnöke?
2. Kik azok a dolgozók, akiknek a főnöke KING?
3. Kik azok a dolgozók, akik főnökének a főnöke KING?
4. Adjuk meg azokat a dolgozókat, akik többet keresnek a főnöküknél.
5. Adjuk meg azoknak a főnököknek a nevét, akiknek a foglalkozása nem 'MANAGER'.
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 fizetése > 200 vagy CHICAGO-i osztályon dolgoznak.
9. Melyik osztálynak nincs dolgozója?
Önálló feladat: Saját feladat E/K diagram pontosítása, átírása relációs sémákra,
táblák létrehozása: séma Ri(A1:típus1, ..., Rn:típusn) + (kulcs-, stb) megszorítások,
majd táblánként 10-15 demo adatsor felvitele, lehet fiktív, nem kell, hogy valódi adat
legyen, illetve lehet internetről letöltött .csv fájlból importálni is (sqldeveloper-ben).
Ebben az esetben, kérem, hogy a leírásban adja meg az adatok forrásának a linkjét.
top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | «
4.GY: 2017.03.10. --- Példák: relációs algebra és SQL SELECT utasítás
>>> 3.előadás.pdf (folyt.40.-től d.)-től) --- Relációs algebra és SQL SELECT
> Tankönyv feladatai: Termékek-feladatok.pdf -- Ehhez: create Termékek
>>> 4.előadás.pdf (1.-től 15.-ig) Oracle gyakorlat: sorfüggvények használata
Gépes gyak: SELECT és WHERE záradékokban attribútum helyett kifejezések
> Oracle Példák: -- lekérdezésekhez elég szinonimákat venni: createHRsyn
>> 3.lecke - sorfüggvények használata a SELECT és WHERE záradékban
FELADATSOR-1/B (egytáblás lekérdezések 1GY FELADATSOR-1/A folytatása)
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 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)
3. Adjuk meg a dolgozók fizetéseinek négyzetgyökét és 3-mal vett maradékát.
4. Kik azok a dolgozók, akik '1982.01.01.' után léptek be?
5. 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)
6. 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)
7. 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).
> Segédlet: Examples/Példák: SQL Language Reference >> 5 Functions:
Sorfüggvények: pl. Karakteres függvények: SUBSTR, RPAD, ..., INSTR, ...
pl. Dátum függvények: MONTHS_BETWEEN, ..., pl. Konverziós: TO_DATE, ...
pl. Null érték kezelése, helyettesítő érték megadása: NVL, COALESCE, ...
Figyelem! COALESCE példában: FROM product_information
mivel ez a tábla nem az HR, hanem OE sémában szerepel, ezért
itt ki kell írni a táblatulajdonost: FROM OE.product_information
(ugyanis csak a HR owner tábláihoz hoztuk létre a szinonimákat).
Önálló feladat: Saját feladathoz lekérdezések gyártása: SELECT utasításban
használjuk a karakteres, numerikus, dátum, konverziós és az NVL függvényeket.
top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | «
5.GY: 2017.03.17. --- Kiterjesztett relációs algebra, teljes SELECT utasítás
>>> 4.előadás.pdf (16.-tól végig) Kiterjesztett rel.algebra műveletei
> Tk.5.1. Relációs algebra kiterjesztése multihalmazokra (az SQL-hez)
> Tk.5.2. Kiterjesztett műveletek, csoportosítás, külső összekapcsolások
> Tk.6.4. Összesítő függvények és csoportosítás, GROUP BY és HAVING
> Tk.6.3. (folyt.) Összekapcsolások az SQL-ben, külső összekapcsolások
I.rész: Oracle gyakorlat, az SQL SELECT utasítás GROUP BY, HAVING záradékok
és ORDER BY záradékai, csoportosítás és összesítő függvények használata
> Oracle Példák: -- lekérdezésekhez elég szinonimákat venni: createHRsyn
>> 1/4.lecke - csoportosítás, group by és having záradékok
FELADATSOR-1/C (egytáblás lekérdezések 4GY FELADATSOR-1/B folytatása)
1. Mennyi a minimális, illetve a maximális fizetés a dolgozók között?
2. Mennyi a dolgozók összfizetése?
3. Adjuk meg, hogy hány különböző foglalkozás fordul elo a dolgozók között!
4. Mennyi a 20-as osztályon az átlagfizetés?
5. Adjuk meg osztályonként az átlagfizetést! (OAZON, ATL_FIZ)
6. Adjuk meg azokra az osztályokra az átlagfizetést, ahol ez nagyobb mint 2000.
7. Melyek azok az osztályok, ahol legalább hárman dolgoznak és mennyi az itt
dolgozók fizetéseinek az összege?
8. Adjuk meg osztályonként a minimális fizetést, de csak azokat az osztályokét, ahol
a minimális fizetés nagyobb, mint a 30-as osztályon dolgozók minimális fizetése.
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!
II.rész: Oracle gyakorlat, az SQL SELECT utasítás GROUP BY, HAVING,
Több táblára vonatkozó lekérdések, többféle megoldás joinnal, alkérdéssel
Összekapcsolások és alkérdések használatával többféle módon oldjuk meg,
de az alkérdéseket most még csak a WHERE és HAVING záradékokban
használjunk és kerüljük a FROM utáni alkérdéseket (ún. inline nézeteket),
a köv.héten nézzük meg a nézettáblák és az inline nézetek használatát!
> Oracle Példák: -- lekérdezésekhez elég szinonimákat venni: createHRsyn
>> 1/5.lecke (összekapcsolások többféle szintaxisa, a külső join is)
>> 1/7.lecke (halmazműveletek halmazokon illetve multihalmazokon)
FELADATSOR-2/B (folyt. több táblás lekérdezések, öszekapcsolások, alkérdések)
1. Adjuk meg osztályonként a telephelyet és az átlagfizetést.
2. Kik azok és milyen munkakörben dolgoznak a legnagyobb fizetésű dolgozók?
3. Adjuk meg, hogy mely dolgozók fizetése jobb, mint a saját osztályán (vagyis
azon az osztályon, ahol dolgozik az ott) dolgozók átlagfizetése!
4. Adjuk meg, hogy mely dolgozók átlagjövedelme jobb, mint a saját osztályán
dolgozók átlagjövedelme, ahol a 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).
5. Adjuk meg, hogy az egyes osztályokon hány ember dolgozik (azt is, ahol 0=senki).
--- külső összekapcsolással:
6. 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ályt is jelenítsük meg az itt dolgozók összfizetésével együtt.
Önálló feladat: Saját feladathoz lekérdezések gyártása, többtáblás lekérdezések,
táblák kapcsolása, csoportosítás és összesítő-függvények használata a SELECT-ben.
top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | «
6.GY: 2017.03.24. --- Alkérdések az SQL SELECT lekérdezésekben
>>> 5.előadás.pdf (1-től 23.-ig) --- Alkérdések; SQL DML utasítások
> Tk.6.3. Alkérdések az SQL lekérdezések FROM záradékában, inline nézet
> Tk.6.5. SQL DML: Táblák tartalmának módosítása: insert, delete, update
-- Köv.héten: I.ZH, és utána 2 hét múlva folytatjuk ezt az előadást a 24.o-tól:
(Tk.1.fej. Az adatbázis-kezelő rendszerek (DBMS) felépítése, alapfogalmak)
I.rész: Több táblára vonatkozó lekérdések, alkérdések használata.
> Oracle Példák: -- lekérdezésekhez elég szinonimákat venni: createHRsyn
>> 1/6.lecke(alkérdések-skalár értékű, ill. skalárokból álló halmaz értékű) és
>> 2/6.lecke (6-15-ig)(táblákat eredményező alkérdések, korelált alkérdések)
-- Köv.héten: I.ZH, és utána 2 hét múlva folytatjuk 6-16-tól WITH utasítás később!
FELADATSOR-2/C (folyt. több táblás lekérdezések, öszekapcsolások, alkérdések)
>> TÁBLÁK LÉTREHOZÁSÁRA a szkript: createDolg.txt --- Forrás: cr_dept_emp.sql
1. Adjuk meg azon osztályok nevét és telephelyét, amelyeknek van 1-es fizetési kategóriájú dolgozója.
2. Adjuk meg azon osztályok nevét és telephelyét, amelyeknek nincs 1-es fizetési kategóriájú dolgozója.
3. Adjuk meg azon osztályok nevét és telephelyét, amelyeknek két 1-es kategóriájú dolgozója van.
4. Adjuk meg azokat a foglalkozásokat, amelyek csak egyetlen osztályon fordulnak elő,
és adjuk meg hozzájuk azt az osztályt is, ahol van ilyen foglalkozású dolgozó.
5. Adjuk meg azon dolgozók nevét, fizetését, jutalékát, adósávját és fizetendő adóját, akik
nevében van S-betű. Adósávok 1000 alatt 0%, 1000 és 2000 között 20%, 2000 és 3000 között
30%, 3000 fölött 35%. Az adót a teljes jvedelemre (sal+comm) a megadott kulccsal kell fizetni.
6. Adjuk meg osztályonként a legnagyobb fizetésu dolgozó(ka)t, és a fizetést.
7. Adjuk meg azokat a fizetési kategóriákat, amelyekbe beleesik legalább 3 olyan dolgozónak
a fizetése, akinek nincs beosztottja.
8. Adjuk meg a legrosszabbul kereső főnök fizetését, és fizetési kategóriáját.
9. Adjuk meg, hogy (kerekítve) hány hónapja dolgoznak a cégnél azok a dolgozók, akiknek a DALLAS-i telephelyű osztályon a legnagyobb a fizetésük.
10. Adjuk meg azokat a foglalkozásokat, amelyek csak egyetlen osztályon fordulnak elő,
és adjuk meg hozzájuk azt az osztályt is, ahol van ilyen foglalkozású dolgozó.
11. Adjuk meg azoknak a dolgozóknak a nevét és fizetését, akik fizetése a 10-es és 20-as osztályok
átlagfizetése közé esik. (Nem tudjuk, hogy melyik átlag a nagyobb!)
II.rész: SQL DML adatkezelő utasításai (insert, delete, update)
-- Adatok karbantartása adattáblán illetve nézeten keresztül, és megfigyelni
ezek egymásra hatását: Hogyan hat a nézetek adatainak módosítása az
adattáblára, illetve az adatok módosítása hogyan jelenik meg a nézetben?
-- Eközben mentési pontokat adjunk meg, ahova folyton visszagörgetjük:
A tranzakciókezelés alapjai, érvényesítés: COMMIT,
és visszagörgetés: ROLLBACK és mentési pontok: SAVEPOINT
FELADATSOR-4/A (DML utasítások: DELETE, INSERT és UPDATE)
Előkészítés: Ezekhez a DML feladatokhoz ámenetileg most megszorítások
(mint például hivatkozási épség) megadása nélkül hozzuk létre a táblákat:
>> Módosított Dolgozo és Osztaly táblák létrehozása (no constraints)
>> Órai gyakorló feladatok .txt-ben is itt: DML_feladatok.txt
DELETE
1. Töröljük azokat a dolgozókat, akiknek jutaléka NULL.
2. Töröljük azokat a dolgozókat, akiknek a belépési dátuma 1982 előtti.
3. Töröljük azokat a dolgozókat, akik osztályának telephelye DALLAS.
4. Töröljük azokat a dolgozókat, akiknek a fizetése kisebb, mint az átlagfizetés.
5. Töröljük ki azokat az osztályokat, akiknek van olyan dolgozója, aki a 2-es
fizetési kategóriába esik (lásd FizFokozat táblát, adjuk meg azon osztályok
nevét, amelyeknek van olyan dolgozója, aki a 2-es fizetési kategóriába esik)
6. Töröljük ki azon osztályokat, amelyeknek 2 olyan dolgozója van, aki a 2-es
fizetési kategóriába esik.
INSERT
7. Vigyünk fel egy 'Kovacs' nevű új dolgozót a 10-es osztályra a következő
értékekkel: dkod=1, dnev='Kovacs', oazon=10, belépés=aktuális dátum,
fizetés=a 10-es osztály átlagfizetése. A többi oszop legyen NULL.
8. Több sor felvitele: Hozzunk létre egy UjOsztaly nevű táblát, amelynek
attribútumai megegyeznek az Osztály tábla oszlopaival, plusz van még egy
numerikus típusú Letszam nevű attribútuma. Ebbe az UjOsztaly táblába az
insert utasítás 2. alakjával (alkérdéssel ) vigyünk fel új sorokat az osztály és
dolgozó táblák aktuális tartalmának felhasználásával minden osztály adatát
kiegészítve az adott osztályon dolgozók létszámával. Azok az osztályok is
jelenjenek meg ahol nem dolgozik senki, ott a létszám 0 legyen. Továbbá
ha vannak olyan dolgozók, akiknek nincs (nem ismert) az osztályuk, azok
létszámát egy oazon=0, onev= 'FIKTIV' és telephely='ISMERETLEN'
adatokkal rendelkező sorba írjuk be.
UPDATE
9. Növeljük meg a 20-as osztályon a dolgozók fizetését 20%-kal.
10. Növeljük meg azok fizetését 500-zal, akik jutaléka NULL vagy
a fizetésük kisebb az átlagnál.
11. Növeljük meg mindenkinek a jutalékát a jelenlegi maximális jutalékkal.
12. Módosítsuk 'Loser'-re a legrosszabbul kereső dolgozó nevét.
13. Növeljük meg azoknak a dolgozóknak a jutalékát 3000-rel, akiknek
legalább 2 közvetlen beosztottjuk van.
Az ismeretlen (NULL) jutalékot vegyük úgy, mintha 0 lenne.
14. Növeljük meg azoknak a dolgozóknak a fizetését, akiknek van olyan
beosztottja, aki minimális fizetéssel rendelkezik.
15. Növeljük meg a nem főnökök fizetését a saját osztályuk átlagfizetésével.
Önálló feladat: Saját feladathoz a táblákat létrehozó és adatokkal feltöltő
szkripteket, továbbá a saját táblákra vonatkozó lekérdezéseket e-mailben
(sima e-mailben csak szövegesen, nem csatolva) küldje be március 30-ig.
top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | «
7.GY: 2017.03.31. --- I.ZH: SQL DML, SELECT és relációs algebra
> I.ZH témaköre:
(Ullman-Widom: Adatbázisrendszerek. Alapvetés. Tankönyv)
2.4. Lekérdezések alap relációs algebrában
6.1-6.4. Lekérdezések SQL SELECT utasítással
6.5. SQL DML (INSERT, DELETE, UPDATE)
-- -- --
> A ZH papíros részénél nem használható semmilyen segédlet, segédeszköz,
24 pont: hat darab 4 pontos kérdés illetve egyszerű típusfeladat megoldása.
> A gépes feladatokhoz használható Oracle doku [medusa] és sqldeveloper
24 pont: hat darab 4 pontos SQL SELECT lekérdezési feladat, lásd lent
> Az aramis (vagy ha nem működik, akkor az ullman) adatbázisok elérhetősége:
HOST: aramis.inf.elte.hu PORT: 1521 SEVICE: eszakigrid97
HOST: ullman.inf.elte.hu PORT: 1521 SEVICE: ullman
- A gépes feladatok megoldását és outputját (ha túl hosszú, akkor csak az elejét)
másolja be egy .txt szövegfájlba, a neve vezeteknev_neptun.txt (ékezet nélkül)
egyszerű .txt szövegfájl legyen!
- Ha az SQL Developerben nem az (1) Execute Statement, hanem (2) Run Scriptként
futtassa a lekérdezésekezet, akkor az outputot a Script Outputból Ctrl-C Ctrl-V-vel
be tudja másolni a beküldendő szövegfájlba. A szövegfájl első sora egy megjegyzés
legyen, amely tartalmazza a hallgató teljes nevét, neptun kódját.
- Kérem, hogy ebben a beküldendő szövegfájlban a feladatlapon megadott kérdések
sorrendjét kövesse, és megjegyzésekkel világosan különítse el, hogy melyik rész
melyik feladathoz tartozik. Adja meg az egyes lépéseket is, amelyek elvezették a
megoldáshoz, vagyis közbülső lépéseket is másolja át a beadandó szövegfájlba,
legyen világosan tagolva az egyes feladatnál mi a munkamenet, mi a megoldás!
- Beküldése: vezeteknev_neptun.txt szövegfájlt áthúzni ide: \\nas2.inf.elte.hu\zh\sila
> A táblák létrehozása és feltöltése (itt most egy kicsit más) adatokkal: create_table_zh
a feladatok megoldását az adatoktól függetlenül a táblák sémái alapján kell megadni:
OSZTALY(OAZON,ONEV,TELEPHELY)
DOLGOZO(DKOD,DNEV,FOGLALKOZAS,FONOKE,BELEPES,FIZETES,JUTALEK,OAZON)
> Feladatok: Az SQL-ben SELECT utasítással fejezzük ki az alábbi lekérdezéseket:
a) Kik azok a dolgozók, akik főnökének a főnöke KING?
b) Adjuk meg azoknak a főnököknek a nevét, akiknek nincs 2000-nél nagyobb
fizetésű beosztottja.
c) Adjuk meg, hogy az egyes osztályokon mennyi a fizetések összege, akikről
nem tudjuk, hogy melyik osztályon dolgoznak, azokat ’Ismeretlen’ osztálynév
alatt összesítsük, és csak azokat az osztályokat jelenítsük meg, ahol
legalább két fő dolgozik.
d) Adjuk meg, hogy az egyes telephelyeken hány ember dolgozik, de csak azokat
a telephelyeket adjuk meg, ahol a minimális fizetés nagyobb 1000-nél vagy ahol
nem dolgozik senki (ekkor 0-t írjunk ki)!
e) Törölje a legjobban fizetett Dallas-i dolgozót (vagy dolgozókat, ha többen is
vannak max-fizetésen)!
f) Módosítsa a dolgozó táblát, azon dolgozóknak, akinek legalább 2 beosztottja van,
emelje meg 1000-el a jutalékát (ahol nem volt megadva jutalék, azt állítsa 1000-re).
top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | «
8.GY: 2017.04.07. --- Adatbázis fogalmak, DBMS felépítése, feladatai
>>> 5.előadás.pdf (24.o-tól az adatbázis-kezelés alapfogalmak)
> Tk.1.fej. Az adatbázis-kezelő rendszerek (DBMS) felépítése, alapfogalmak
-- -- --
>>> Oracle gyakorlati példák, lásd még 6.gyak.: SQL DML feladatok
> DML-utasításokhoz saját táblák létrehozása: createHRtables
>> 1/8.lecke SQL DML-utasítások (insert, update, delete) és a tranzakciók
FELADATSOR-4/A (DML utasítások: DELETE, INSERT és UPDATE)
Előkészítés: Ezekhez a DML feladatokhoz ámenetileg most megszorítások
(mint például hivatkozási épség) megadása nélkül hozzuk létre a táblákat:
> Módosított Dolgozo és Osztaly táblák létrehozása (no constraints)
> Órai gyakorló feladatok .txt-ben is itt: DML_feladatok.txt
> Mindeközben mentési pontokat adjunk meg ahova folyton visszagörgetjük.
Tranzakciókezelés alapjai, mint például a mentési pontok: SAVEPOINT és
a visszagörgetés: ROLLBACK, ill. az érvényesítés/véglegesítés: COMMIT
-- -- --
>>> Az I.ZH tapasztalatainak elemzése, lásd még 7.gyak: ZH feladatok
> A táblák létrehozása és feltöltése (kicsit más) adatokkal: create_table_zh
> A gépes zh feladatok megoldását megjegyzésekkel, lásd itt: [.txt]
> Ellenőrzésre a zh eredmények, részpontok jelszóval és név-nélküli kóddal
a jelenléti ív (név-> 4kar-kód) hallgato/[jelszóval] [itt: .pdf] második lapján
-- -- -- TAVASZI SZÜNET: 2017.04.12 (szerdától) - 04.18 (keddig) -- -- --
top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | «
9.GY: 2017.04.21. --- Tervezés: E/K diagram; Megvalósítás: SQL DDL
>>> Tervezési feladatok: E/K diagram felrajzolása, átalakítása relációkká
> Ullman/Tk. 4.fejezete E/K modell prog.inf.ea: E/K modell.pdf
-- Tk.4.1.-4.4. Az egyed-kapcsolat (E/K) modell elemei
E/K diagramok felrajzolása: Modellezési feladatok - E/K diagram
-- Tk.4.5.-4.6. E/K diagram átírása relációs modellé
E/K diagramok átírása relációkká: E/K_pl1.pdf és E/K_pl2.pdf
További feladatok, lásd EKpelda.pdf (ábra: EKpelda.png)
> További irodalom (elektronikusan is elérhető magyar nyelvű könyvek)
--- MEK könyvtár: Halassy Béla: Adatmodellezés, elmélet és gyakorlat
--- MEK könyvtár: Halassy Béla: Az adatbázistervezés alapjai és titkai
-- -- --
>>> 7.előadás.pdf --- SQL DDL: táblák, megszorítások, nézettáblák
> Tk.7.1.-7.5. SQL DDL Táblák, megszorítások és triggerek
> Tk.8.1-8.2. Nézettáblák használata a lekérdezésekben
-- -- -- --
>>> Oracle gyakorlati példák: SQL DDL. Megszorítások önálló megszorítások
> Oracle PéldákSQL DDL (create table) Táblák és megszorítások létrehozása
>> 1/9.lecke SQL DDL (táblák és megszorítások létrehozása: create table)
>> 2/1.lecke SQL DDL (folyt.megszorítások létrehozása, sémaobjektumok)
> További segédletek: create table, típusok, megszorítások (.txt)
> Feladatok: Táblák és megszorítások (constraints) létrehozása.
SQL DDL (create table, create view) Táblák és megszorítások létrehozása
-- Táblák és megszorítások (constraints) létrehozása.
-- Egyszerű és összetett nézettáblák létrehozása.
> További segédletek: create table, típusok, megszorítások (.txt)
-- -- -- --
FELADATSOR-4/B -- SQL DDL: CREATE | ALTER | DROP ... utasítások
1.) Írjon szkript programot, amely új adattáblát hoz létre az emp és dept táblákból
myemp és mydept néven. Ha már léteznek ilyen nevű táblák, akkor előbb
azokat törölje. Véglegesítse az adattáblákat (commit).
A létrehozott táblákat lássa el az alábbi megszorításokkal:
- Legyen az empno elsődleges kulcs a myemp táblában, és
- legyen a deptno elsődleges kulcs a mydept táblában és idegen kulcs a myemp
táblában, amely a hivatkozási épséget biztosítja oly módon, hogy egy osztály
törlése esetén törlődjenek ennek az osztálynak a dolgozói is.
- Egy új dolgozó csak az adott 700 és 7000 USD értéktartománybeli fizetést
kaphasson.
2.) Ellenőrizze ezeket a megszorításokat sikeres (megfelelő rekord felvitele)
és sikertelen (hibás rekord) adatbeviteli kísérletekkel, majd állítsa vissza
az eredeti táblatartalmakat (rollback). Véglegesítse az adattáblákat (commit).
3.) Egyszerű és összetett nézettáblák létrehozása, melyik módosítható és melyik nem?
4.) Adatok karbantartása adattáblán illetve nézeten keresztül, és megfigyelni ezek
egymásra hatását: Hogyan hat a nézetek adatainak módosítása az adattáblára,
és a másik irányban, az adatok módosítása hogyan jelenik meg a nézetben?
5.) Ellenőrizze ezeket a megszorításokat sikeres (megfelelő rekord felvitele)
és sikertelen (hibás rekord) adatbeviteli kísérletekkel, majd állítsa vissza az
eredeti táblatartalmakat (rollback). Véglegesítse az adattáblákat (commit).
-- -- -- --
FELADATSOR-4/C -- Táblák, nézetek és munkatáblák (WITH utasítás)
> Feladatok: Adatok karbantartása adattáblán illetve nézeten keresztül,
és megfigyelni ezek egymásra hatását: Hogyan hat a nézetek adatainak
módosítása az adattáblára, és a másik irányban, az adatok módosítása
hogyan jelenik meg a nézetben? Eközben mentési pontokat adjunk meg
ahova folyton visszagörgetjük. Tranzakciókezelés alapjai, mentési pontok:
SAVEPOINT és a visszagörgetés: ROLLBACK (illetve érvényesítés: COMMIT).
(a) Egy példa nézettáblák használatára:
-- Képezzük osztályonként az összfizetést, vegyük ezen számok átlagát, és
-- adjuk meg, hogy mely osztályokon nagyobb ennél az átlagnál az összfizetés.
CREATE OR REPLACE VIEW osztaly_osszfiz
AS
SELECT onev, SUM(fizetes) ossz_fiz
FROM sila.dolgozo d, sila.osztaly o
WHERE d.oazon = o.oazon
GROUP BY onev;
CREATE OR REPLACE VIEW atlag_koltseg
AS
SELECT SUM(ossz_fiz)/COUNT(*) atlag
FROM osztaly_osszfiz;
SELECT * FROM osztaly_osszfiz
WHERE ossz_fiz > (SELECT atlag FROM atlag_koltseg)
(b) Ugyanez WITH-záradékkal
>> 2/6.lecke (WITH záradék -- alkérdések után 16-18.o.)
WITH
osztaly_osszfiz AS (
SELECT onev, SUM(fizetes) ossz_fiz
FROM sila.dolgozo d, sila.osztaly o
WHERE d.oazon = o.oazon
GROUP BY onev),
atlag_koltseg AS (
SELECT SUM(ossz_fiz)/COUNT(*) atlag
FROM osztaly_osszfiz)
SELECT * FROM osztaly_osszfiz
WHERE ossz_fiz > (SELECT atlag FROM atlag_koltseg)
top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | «
10.GY: 2017.04.28. Rekurzió, az Eljut feladat SQL-ben és PL/SQL-ben
>>> 6.előadásból rész: Az Eljut feladat.pdf Gráfok lekérdezése, rekurzió
> Tk.10.2. Az Eljut-feladat. SELECT utasítás WITH RECURSIVE záradéka
--- Eljut feladathoz a táblák létrehozása: create_jaratok_tabla.txt
> Oracle Példák (csak gépes kipróbálásra, számonkérésben nem szerepel)
>> 2/6.lecke (WITH záradék -- alkérdések után 16-18.o.)
>> 2/7.lecke Hierarchikus lekérdezések -- hiera_lekerd.txt
> További példák az Oracle SQL Lang.Ref.11.2.pdf dokumentációban:
-- Hierarchikus lekérdezések: Chapter 9 - SQL Queries and Subqueries
innen Hierarchical Queries 9-3 és Hierarchical Query Examples 9-5
-- Rekurzió with-utasítással: itt 19-36 Subquery Factoring: Example
Lekérdezések végrehajtása, katalógusok, optimalizálás. Indexek.
-- -- -- --
>>> 8.előadás.pdf (56.o.-ig) SQL/PSM a gyakorlatban: Oracle PL/SQL
> Motiváció: Tk.10.2. Az Eljut-feladat SQL/PSM-ben (PL/SQL-ben)
> Tk.9.3. SQL/PSM: Osztott változók, lekérdezések és kurzorok (folyt.köv.)
> Tk.9.4. Progr.alapok, tárolt eljárások és függvények, kivételkezelés
> Oracle PL/SQL segédanyagok: ebben az eduPLSQL mappában
-- Oracle Junior előadás: Oracle PL/SQL.pdf
-- Tankönyvtár: PL/SQL programozás Oracle 10g-ben (Gábor A.-Juhász I.)
1/6.rész: PL/SQL alapjai, PL/SQL blokk szerkezete >> 2.fej. Alapok
[1_deklarációs_rész] 2_végrehajtható_rész [3_kivételkezelő_rész]
SET SERVEROUTPUT ON;
>> példa-2-24 deklarációk-és-értékadás
>> példa-2-25 select-into (itt a 2-25 példában blokk: begin ... end; /
át kell tenni az end;-et a végére!) SELECT INTO-t akkor használjuk,
ha a lekérdezés pontosan egy sort ad, ha a lekérdezés több sorral
tér vissza, akkor kurzort kell használni, lásd köv.gyakorlat anyagát).
>> példa6-1 DML utasítások a programban, implicit kurzor
>> példa-6-4 implicit kurzor attribútumok
2/6.rész: Vezérlési szerkezetek a PL/SQL-ben 4.fej. Control Statements
PL/SQL alapjaihoz kiegészítés: Alprogramok (tárolt eljárások/függvények)
>> példa2-19 Alprogramok (már itt is vannak: 2.fej. Alapok)
>> példa4-1 Alprogramok IF-THEN utasítás példában (4.fej. Utasítások)
Vezérlési szerkezetek: Feltételes utasítások, ciklusok
>> példa-4-5 if-then-elsif utasítás,
>> példa-4-6 egyszerű case utasítás, és itt írjuk át grade := 'B' -> '&B'
helyettesítési változóra, aminek a felhasználó adja meg az értékét!
>> példa-4-10 alap LOOP ciklus utasítás EXIT WHEN kilépés a ciklusból
>> példa 4-14 FOR ciklus utasítás
>> példa 4-27 WHILE ciklus utasítás
-- -- -- --
>> Oracle PL/SQL.pdf (és összefoglalók) plsql_01_bevezetes.pdf,
02_vezerlo_utasitasok.txt, 02_tipusok.pdf, 03_dml.pdf, 05_valtozok.pdf
--- Ez volt az előkészítés az Eljut feladat megoldásához, lásd köv.3/6.részt.
> FELADATSOR 5/A --- PL/SQL--1 feladatok:
-- A feladatokat most is a saját Dolgozo-Osztaly táblákra kell megírni, ehhez
a táblákat létrehozó script, mint a DML-hez volt: createDolg (no constraint)
-- A PL/SQL blokk előtt minden alkalommal állítsuk be: SET SERVEROUTPUT ON
1.) Az első feladat: Írjuk ki PL/SQL blokkból: 'Szia Világ!', majd egészítsük ki,
kérjen be egy nevet, számot, dátumot és ezeket is írassuk ki a programból!
2.) Írjuk ki KING fizetését (olvasás táblából változóba), abban az esetben,
ha ismert, hogy pontosan egy KING nevű dolgozó szerepel a táblában,
lásd példa-2-25 select-into (csak ha a lekérdezés pontosan egy sort ad).
3.) Adjuk meg egy főnök azonosítóját, és töröljük a közvetlen beosztottjait, és
írassuk ki hány beosztottja volt, lásd példa-6-4 implicit kurzor attribútumok.
-- -- -- --
3/6.rész: Az "Eljut feladat" megvalósítása PL/SQL-ben
>> Motiváció: Tk.10.2. Az Eljut-feladat SQL/PSM-ben (PL/SQL-ben)
>> Az ehhez szükséges előkészületeket lásd PL/SQL 1/7 és 2/7 részben és
>> példa6-1 DML utasítások a programban, implicit kurzor
-- Az Eljut-feladat a Tankönyv (Ullman-Widom kék könyv) 10.2 szakaszára épül
-- Adott Jaratok(legitarsasag, honnan, hova, koltseg, indulas, erkezes) táblában
repülőjáratok adatait tároljuk (honnan-hova várospárok). Azt keressük, hogy
Dallasból mely városokba tudunk eljutni (közvetlenül vagy egy/több átszállással).
-- Ezzel a scripttel jaratok_tabla.txt készítsünk saját táblát, ami alapján dolgozunk.
> 4.) Rek1.feladat: Mely (x, y) várospárokra lehetséges egy vagy több átszállással
eljutni x városból y városba? -- Ehhez készítsünk egy Eljut(honnan, hova) táblát,
a sorait a járatok tábla alapján PL/SQL programmal töltsük fel (ciklust szervezni,
az insert 2.alakja: több sor felvitele alkérdéssel/járatok és eljut táblák alapján).
>>> (csak ha kell, egy kis segítség, további ötletek és a megoldás vázlata: itt)
> 5.) Rek2.feladat: Mely (x,y) város párokra hány átszállással és milyen költségekkel
lehetséges egy vagy több átszállással eljutni x városból y városba? -- Ehhez is
készítsünk Eljut2(honnan, hova, atszallas, koltseg) táblát, a sorait programmal.
>> Papíron megoldandó feladat: Fejezzük ki az SQL-1999-es szabvány SELECT
WITH RECURSIVE utasítással, hogy mely mely városokba (hova) tudunk eljutni
'DAL' (Dallas)-ból legfeljebb 3 átszállással és legfeljebb 5000 költségből.
>>> (csak ha kell, egy kis segítség WITH RECURSIVE papíros részéhez itt)
top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | «
11.GY: 2017.05.05.
> Oracle PL/SQL segédanyagok: ebben az eduPLSQL mappában
-- 8.előadás.pdf SQL/PSM a gyakorlatban: Oracle PL/SQL
-- Tankönyvtár/magyar: PL/SQL programozás Oracle 10g-ben
-- Oracle Junior előadás: Oracle PL/SQL.pdf
> Oracle PL/SQL angol nyelvű tutorial: PL/SQL Tutorial
-- Tutorial példáihoz a táblák létrehozása: createCust és insertCust
> Oracle PL/SQL, ehhez Oracle 11gR2 doc PL/SQL Language Reference
-- Az Oracle doksik DML példái kipróbálásához: createHRtables
4/6.rész: Kurzorok deklarálása és használata >> 6.fej. Static SQL/Cursors
>> példa-6-7 explicit kurzorok deklarálása és használata, lásd 5.feladat,
>> példa-6-11-től 6-14 explicit kurzor attribútumok, lásd 6.feladat,
>> példa-6-17 paraméteres kurzorok, lásd 7-8.feladat,
>> példa-6-43 for update kurzor módosításhoz, lásd 9-10.feladat.
>> (összefoglaló) (volt:03_sql_dml.pdf), 13_kurzorok.pdf, pl03_cursor.txt
5/6.rész: PL/SQL kivétel- és hibakezelés >> 11.fej. PL/SQL Error Handling
>> példa-11-5 és tábla-11-2 előre definiált kivételek
>> példa-11-8 felhasználó által definiált kivételek
>> (összefoglaló) plsql_07_kivetelek.pdf, Kivételekre_példa
6/6.rész: PL/SQL eljárások és függvények >> 8.fej. PL/SQL Subprograms
>> példa2-19 Alprogramok (már itt is volt függvény: 2.fej. Alapok)
>> példa4-1 IF-THEN utasítás (már itt is volt eljárás: 4.fej. Utasítások)
>> (összefoglaló) plsql_06_alprogramok.pdf, Alprogramokra_példa
> FELADATSOR 5/B --- PL/SQL--2 feladatok:
-- A feladatokat most is a saját Dolgozo-Osztaly táblákra kell megírni, ehhez
a táblákat létrehozó script, mint a DML-hez volt: createDolg (no constraint)
-- A PL/SQL blokk előtt minden alkalommal állítsuk be: SET SERVEROUTPUT ON
1-5.) Folytatás, lásd az előző heti gyakorlaton az első PL/SQL feladatokat!
6.) Írjuk ki a dolgozók nevét és fizetését!
-- több sort visszaadó lekérdezés, kurzor használata, lásd példa-6-7
7.) Írjuk ki a 3. 5. és 8. legnagyobb fizetésű dolgozó nevét, fizetését!
-- kurzor attribútumok, lásd példa-6-14
8.) Írjuk ki azon dolgozók nevét és fizetését, akik fizetése nagyobb mint
egy olyan szám, amelyet a felhasználó fog majd futás közben megadni!
-- felhasználói/helyettesítő változók: &numerikus_valt, '&karakteres_valt'
9.) Írjuk ki azon dolgozók nevét, fizetését és osztálykódját, akik a felhasználó
által megadott osztályon dolgoznak! A felhasználó által megadott betű
legyen A, R, S (Accounting ...) a 10, 20, 30-as osztály esetén.
-- paraméteres kurzor, lásd példa-6-17
10.) Növeljük meg a hivatalnokok (CLERK) fizetését a saját fizetésük 20%-ával!
-- for update kurzor módosításhoz, lásd ugyanez a feladat: példa-6-43
11.) Módosítsuk a dolgozók nevét írjuk át, hogy csak a kezdőbetű legyen nagy,
a többi betű kicsi, továbbá a dolgozók fizetését is növeljük meg 2 %-kal!
-- for update kurzor módosításhoz, lásd példa-6-43
12. Lásd az előző heti gyakorlaton az első PL/SQL feladatokat: ezeket most
írjuk át, egsézítsük ki úgy, hogy legyen benne hiba- és kivételkezelés! Például:
Írjuk ki KING fizetését (olvasás táblából változóba és a képernyőre való kiíratás)
abban az esetben, ha pontosan egy KING nevű dolgozó szerepel a táblában,
viszont ha nincs ilyen nevű dolgozó vagy több ilyen is van, akkor azt írjuk ki!
-- Előre definiált kivételek: NO_DATA_FOUND, TOO_MANY_ROWS, lásd példa-11-5
(...) -- Előre definiált és felhasználói kivételek. Alprogramok (függvények, eljárások)
13.) a.) Írjunk meg egy függvényt, ami az azonosító alapján visszaadja a nevet!
b.) Írjunk meg egy eljárást, ami az azonosító alapján egy OUT változóban
visszaadja a nevet! (alprogramok: függvények és eljárások/procedúrák)
14.) Írjunk meg egy függvényt, ami visszaadja a paraméterében levő magánhangzók
számát. Majd módosítsuk a fizetéseket ennek a függvénynek a segítségével.
(itt most a módosítást az UPDATE utasítással végezzük, és nem plsql-ben)
-- -- -- PÁZMÁNY NAP (OKTATÁSI SZÜNET) 2017.05.12. (péntek) -- -- --
top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | «
12.GY: 2017.05.19. --- Ma: JavZH, +Kérdés/Válasz: Beadandó feladatok
-- Kötelező beadandó feladatok: Saját adatbázis tervezése, E/K diagram és
rel.sématervezés, +megvalósítása SQL-ben. SQL haladó témák, PL/SQL
-- JavZH: Mai gyak. 2017.05.19 és 05.26. Péntek 10:15-11:45 2.520 MI labor
-- GyakUV: 2017.06.02. Péntek 10:15-11:45 2.520 MI labor (lásd Neptunban)
TEMATIKA (ÖSSZEFOGLALÁS)
A1. Egyszerű egytáblás lekérdezések, Relációs algebra vetítés és kiválasztás.
SQL SELECT egy relációra: WHERE záradék feltételének megadása,
speciális értékek, adattípusok és logikai kifejezések megadása, nullérték:
hiányzó értékek, műveletek nullértékekkel, az ismeretlen (unknown)
igazságérték, logikai műveletek eredménye háromértékű logika esetén.
(Tankönyv 2.4. és 6.1.szakasz, 258-269.)
A2. Többtáblás lekérdezések, direkt szorzat, összekapcsolások és halmaz-
műveletek a relációs algebrában és az SQL FROM záradékban.
Attribútumok megkülönböztetése, sorváltozók. Az SQL lekérdezések
kiértékelésének szabvány szerinti alapértelmezése. Relációs algebrai
alapműveletek. Lekérdezések kifejezése relációs algebrában, kifejezésfa.
Relációkra (mint multihalmazokra) vonatkozó műveletek, ismétlődések
megszüntetése, ismétlődések kezelése halmazműveletek során.
(Tankönyv 2.4., 5.1. és 6.2. szakasz, 273-281.)
A3. A relációk egészére vonatkozó műveletek, csoportosítás: GROUP BY
záradék, összesítő függvények és nullértékek kezelése, csoportokra
vonatkozó feltételek: HAVING záradék. Külső összekapcsolások.
Az eredmény rendezése: ORDER BY záradék. A záradékok sorrendje.
(Tankönyv 5.2. és 6.4. szakasz, 300-305.)
A4. Alkérdések az SQL SELECT utasításban a FROM listán és a WHERE
és HAVING záradékokban, korrelált alkérdések alakja, kiértékelése.
(Tankönyv 6.3. szakasz, 284-290.)
A5. Adatbázis-kezelés alapfogalmak és adatbázis-kezelő rendszerek felépítése
Változtatások az adatbázisban. Táblák tartalmának megváltoztatását szolgáló
SQL DML utasítások: INSERT, DELETE, UPDATE
(Tankönyv 1.fej. és 6.5 szakasz, 307-312.)
A6. Az egyed-kapcsolat (E/K) diagram. Egyedhalmazok attribútumok, kapcsolatok.
Alosztályok, "az-egy" ("isa") kapcsolat és jelölése. Megszorítások modellezése,
kulcsok és a kulcsok, hivatkozási épség, megszorítások. Gyenge egyedhalmazok.
Az E/K diagram átírása relációs modellé. Osztályhierarchia ("isa") átalakítása
relációkká, a három megközelítés összehasonlítása: E/K-típusú, objektumelvű,
és nullértékek használatával való átírás. (Tankönyv 4.1-4.6. szakaszok, 133-181.)
A7. A relációs adatmodell alapjai: Reláció, relációséma, előfordulás, attribútum, sor.
Relációsémák és megszorítások definiálása SQL-ben: kulcsok, idegen kulcsok,
hivatkozási épség fenntartása. A hivatkozási épség fenntartására vonatkozó
lehetőségek megadása SQL-ben a hivatkozott tábla módosítása miatt.
Attribútumokra és sorokra vonatkozó megszorítások: NOT NULL, CHECK.
(Tankönyv 7.fejezete, 329-347.)
A8. Nézettáblák létrehozása és használata az SQL-ben, adatok módosítása
nézettáblákon keresztül. Tárolt nézettáblák. Indexek. (Tankönyv 8.fejezete)
A9. Rekurzió az SQL-99-es szabványban: WITH RECURSIVE utasítás
Az Eljut feladat (könyv példája, előadáson is szerepelt).
Az SQL-99-es szabvány WITH RECURSIVE utasítása.
Az Eljut feladat megoldása rekurzióval. (Tk.10.2. szakasz, 467-474.)
A10. SQL programnyelvi bővítése, sémában tárolt függvények és eljárások.
Az SQL utasítások és a programozási nyelvek összekapcsolása, a típuseltérés
problémája. Egyetlen sort eredményező lekérdezések, osztott változók.
Sorhalmazt eredményező lekérdezések, kurzor, FETCH utasítás, ciklusok.
(Tankönyv 9.3-9.3.7. szakasz, 401-412., 9.4.1-9.4.8. szakasz, 416-431.)