INFORMÁCIÓS RENDSZEREK / ADATBÁZIS-KEZELÉS
  ELTE, 2016/2017-es tanév II.félévében [2017.febr]  
 
 
 1GY | 2GY | 3GY | 4GY | 5GY | 6GY | 7GY | 8GY | 9GY | 10GY | 11GY | 12GY | «
 
   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: SUBSTRRPAD, ...,  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.txt02_tipusok.pdf03_dml.pdf05_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.pdfAlprogramokra_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.)