ADATBÁZIS-KEZELÉS ELŐADÁS   [FIZIKUS: if1c1i05] 
  ELTE, 2015/2016-os tanév I.félévében [2015.szept]  
 
 
   
   Előadás:
 Péntek 9:00-11:30 (3x 45', egy 15' szünettel) D.ép.2-123 (PC1 labor)
   Tudnivalók az előadásról és a vizsgáról, vizsganapok, követelmények (1.ea-on).
   Az előadás nem kötelező, de gépes laborban van gyakorlattal. Katalógus van.
   Ellenőrzésre jelenléti ív (név-> 3kar-kód) elérése hallgato/[jelszóval] itt: .pdf 
  
   Órai diák:
   >> Alapok: >> 1.EA >> 2.EA >> 3.EA >> 4.EA >> 5.EA >> 6.EA >>
         ---  7.EA: okt.23. péntek ünnep és okt.26-30 őszi szünet után  ---
   >>  8.EA >> 9.EA >> 10.EA >> 11.EA >> 12-13.EA >> Vizsgatételek
   
   A vizsga két részből áll: 1) beadandó feladat beküldése, 2) írásbeli dolgozat. 
   A vizsgára a Neptunban kell jelentkezni, legalább 24 órával a vizsga kezdete
   előtt, és eddig kell beküldeni a kötelezően beadandó feladat gépes részét is.  
   Kötelező beadandó feladat: Saját feladat adatbázis tervezéshez az E/K modellt
   (lásd 8.EA), (vagy az E/K diagram helyett UML osztálydiagramot is lehet rajzolni),
   papíron ceruzával felrajzolva elegendő a vizsgára behozni, de a feladat leírását és
   a megvalósítását SQL-ben DDL (create table/view/index), DML (insert, stb) script
   (lásd 6.EA), és a saját táblákon alapuló lekérdezési feladatokat (lásd 2-5.EA SQL
   SELECT utasítás és 10-11.EA PL/SQL programmal való lekérdezéseket) egyszerű
   e-mailben (csak e-mailben, nincs csatolás) be kell küldeni 24 órával a vizsga előtt!
   Vizsgatételek: 1-8. és 10-11. előadások anyaga, ehhez Tankönyv: Ullman-Widom
   --- megj.: 9. és 12-13. előadások anyaga csak kitekintés, nem szerepel a vizsgán
   Korábbi vizsgalapok: AB1vizsga jelszavas mappában (lásd 2015.évi beugrók rész) 
   Az írásbeli vizsgán 90 perc áll rendelkezésre, a kérdések alapvető fogalmakra,
   tételekre, egyszerű típusfeladatokra vonatkoznak, rövid válasz/kérdésenként.  
   
   Tankönyv: Jeffrey D. Ullman, Jennifer Widom: Adatbázisrendszerek Alapvetés 
                                     Második átdolgozott kiadás, Panem, 2009. (a kék könyv)
   
    
   Az előadások gépes részéhez: Oracle adatbázisok elérése, SQL developer
   Oracle Példatár feladatai: Feladatok.pdf  (SQL: 1-6.fej., PL/SQL: 8-10.fej.)
    -- Példatár feladataihoz scriptek: createEmpDept(en) vagy createDolg(hu)
   Tankönyv feladatai: Termékek-feladatok.pdfCsatahajók-feladatok.pdf
    -- Tankönyv feladataihoz a scriptek: createTermékekcreateCsatahajók
    
   Oracle SQL segédanyagok: ebben az eduSQL mappában
    -- lekérdezésekhez a scriptek: createHRsyn (elég szinonimákat használni)
    -- később, DML-utasításokhoz: createHRtables (itt saját tábláink legyenek)
   Oracle PL/SQL segédanyagok: ebben az eduPLSQL mappában  
    -- itt a plsql_ fájlok forrása: innen  -- és a PL/SQL könyvhöz a scriptek: itt
    -- Tankönyvtár: PL/SQL programozás Oracle 10g-ben (Gábor A.-Juhász I.)
   Oracle 11gR2 Online Docu:  -- Tanszéki szerveren    -- Oracle oldalán --
    -- SQL Language Reference: HTML   PDF (2009.10)    HTML   PDF (2014.07)
    -- PL/SQL Language Refer.:  HTML   PDF (2010.03)    HTML   PDF (2014.12)
    
   1.EA: 2015.09.11. --- Relációs adatmodell alapismeretek, séma-előfordulás
      >>>  1.előadás.pdf
   > Tk.2.1. Strukturált és félig-strukturált adatmodellek áttekintése
   > Tk.2.2. A relációs modell alapjai, séma és megszorítások, előfordulás
   > Tk.2.3. SQL DDL és DML áttekintése, relációsémák definiálása SQL-ben
   > Tk.2.3.6. Kulcsok megadása és Tk.7.1.1. Idegen kulcsok megadása
   
   Gépes része        
   > Ismerkedés, Oracle adatbázisok elérése, SQL Developer használata
   > SQL DDL: relációséma, adattípusok, megszorítások: create table
   > SQL DML: relációelőfordulás, táblák feltöltése adatsorokkal: insert 
   > Feladatok: A megadott scriptek segítségével hozzuk létre a további
      gyakorlatokon használandó táblákat: szeret,  Dolgozók,  Termékek
   > Példák: Oracle segédanyagok eduSQL mappa (ehhez: createHRsyn)
      Bevezetés (HR séma táblái), Sample Schemas: Fig.4-1 HR és OE sémák
   > További példák: Az OracleDoc Data Types fejezetének a segítségével
      (vagy az ebből kivett oszloptípusok segédlettel) hozzunk létre táblákat.
   > Example 2-1 CREATE TABLE utasítás alapján hozzunk létre saját táblát:
      DROP TABLE MY_EMPLOYEES;  CREATE TABLE MY_EMPLOYEES (...);
   
   2.EA: 2015.09.18. --- Lekérdezések relációs algebrában és SQL-ben 
      >>> 2.előadás.pdf
   > Tk.2.4. Egy algebrai lekérdező nyelv, relációs algebra áttekintés
   > Tk.5.1-5.2. Vetítés és kiválasztás kiterjesztése, rendezési művelet
   > Tk.6.1. Egyszerű (egy relációra vonatkozó) lekérdezések az SQL-ben
       Select-From-Where utasítás, nullérték, műveletek nullértékekkel,
       az ismeretlen igazságérték (U), háromértékű (T, F, U) logika.
   > Tk.6.4.1. Ismétlődések megszüntetése. Tk.6.1.8. Az eredmény rendezése
   
   Gépes része          
   > SELECT utasítás SELECT, FROM, WHERE és ORDER BY záradékai
   > Oracle Példák (ehhez: createHRsyn)
      >> 1.lecke (vetítés kiterjesztése, kifejezések),
      >> 2.lecke (kiválasztás, kiválasztott sorok rendezése)
     
   3.EA: 2015.09.21. --- Egy táblára vonatkozó lekérdezések az SQL-ben
      >>>  3.előadás.pdf (csak 1-33.oldalig, 34.oldaltól Tk.6.2. köv.héten lesz)
   > Tk.5.1. Relációs algebra kiterjesztése multihalmazokra (az SQL-hez)
   > Tk.5.2. Kiterjesztett műveletek, kiterj.vetítés, csoportosítás, rendezés
   > Tk.6.4.3.-6.4.7. Relációkra vonatkozó műveletek, összesítő függvények 
      és csoportosítás az SQL-ben, group by és having záradék
     
   Gépes része          
   > SELECT utasítás SELECT, FROM, WHERE, GROUP BY, HAVING záradékai
   > A sorfüggvények és csoportfüggvények használata kifejezésekben
   > Oracle Példák
      >> 3.lecke (sorfüggvények használata a SELECT és WHERE záradékban)
      >> 4.lecke (összesítés, csoportosítás, group by és having záradékok)
   > További példák, see Examples:  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, COALESTE, ...
             Figyelem! COALESTE 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).
   
   4.EA: 2015.10.02. --- Több táblára vonatkozó lekérdezések az SQL-ben 
       >>> 3.előadás.pdf (34.o-tól) -> Tk.6.2.Több relációs lekérdezések
       >>> 4.előadás.pdf -> Tk.6.3. Alkérdések és összekapcsolások
   > Tk.6.2. Több relációra vonatkozó lekérdezések az SQL-ben, szemantika
   > Tk.6.2.5. és Tk.6.4.2. Halmazműveletek (egyesítés, metszet és különbség)
   > Tk.6.3. Alkérdések és összekapcsolások az SQL-ben
    
   Gépes része          
    > Oracle Példák
      >> 5.lecke (összekapcsolások, külső összekapcsolások) 
      >> 6.lecke/1 (alkérdések)
   
   5.EA: 2015.10.09. --- Több táblára vonatkozó lekérdezések az SQL-ben 
      >>>  5.előadás.pdf  (33.o.-ig) -> Példák (relációs algebra és SELECT utasítás)
   > Példák: Tk.2.4.14.Feladatok (Tk.54-57.o. 2.4.1.feladat) Termékek feladatai
      relációs algebrai kifejezésekkel, kifejezőfákkal és átírva SQL lekérdezésekre
   > Tankönyv feladatai: Termékek-feladatok.pdfCsatahajók-feladatok.pdf  
   > Tankönyv feladataihoz a scriptek: create Termékekcreate Csatahajók
      Lekérdezések kifejezése először (papíron) természetes módon táblákkal,
      a táblákon értelmezett műveletekkel gondolkodva, és relációs algebrában  
      kifejezőfákkal is felrajzolva, majd átírva SQL SELECT utasítással (gépnél)
      többféle átírást, megoldási lehetőséget vizsgáljunk meg, vessünk össze!
              >>>  Megoldás (ellenőrzésre) Termékek-feladatok-megoldása.pdf
   
   Gépes része          
    > Oracle Példák
      >> 6.lecke/1 és  6.lecke/2  (alkérdések)
      >> 7.lecke  (halmaz- és multihalmaz műveletek)
   
   6.EA: 2015.10.16. --- ABKR alapfogalmak, SQL DML és DDL utasításai  
      >>>  5.előadás.pdf  (34.o-tól) -> Tk.1.fej. ABKR (DBMS), Tk.6.5. SQL DML
      >>>  9.előadás.pdf  -> Tk.7. és 8. fejezete
   > Tk.6.5. SQL DML-utasításai: Táblák tartalmának módosítása
   > Tk.7.1.-7.5. Megszorítások és triggerek
   > Tk.8.1-8.2. és 8.5. Nézettáblák, tárolt nézettáblák
   
   Gépes része           
   > Oracle Példák (ehhez: saját táblák létrehozása: createHRtables)
      >> 1/8.lecke  SQL DML-utasítások (insert, update, delete) és a tranzakciók
      >> 1/9.lecke  SQL DDL (táblák és megszorítások létrehozása)
      >> 1/10.lecke  SQL DDL (innen: most csak a nézettáblák létrehozása)
   > Feladatok: Táblák és megszorítások (constraints), nézettáblák létrehozása.
      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 az adatok módosítása hogyan jelenik meg a nézettáblában?
   > További segédletek: create table, típusok, megszorításoknezettáblák (.txt)
     
   7.EA: 2015.10.23. --- Október 23. (péntek) ünnep (nincs előadás)        
   -- -- o ~ o ~ o~ o ~ o ~ o ~ o ~ o ~ o ~ o ~ o ~ o ~ o ~ o ~ o ~ o ~ o ~ o 
   -- --   7.EA: okt.23.(péntek) ünnep és őszi szünet: okt26-tól- 30-ig (péntek)
   -- -- o ~ o ~ o~ o ~ o ~ o ~ o ~ o ~ o ~ o ~ o ~ o ~ o ~ o ~ o ~ o ~ o ~ o
     
   8.EA: 2015.11.06. --- Tervezés: E/K-modell, E/K-diagram átírása relációkká 
      >>> 8.előadás.pdf
   > Tk.4.1.-4.4. Az egyed-kapcsolat (E/K) modell elemei
   > Tk.4.5.-4.6. E/K diagram átírása relációs modellé  
   > Feladatok: E/K diagramok felrajzolása, majd átírása relációkká,
      -- Tk.4.1-4.4. Feladatai, lásd Modellezési feladatok - E/K diagram
      -- Tk.4.5-4.6 Feladatai alapján, lásd 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
     
   Gyakorlati rész: BEADANDÓ FELADAT          
    > Papíron beadandó adatmodellezési feladat megbeszélése (a vizsgára kell!)
    > Saját feladat választása, az adatbázis tervezése: E/K diagram felrajzolása,
       majd leképezése relációkra (lásd 8EA) és gépes megvalósítása az SQL-ben:
       create table és insert utasításokból álló script (lásd 6.EA), továbbá a saját
       táblákon alapuló lekérdezési feladatokat (lásd 2-5.EA SQL SELECT utasítás).
     
   9.EA: 2015.11.13. --- Fizikai tervezés: indexek létrehozása és használata 
        >>> katalógusok, adattárolási kérdések, indexek, lásd gépes feladatok!
    > [Tankönyv-2] Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása 
        Indexstruktúrák (4.fej); Lekérdezések végrehajtása (7.fej) (nincs vizsgán)
   
   Gépes része           
    > Gépes feladatok OjektumokraAdattárolásra és Indexekre 
    > Oracle Példák
       >> 1/10.lecke  SQL DDL (nézettáblák, indexek és szinonimák létrehozása)
       >>  2/1.lecke  SQL DDL (táblákhoz megszorítások, indexek létrehozása)      
   
   10.EA: 2015.11.20. --- I.rész: Rekurzió SQL-ben és II.rész: SQL programokban
        >>> 7.előadás.pdf       
  > I.rész: Rekurzió. Az Eljut-feladat. Tankönyv 10.2. (Ullman-Widom kék könyv) 
     -- 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.
     
     > Tankönyv 11.2 fejezetében adott SQL-1999 szabvány megoldás (csak papíron!)
            WITH RECURSIVE eljut(honnan, hova) AS
                  (SELECT honnan, hova FROM jaratok
             UNION
                  SELECT eljut.honnan, jaratok.hova
                  FROM eljut, jaratok
                  WHERE eljut.hova = jaratok.honnan)
            SELECT hova FROM eljut WHERE honnan='DAL';
     -- Megj.: itt fontos: UNION (halmaz) és UNION ALL (multihalmaz) közötti különbség!
   
     > A fenti csak egy kis változtatással fut le az Oracle-ben! Oracle 11gR2 megoldás:
            with eljut (honnan, hova) as
                   (select honnan, hova from jaratok
               union all
                    select jaratok.honnan, eljut.hova
                    from jaratok, eljut
                    where jaratok.hova=eljut.honnan
                    )
                SEARCH DEPTH FIRST BY honnan SET SORTING
                CYCLE honnan SET is_cycle TO 1 DEFAULT 0
            select distinct honnan, hova from eljut order by honnan;
     
     -- További példák az Oracle SQL Language Reference 11.2.pdf dokumentációban:
         >> Rekurzió with-utasítással: Recursive Subquery Factoring: Examples
         >> ill. egy korábbi Oracle megoldás 2/7.lecke hierarchikus lekérdezések
              >> SQL Lang.Ref: Hierarchical QueriesHierarchical Query Examples
   
   -- folytatás 10.EA II.része: SQL programokban: SQL/PSM, PL/SQL alapok 
   -- II.rész: Tk.9.fejezete SQL-2003/PSM a gyakorlatban: Oracle PL/SQL
      Oracle PL/SQL, ehhez Oracle 11gR2 doc PL/SQL Language Reference
      -- Az Oracle doksikban szereplő példák kipróbálásához: createHRtables
   
   > PL/SQL blokk szerkezete, változóhasználat >> 2.fej. Alapok
      [1_deklarációs_rész] 2_végrehajtható_rész [3_kivételkezelő_rész]
      >> 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).
      >> (összefoglaló) plsql_02_tipusok.pdf,  03_sql_dml.pdf05_valtozok.pdf
        
   > Vezérlési szerkezetek, utasítások a PL/SQL-ben >> 4.fej. Utasítások
      >> 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
      >> (összefoglaló) plsql_01_bevezetes.pdfpl02_vezerlo_utasitasok.txt
   
   > PL/SQL feladatok: --- ehhez, 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!
     
           -- Az "Eljut feladat" megvalósítása PL/SQL-ben
               Ehhez hozzuk létre egy alábbi szerkezetű ELJUT táblát:
                        DROP TABLE Eljut;
                        CREATE TABLE Eljut(
                             honnan VARCHAR2(10),
                             hova VARCHAR2(10));
     
     3.) Rek1.feladat: Írjunk egy olyan PL/SQL programot, ami feltölti az ELJUT táblát
          a megfelelő város párokkal, ahol az első városból el lehet jutni a másodikba.
          Mely (x, y) várospárokra lehet egy vagy több átszállással eljutni x-ból y-ba?
          (Megoldás ötlete: ciklussal az insert 2.alakjára: több sor felvitele alkérdéssel) 
          >>> (csak ha kell, egy kis segítség, további ötletek és a megoldás vázlata: itt)
     
     4.) 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)
     
   11.EA: 2015.11.27. --- Lekérdezések, kurzorok használata a PL/SQL-ben
      >>> Oracle PL/SQL (Oracle Junior előadás)
   > Tankönyv 9.fejezete SQL-2003/PSM a gyakorlatban:
      Oracle PL/SQL, ehhez Oracle 11gR2 doc PL/SQL Language Reference
     
   > I.rész: DML utasítások a PL/SQL-ben, kurzorok >> 6.fej. Static SQL/Cursors
      -- Az Oracle doksikban szereplő példák kipróbálásához: createHRtables
      >> példa6-1 DML utasítások a programban, implicit kurzor
      >> példa-6-4 implicit kurzor attribútumok,
      >> 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 
   
   > PL/SQL feladatok: --- ehhez, mint a DML-hez volt: createDolg (no constraint)
     -- A PL/SQL blokk előtt minden alkalommal állítsuk be: SET SERVEROUTPUT ON
     1-2.) Lásd az előző heti gyakorlaton az első PL/SQL feladatokat!
     3-4.) Lásd az Eljut-feladat megvalósítását PL/SQL programmal: Rek1 és Rek2.
     5.) Í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 
     6.) Í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 
     7.) Írjuk ki azon dolgozók nevét és fizetését, akik fizetése nagyobb mint 
          a felhasználó által megadott szám!  
          -- felhasználói/helyettesítő változók: &numerikus_valt, '&karakteres_valt'
     8.) Í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
     9.) 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 
   10.) 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 
        
   > II.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: 2.fej. Alapok)
      >> példa4-1 IF-THEN utasítás (már itt is volt: 4.fej. Utasítások)
      >> (összefoglaló) plsql_06_alprogramok.pdf, pl06_procedura_fv.txt
   > 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, pl05_exception.txt
   > (összefoglalásként) plsql_13_kurzorok.pdf
   
   > PL/SQL feladatok -- folytatás alprogramok, plusz hiba- és kivételkezelés
     2.) Í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
     11.) 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)
     12.) Í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)
     
   12-13.EA: 2015.12.04. és 2015.12.11. --- Összefoglalás+Kitekintés: további témák 
  > Konzultáció a 10-11.EA PL/SQL feladatairól, kérdés/válasz
  > Konzultáció a vizsgára kötelező beadandó saját feladatról
  > ÖSSZEFOGLALÁS -->> Vizsgatételek  [--- 13.EA: Vizsgajegy megajánló dolgozat]  
  > Vizsganapok és fogadóóráim -->> elérhetőségem a vizsgaidőszakban
    
  > Kitekintés: további témakörök, de ezek már nem szerepelnek a vizsgán
      --- Oracle Online Dokumentation: Az SQL és PL/SQL feladatok megoldásához
      --- hasznos az SQL Language Reference és a PL/SQL Language Reference
      --- és ezeken kívül további két fontos dokumentációt is érdemes lapozgatni:
 (01) Alapfogalmak Oracle Database Concepts 
         például Concepts (11g) 3.fej. Indexek vagy Concepts (10g) 5.fej.Indexek
 (02) Hangolás Oracle Database Performance Tuning Guide
   
        --- BSC Adatbázisok-1 témakörben (Hajas Csilla -- Adatbázisok-1 előadása)
 (03) Tankönyv 3.fejezet Relációs adatbázissémák tervezése
        >>> 10.előadás.pdf  --- Tk.3.1.-3.2. Funkcionális függőségek, szabályok
        >>> 11.előadás.pdf  --- Tk.3.3.-3.4. VM Boyce-Codd normálformára bontás
        >>> 12.előadás.pdf  --- Tk.3.5. VM és FŐ 3NF-szintetizáló algoritmus
 (04) Tankönyv 4.7.-4.10. Adatmodellezés: UML, ODL
 (05) Tankönyv 5.3.-5.4. Logika a relációkhoz, Datalog >>>  6.előadás.pdf  
   
         --- BSC Adatbázisok-2 témakörben (Kiss Attila -- Adatbázisok-2 előadása)
 (06) Molina-Ullman-Widom 1.-5.fejezet Adattárolás, Indexstruktúrák
 (07) Molina-Ullman-Widom 6.-7.fejezet Lekérdezések végrehajtása
 (08) Molina-Ullman-Widom 8.fejezet Naplózás, helyreállítás, lásd naplo.ppt 
 (09) Molina-Ullman-Widom 9.fejezet Konkurenciavezérlés, lásd konkurencia.ppt 
     
        --- MSC Korszerű adatbázisok, stb. témakörben további anyagok:
 (10) Tankönyv 11-12.fej. A félig-strukturált adatmodell, XML, Xpath, Xquery
         >>> XML (Kiss Attila habilitációs előadása)
 (11) Tankönyv 10.6.-10.7. Az OLAP és az adattárházak
         >>> Adattárházak (Kiss Attila -- Han 5.ea. előadásfóliák fordítása)
 (12) Adatbányászat: Bevezetés (Kiss Attila -- Han 1.ea fóliák fordítása)
         Adatbányászat: Bevezetés (Ispány Márton -- Kumar 1.ea fordítása)
         --- Adatbányászat magyar nyelven --- Digitális Tankönyvtár:
        >>> Bevezetés az adatbányászatba (Tan, Steinbach, Kumar)
        >>> Előadásfóliák (Ispány Márton -- Kumar előadásfóliák ford.) -->> Slides
    Az adatbányászati feladatok általában két fő kategóriába sorolhatók, ezek:
    - Prediktív modellezés és előrejelző feladatok: osztályozás, regresszió
    - Leíró-feltáró feladatok: klaszterezés, asszociációs elemzés, anomália keresés
            data_mining.png
             
   VIZSGATÉTELEK                                                                            
  
