07. ADATBÁZISOK (LEV.INFOTANÁR)
   
 
   1.RÉSZ 3.ea.pdf  Az alkérdéseket használata a SELECT utasításban
   >> Oracle DB SQL példák: SQL08_alkerdes1.pdf;   SQL08_alkerdes2.pdf
   >> Az alkérdések témakörben nézünk példákat szemijoinra, antijoinra.
   
   >> 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)
   
  Példa alkérdésekre:
  Adjuk meg azoknak a dolgozóknak a nevét, akiknek a legnagyobb a fizetésük.
      
   Feladatok több táblára - teljes select utasítás - dolgozo, osztaly, fiz_kategoria
 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 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 osztályonként a legnagyobb fizetésu dolgozó(ka)t, és a fizetést.
 6. Adjuk meg, hogy az egyes osztályokon hány ember dolgozik (azt is, ahol 0=senki).
 7. Adjuk meg azokat a fizetési kategóriákat, amelyekbe beleesik legalább három
     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ó.
          

   
   2.RÉSZ Témakör: SQL DML, táblák tartalmának módosítása: insert, delete, update,
   +ehhez szükséges a tranzakció-kezelés: commit, rollback: SQL09_DML.pdf  
 
   FELADATSOR: dolgozo, osztaly (DML: 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.
   -- az SQL DML feladatokat egy másodpéldányon végezzük (dolg2, oszt2)
   DROP TABLE dolg2;
   DROP TABLE oszt2;
   CREATE TABLE dolg2 AS SELECT * FROM dolgozo;
   CREATE TABLE oszt2 AS SELECT * FROM osztaly;
   -- az SQL DML feladatok után kérdezzük le a módosított tábla tartalmát,
   -- majd állítsuk vissza a tábla eredeti tartalmát a ROLLBACK utasítással!
   rollback; -- visszaállítjuk a tábla eredeti tartalmát (a további feladatokhoz)
   commit; -- ezzel véglegesítjük a táblák tartalmát (befejezzük a tranzakciót)
   
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 (vagyis az alkérdésben 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 a jelenlegi minimális fizetés
      5%-kával, 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.