05. ADATBÁZISOK (LEV.INFOTANÁR)
   
 
   Lekérdezések kifejezése relációs algebrában
   >>  2.ea.pdf (1-17.o.)  
   
   - Alapok: Relációs algebrához relax környezet táblákkal: dbis uibk github io/relax
   - A fenti linken elérhető DB (ELTE-AB1) táblákat használjuk a lekérdezésekhez,
     de magunk is létrehozhatunk táblákat:  Relax_Szeret.txtRelax_Dolg_Oszt.txt 
   - A relációs algebrai műveletek eredménye halmaz, vagyis ez az implementáció
     minden művelet elvégzése után automatikusan megszünteti az ismétlődéseket.
   - Vannak különbségek az SQL szintaxisban, olvassák el a használatról a Help-et.
  
   FELADATSOR /szeret tábla/ rel.algebrai lekérdezések (alapműveletekkel)
   >> Relációs sémája: szeret (nev, gyumolcs)
   A relációs algebrai feladatokat nézzük meg párhuzamosan az SQL-ben is,
   írjuk át SELECT utasításra, lásd lentebb SQL gyak.példái: createSzeret.txt  
   
-- 1.rész: Kezdetek: Vetítés, kiválasztás és halmazműveletek
    Unér műveletek: pi-vetítés, sigma-kiválasztás, rho-átnevezés
    Halmazműveletek: unió, halmazműveleti különbség, metszet
 1. Kik szeretik az almát?
 2. Kik nem szeretik az almát? (de valami mást igen)
 3. Kik szeretik vagy az almát vagy a körtét?
 4. Kik szeretik az almát is és a körtét is?
 5. Kik azok, akik szeretik az almát, de nem szeretik a körtét?
 6. Kik szeretik vagy az almát vagy a körtét, de csak az egyiket?
 
-- 2.rész: Szorzás jellegű műveletek (átnevezés, direkt szorzat önmagával)
 7. Kik szeretnek legalább kétféle gyümölcsöt?
 8. Kik szeretnek legalább háromféle gyümölcsöt?
 9. Kik szeretnek legfeljebb kétféle gyümölcsöt?
10. Kik szeretnek pontosan kétféle gyümölcsöt?  
   
  
   Lekérdezések kifejezése SQL-ben
   >>  2.ea.pdf (18-52.o.)
 
-- 1.részHalmazműveletek SQL-ben: UNION [ALL], INTERSECT, MINUS
   >> Oracle DB SQL példák: SQL04_set_operators.pdf;
   >> Oracle DB SQL Lang.Ref. >> 4.Op. >> Set Operators (halmazműv.)
        (A fenti demo lekérdezésekhez volt: createHRsyn.txt szinonimák)
     
   >> A korábbi relációs algebrai feladatokat írjuk át SELECT utasításra!
   >> Gyakorlat példái: createSzeret.txt  séma: szeret(név, gyümölcs) 
   Feladatok: SQL lekérdezések és a halmazműveletek használata: 
    1. Kik szeretik az almát?
    2. Kik nem szeretik az almát? (de valami mást igen)
    3. Kik szeretik vagy az almát vagy a körtét?
    4. Kik szeretik az almát is és a körtét is?
    5. Kik azok, akik szeretik az almát, de nem szeretik a körtét?
    6. Kik szeretik vagy az almát vagy a körtét, de csak az egyiket?
   

 
-- 2.részFROM lista többtáblás lekérdezések: direkt szorzat, összekapcsolások
   
>> Gyakorlat példái: Dolgozo, Osztaly, Fiz_Kategoria táblák: createDolg.txt 
        Dolgozo (dkod, dnev, foglalkozas, fonoke, belepes, fizetes, jutalek, oazon)      
        Osztaly (oazon, onev, telephely)
        Fiz_Kategoria (kategoria, also, felso)
   
   >> Szorzások, összekapcsolások a FROM listán (rövid összefoglaló)  
   -- Direkt szorzat: SELECT * FROM dolgozo, osztaly;
   -- Joinok:
      SELECT * FROM dolgozo NATURAL JOIN osztaly;
      SELECT * FROM dolgozo, osztaly WHERE dolgozo.oazon=osztaly.oazon;
      SELECT * FROM dolgozo JOIN osztaly ON dolgozo.oazon=osztaly.oazon;
  -- Theta-join: 
      SELECT * FROM dolgozo JOIN fiz_kategoria ON fizetes BETWEEN also and felso;
      SELECT * FROM dolgozo JOIN fiz_kategoria ON fizetes >= also and fizetes <= felso;
  -- folyt. külső joinok (lent), továbbá az alkérdéseknél lesz szemijoin, antijoin (később).
 
    Feladatok:   
    1. Kik azok a dolgozók, akiknek nincs főnöke?
    2. Kik azok a dolgozók, akiknek a főnöke KING? 
    3. Adjuk meg azoknak a főnököknek a nevét, akiknek a foglalkozása nem 'MANAGER'.
    4. Adjuk meg azokat a dolgozókat, akik többet keresnek a főnöküknél.
    5. Kik azok a dolgozók, akik főnökének a főnöke KING?
    6. Kik azok a dolgozók, akik osztályának telephelye DALLAS vagy CHICAGO?
    7. Kik azok a dolgozók, akik osztályának telephelye nem DALLAS és nem CHICAGO?
    8. Kik azok a dolgozók, akiknek a fizetése > 2000 vagy a CHICAGO-ban dolgoznak.
    9. Melyik osztálynak nincs dolgozója?
  10. Kik azok a dolgozók, akiknek van 2000-nél nagyobb fizetésű beosztottja.
  11. Kik azok a dolgozók, akiknek nincs 2000-nél nagyobb fizetésű beosztottja.
  12. Mely telephelyeken van elemző (ANALYST) foglalkozású dolgozó.
  13. Mely telephelyeken nincs elemző (ANALYST) foglalkozású dolgozó.
  14. Adjuk meg azon osztályok nevét és telephelyét, amelyeknek van 1-es fizetési
        kategóriájú dolgozója.
  15. Adjuk meg azon osztályok nevét és telephelyét, amelyeknek  nincs 1-es fizetési
        kategóriájú dolgozója.
   

   
-- 3.részFROM lista többtáblás lekérdezések: összekapcsolások -- Külső joinok:
      SELECT * FROM dolgozo LEFT JOIN osztaly ON dolgozo.oazon=osztaly.oazon;
      SELECT * FROM dolgozo RIGHT JOIN osztaly ON dolgozo.oazon=osztaly.oazon;
      SELECT * FROM dolgozo FULL JOIN osztaly ON dolgozo.oazon=osztaly.oazon;
   >> Oracle DB SQL példák: SQL07_osszekapcsolas.pdf
   >> Oracle DB SQL Lang.Ref >> Joins (Self Joins, Inner Joins, Outer Joins)
  
    Feladatok:   
 1. Adjuk meg osztályonként a dolgozók összfizetését az osztály nevét megjelenítve
     ONEV, SUM(FIZETES) formában, és azok az osztályok is jelenjenek meg ahol
     nem dolgozik senki, ott az összfizetés 0 legyen. Valamint ha van olyan dolgozó,
     akinek nincs megadva, hogy mely osztályon dolgozik, azokat a dolgozókat
     egy 'FIKTIV' nevű osztályon gyűjtsük össze. Minden osztályt a nevével plusz
     ezt a 'FIKTIV' osztált is jelenítsük meg az itt dolgozók összfizetésével együtt.