01. A relációs adatmodell alapjai: Reláció, relációséma és előfordulás,
      attribútumok és sorok, kulcsok, külső kulcsok, hivatkozási épség.
       Relációsémák definiálása SQL-ben, a CREATE TABLE utasítás,
       megszorítások, kulcsmegszorítás, hivatkozási épség megadása,
       PRIMARY KEY, UNIQUE, FOREIGN KEY, REFERENCES.
       (Tankönyv 2.2-2.3. szakasz, 22-35.oldal)
 
02. 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.)
 
03. 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.)
 
04. 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.)
 
05. 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.)
 
06. 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 (6.5 szakasz, 307-312.)
 
07. 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.)
   
08. Megszorítások az 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áblára vonatkozó módosítások miatt. 
      Attribútumokra és sorokra vonatkozó megszorítások: NOT NULL,
      CHECK. Megszorítások elnevezése. (Tankönyv 7.fejezete, 329-347.)
   
09. 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)
    
10. 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. (10.2. szakasz, 467-474.)
 
11. SQL programnyelvi bővítése, sémában tárolt függvények és eljárások.
      (SQL/PSM szabvány vagy Oracle PL/SQL alapján) Sémában tárolt eljárások
       és függvények létrehozása és használata, néhány egyszerű utasítás alakja.
      (Tankönyv 9.4.1-9.4.3. szakasz, 416-421., 9.4.7-9.4.8. szakasz, 415-431.)
   
12. SQL lekérdezések használata programozási környezetben 
      (SQL/PSM szabvány vagy Oracle PL/SQL alapján) Az SQL utasítások és
       a programozási nyelvek összekapcsolásának a típuseltérés problémája.
       Egyetlen sort eredményező lekérdezések és az osztott változók használata.
       Sorhalmazt eredményező lekérdezések és a kurzorok (CURSOR) definiálása
       és a használata, FETCH utasítás. Ciklusok használata.
      (Tankönyv 9.3-9.3.7. szakasz, 401-412., 9.4.4-9.4.6. szakasz, 421-425.)