2.GYAKORLAT (ADATBÁZISOK)
   

 
    I.RÉSZ: FOLYT. RELÁCIÓS ALGEBRA FELADATSOR /szeret tábla/
    Relációs sémája: szeret (nev, gyumolcs)
    Feladatok rel.algebrai lekérdezésekre (alapműveletekkel)
    Relációs algebrához relax környezet táblákkal: dbis uibk github io/relax
 
-- Ismétlés: 1.gyak: Kezdetek: Vetítés, kiválasztás és halmazműveletek
    Unér műveletek: pi-vetítés, sigma-kiválasztás, rho-átnevezés
    Halmazműveletek: unió, halmazműveleti különbség, metszet
 1. Kik szeretik az almát?
 2. Kik nem szeretik az almát? (de valami mást igen)
 3. Kik szeretik vagy az almát vagy a körtét?
 4. Kik szeretik az almát is és a körtét is?
 5. Kik azok, akik szeretik az almát, de nem szeretik a körtét?
 6. Kik szeretik vagy az almát vagy a körtét, de csak az egyiket?
 
-- Folyt. 2.gyak: Szorzás jellegű műveletek 
 7. Kik szeretnek legalább kétféle gyümölcsöt?
 8. Kik szeretnek legalább háromféle gyümölcsöt?
 9. Kik szeretnek legfeljebb kétféle gyümölcsöt?
10. Kik szeretnek pontosan kétféle gyümölcsöt?  
11. Legyen SZM(n, gy, m) vagyis a korábbi szeret(nev, gyumolcs) rel.sémát
      egészítsük ki egy 3.oszloppal: m - minősítés (1 és 10 közötti egész) és
      összesítő függvények nélkül, vagyis alap relációs algebrában fejezzük ki,
      hogy kik adták a legmagasabb minősítéseket! 
    
   
   II.RÉSZ: SQL SELECT utasítás select lista és where feltétel /dolgozo, osztaly/
   Témakör: Az SQL SELECT utasítás SELECT lés WHERE záradéka
>> Oracle segédanyagok példái: FROM EMPLOYEES helyett HR.EMPLOYEES, stb
      SQL00_bevezetes.pdfSQL01_select_lista.pdf;  SQL02_where_feltetel.pdf
    
>> Táblák előkészítése az SQL-ben: Dolgozo, Osztaly táblák: createDolg 

        Dolgozo (dkod, dnev, foglalkozas, fonoke, belepes, fizetes, jutalek, oazon)      
        Osztaly (oazon, onev, telephely)
        Fiz_Kategoria (kategoria, also, felso)
    
--- Rel.algebra vetítés művelete (SQL-ben multihalmaz -> rel.alg.-ban halmaz!)
 1.  Adjuk meg a dolgozók között előforduló foglalkozások neveit! (select lista)
 2.  Adjuk meg a dolgozók között előforduló foglalkozások neveit (DISTINCT is),
     az eredmény halmaz legyen, vagyis minden foglalkozást csak egyszer írjuk ki!
 3. Adjuk meg a dolgozók kódját, nevét és az éves fizetését, amikor kifejezést
     használunk az oszlopnevek helyén, ott adjunk új oszlopnevet ("éves fizetés")
   
--- Rel.algebra kiválasztás művelete és azh SQL SELECT utasítás WHERE feltétele
 4. Kik azok a dolgozók, akiknek a fizetése > 2800? (kiválasztás, elemi feltétel)
 5. Írjuk ki a 'KING' nevű dolgozó(k) adatait! (kar.tip.konstans megadása 'KING')
 6. 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)
 7. 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)
 8. Adjuk meg azon dolgozókat, akik nevének második betűje 'A' (where: like)
 9. Kik azok a dolgozók, akiknek a jutaléka nagyobb, mint 600?
10. Kik azok a dolgozók, akiknek a jutaléka kisebb-vagy-egyenlő, mint 600?
11. Kik azok a dolgozók, akiknek a jutaléka ismeretlen (hiányzó adat, nincs kitöltve)
12. Kik azok a dolgozók, akiknek a jutaléka ismert (vagyis nem NULL)
   
