6.gyak. Lekérdezések kifejezése SQL SELECT-tel:
Külső összekapcsolások. Korrelált alkérdések.

   
Feladatok: A 3. előadásanyaghoz kapcsolódó feladatokat nézünk az alkérdésekre.
Az I.ZH előtt szándékosan nem használunk még nézettáblákat sem inline nézeteket,
vagyis az alkérdéseket csak a WHERE és HAVING feltételben használjuk (I.ZH-n is)
a FROM után még ne használjunk alkérdéseket (azzal az egyszerűsítéssel az I.ZH után
fogunk foglalkozni, és csak a II.ZH-ban használhatunk majd alkérdést FROM után).
       

Emlékeztető az előző gépes gyakorlatokról, csatlakozás az Oracle adatbázishoz: 
Gépes gyakorlathoz: Oracle adatbázis elérhetősége
   
A lekérdezési feldatatok megoldásához előbb az alaptáblákat kell létrehoznunk
(aki volt az előző gyakorlatokon, azoknak megvan, aki nem volt, most hozza létre)
1.) Oracle segédanyag példáinak kipróbálása:
- Ehhez előkészítés: HR séma tábláihoz készítsük el a szinonimákat create_synonym
   
2.) Az órai gyakorlatok példái:
- Szeret tábla és feladatok:  table_szeret.txt  és a tábla létrehozása: create_szeret.txt
- Dolgozo és Osztaly feladatok: table_dolgozo.txt és a táblák létrehozása create_dolg
       
3.) A példatár feladatai önálló gyakorlásra:
--  Lásd Feladatok.pdf (3.5-3.32.feladatok) és a táblák létrehozása  cr_dept_emp 
       

1.8. Külső összekapcsolások az SQL-ben
 
Külső összekapcsolás
-- a 9i előtti szintaxis (+)
-- 9i utáni aktuális szintaxis: 
 
SELECT table1.column, table2.column
[{LEFT | RIGHT | FULL} OUTER JOIN table2
  ON (table1.column_name = table2.column_name)]
 
Segédanyag: >> FROM_lista és Külső join  művelet példáit próbáljuk ki!

Feladat: Adjuk meg osztályonként a dolgozók összfizetését
a hr.employees és hr.departments táblák adatai alapján
(department_name, sum(salary)) formában.
1. Azok az osztályok is jelenjenek meg ahol nem dolgozik senki,
    ott az összfizetés 0 legyen.
2. Ha van olyan dolgozó, akinek nincs osztálya, azokat
    egy 'FIKTIV' nevű osztályon gyűjtsük össze.
3. Csak azokat az osztályokat jelenítsük meg, amelyek nevében
     van 'B' betű, plusz a FIKTIV osztályt.
-- Megoldás/ellenőrzésként: lásd itt
     
1.9. Alkérdések-II. Korrelált alkérdések. 
      (a) t in (SFW)
      (b) t theta (SFW)
      (c) t theta ANY/ALL(SFW)
      (d) EXISTS (SFW) 
   
Segédanyag: >> Alkérdések I.  és Alkérdések II.  példáit próbáljuk ki!
   

2.) Az órai gyakorlatok példái:
Relációs algebra hányados kifejezése relációs algebrában és SQL-ben

Táblák és feladatok: szeret_tabla.txt    -- táblák létrehozása: create_szeret.txt
A szeret táblára vonatkozó relációs algebrai feladatait nézzük meg  SQL SELECT-tel!
Feladat: Kik azok, akik legalább azokat a gyümölcsöket szeretik, mint Micimackó?
1.mo. Hányados kifejezése a relációs algebrai alapműveletekkel, majd ezt átírva
         SQL SELECT-re (két MINUS halmazművelet segítségével)
2.mo. Fejezzük ki először természetes nyelven:
          Kik azok, akik legalább azokat a gyümölcsöket szeretik, mint Micimackó =
          vagyis azok, akik minden olyan gyümölcsöt szeretnek, amit Micimackó =
          vagyis azok, akikhez nincs olyan gyümölcs, amit Micimackó szeret, de Ő nem,
          majd ezt is írjuk át SQL SELECT-re (két NOT EXISTS korrelált alkérdéssel)
3.mo. A fentiek kombinációja (például egy NOT EXISTS-en belül egy MINUS), stb.
-- Megoldások/ellenőrzésként: lásd itt
     

Fejezd ki a lekérdezéseket SQL SELECT-tel!
A gyakorlatok feladatai itt: table_dolgozo.txt  -- táblák létrehozása: create_dolg
Feladatok a 6.gyakorlatra
- Kik azok a dolgozók, akiknek a fizetése nagyobb, mint  'ALLEN' fizetése?
- Kik azok a dolgozók, és milyen munkakörben dolgoznak, akiknek a legkisebb
  a fizetésük? (ugyanez a kérdés a legnagyobb fizetésre is).
- Osztályonként írjuk ki 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.
- Kik azok a dolgozók, akiknek a fizetése kisebb, mint valamelyik hivatalnok ('CLERK')
  fizetése. (ugyanez a kérdés, csak most minden hivatalnok fizetésénél kisebb)
- Kik azok a dolgozók, akiknek ugyanaz a főnökük és ugyanazon az osztályon dolgoznak, 
  mint 'MARTIN'?
- Melyek azok az osztályok, ahol nem dolgozik senki? (Nézzük meg OUTER JOIN-nal is
   valamint korrelált NOT EXISTS-el is, keressünk többféle megoldást és vessük össze!)
- Adjuk meg, hogy az egyes osztályokon hány ember dolgozik (azt is, ahol 0=senki). 
            

3.) További gyakorló feladatok: Oracle példatár Feladatok.pdf
az 6.gyakorlathoz: 3.fejezet Alkérdések (3.5-3.32.feladatok) 
Az önálló gyakorlást nem-kötelező beadandóként egy "<ehakod>_6gy.txt" nevű  
szöveges fájlban legkésőbb a köv.gyakorlat előtt, kedd 10h-ig küldjék el emailben.
A beadandó célja az önálló gyakorlás, lásd Gyakorlati követelmények #Beadandó
     

ZH előtti összefoglalás, kérdés-válasz.
Következő héten az I.ZH: relációs algebra, kiterjesztett relációs algebra és SQL SELECT.
      
 Vissza az AB1 gyakorlat oldalára             Vissza a Kezdőlapra