--- Az eredménytábla sorainak rendezése (SELECT utasítás ORDER BY záradéka)
     (Ez itt nem alap relációs algebrai művelet, de az SQL lekérdezésekben hasznos)
13. Listázzuk ki a dolgozókat foglalkozásonként, azon belül nevenként rendezve.
14. Listázzuk ki a dolgozókat fizetés szerint csökkenőleg rendezve.
15. Rendezés segítségével az első N sor elérése Oracle 12.2 adatbázisban,
      lásd Row Limiting Examples.html (forrás: Oracle Database SQL Lang. Ref. html)
     

 
   KIEG.: Neumann csoportnak:  Sorfüggvények használata SQL lekérdezésekben 
   Többieknek: Később az I.ZH után, a II.ZH-ig fokozatosan több gyakorlaton nézzük
   Témakör: Az SQL SELECT utasítás SELECT és WHERE záradékaiban szereplő
   attribútumok különböző típusaira kifejezések és a sorfüggvények használhatók.
     I. Oracle beépített adattípusok: OracleTipusok.html (forrás: Oracle Data Types)
    II. Oracle beépített függvények: SQL03_fuggvenyek.pdf (lásd Oracle Functions)
   
--- Numerikus függvények   
 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 fizetése osztható 15-tel.
 3. Adjuk meg a dolgozók fizetéseinek négyzetgyökét két tizedesre, és ennek egészrészét.
     
--- Karakterkezelő függvények, szövegkeresés, szöveg "grafikus" megjelenítése
 4. Adjuk meg azon dolgozókat, akik nevének második betűje 'A'.
 5. 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)
 6. Adjuk meg a dolgozók nevének utolsó három betűjét.
 7. Adjuk meg azon dolgozókat, akik nevének utolsó előtti betűje 'T'.
+1.6.példa (Kende-Nagy) Listázza ki a dolgozók nevét és fizetését egy oszlopban,
      legyen a két oszlop között az elvásztójel a kettőspont, és a fizetésük szerint
      csökkenően írjuk ki, valamint jelenítsük meg a fizetést grafikusan úgy, hogy
      a fizetést 1000 Ft-ra kerekítve, minden 1000 Ft-ot egy '#' jel jelöl.
      (például 5000 -> #####, 800 -> #) (LPAD és RPAD függvények)
     
--- Konverziós függvények és dátumkezelő függvények
 8. Kik azok a dolgozók, akik '1982.01.01.' után léptek be?
     (Aktuális dátumformátumot lásd -> SYSDATE fv.)
 9. 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)
10. Adjuk meg azokat a dolgozókat, akik keddi napon léptek be.
     (Vigyázzunk a visszaadott értékkel!)
11.*Adjuk meg, hogy hány nap volt KING és JONES belépési dátuma között?
      (Tegyük fel, hogy pontosan egy KING és pontosan egy JONES nevű dolgozó van) 
      [* Itt kipróbálhatjuk, hogy skalár helyett skalárérétékű (SFW) lekérdezés is lehet!]
12. Adjuk meg, hogy milyen napra esett KING belépési dátuma hónapjának utolsó napja.
13. Adjuk meg, hogy milyen napra esett KING belépési dátuma hónapjának első napja.
14. 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)
 
--- Nullértéket kezelő függvények és speciális függvények 
15. 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).
+1.2.példa (Kende-Nagy) Adjuk meg a dolgozók nevét, foglalkozását és jutalékát
      oly módon, hogy akinek nincs jutaléke, annál azt írja ki, hogy "Nem jár jutalék".
      (DECODE függvénnyel és CASE kifejezéssel is)
+1.8.példa (Kende-Nagy) Listázzuk ki azoknak a dolgozóknak a nevét, fizetését,
       jutalékát, és a jutalék/fizetés arányát két tizedesjegy pontosságig, akiknek
      a foglalkozása eladó (SALESMAN) vagy hivatalnok (CLERK), fizetés szerint
      csökkenően rendezve.
       
>> Önálló gyakorlás: Oracle Példatár Feladatok.pdf 1.fejezet 1.1.-1.18. feladatok
      [Megj.: 1.14.feladatban foglalkozás szerint rendezve, és nem-"csoportosítva",
       ugyanis a csoportosítást - összesítések és group by később lesz, itt: order by]