10 .FELADATSOR (INFORMÁCIÓS RENDSZEREK)
   
  További haladó témakörök: Hierarchikus, gráfos adatszerkezetek
  (a) Hierarchikus adatszerkezetek lekérdezése, Oracle CONNECT BY
  (b) Gráfok, rekurzió: with recursive SQL szabványban és Oracle-ben
  (c) További lehetőségek, érdekességek (nem tananyag, opcionális)
   
   
 (a) Hierarchikus adatszerkezetek lekérdezése:
 

 1.) Hierarchikus lekérdezések, CONNECT BY, például családfák lekérdezése.
    >> Oracle: SQL12_hiera_lekerd.pdf;  -- példákhoz: create_hr_synonym.txt
    >> Oracle: LiveSQL Tutorial_HieraQueries.html
    >> Oracle Példatár 3.fej. Hierarchikus lekérdezések: peldatar_62-65o.pdf
      
    >> Oracle DB SQL Lang. Ref. 12.2:  Hierarchical Queries html (Examples)
          SQL Hierarchikus függvények: sys_connect_by_path html (Examples)
          SELECT ... FROM... WHERE ... START WITH ... CONNECT BY PRIOR ...
 
-- Az Oracle SQL Lang.Ref. 9.fej. SELECT példáit írjuk át, lépésenként...
select dkod, dnev, fonoke from dolgozo;
 
select dkod, dnev, fonoke, level
from dolgozo
start with dkod = 7839 -- 'KING'
         -- (select dkod from dolgozo where dnev='KING')
connect by prior dkod = fonoke;
 
-- Ha a  fát felülről-lefelé, előrefelé járjuk be:
select dkod, dnev, fonoke, level
from dolgozo
start with dkod = 7566 -- 'JONES'
connect by prior dkod = fonoke;
 
-- Ha a  fát alulról felfelé, visszafelé járjuk be:
select dkod, dnev, fonoke, level
from dolgozo
start with dkod = 7566 -- 'JONES'
connect by prior fonoke = dkod;
   
-- SQL Lang.Ref. 7.fej. SYS_CONNECT_BY_PATH fv-re való példát is írjuk át:
select dkod, dnev, fonoke, level,
LPAD(' ', 2*level-1)||SYS_CONNECT_BY_PATH(dnev, '/') "Útvonal"
from dolgozo
start with dkod = (select dkod
    from dolgozo where dnev='KING')
connect by prior dkod = fonoke;
    

   
 (b) Gráfok lekérdezése, rekurzió: SQL WITH RECURSIVE utasítás
 
 2.)  Az Eljut-feladat a Tankönyv (Ullman-Widom kék könyv) 10.2 szakaszára épül
       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). 
   >> Ullman-Widom tankönyv 10.2 szakasza Eljut-feladat: korábbiEA/p67_p80.pdf
   >> Oracle: SQL Language Reference >> innen: Recursive Subquery Factoring
     
   >> Az Ullman-Widom Tankönyv szerint (SQL szabvány szerint, csak papíron)
        (konkrét adatbázis-kezelő rendszerekben eltérő megvalósítások lehetnek)  
   
            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';
   
 3.)  Az Eljut feladat gépes megvalósítása Oracle-ben:
       -- Ezzel a scripttel jaratok_tabla.txt készítsünk saját táblát.
 
   >> Az SQL-99 szabványhoz képest az eltérések, hogy WITH RECURSIVE helyett
       az Oracle-ben csak WITH, és a UNION az Oracle-ben nem megy, hanem csak
       UNION ALL működik, és nem-hierarchikus esetben meg kell adni a CYCLE-t is: 
     
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;
   
-- visszatérve: ORACLE CONNECT BY megoldásra, KIEG.:
 4.) Eljut feladat amíg nincs kör, hierarchikus lekérdezéssel működik
    >> Ha kör van a gráfban, akkor NOCYCLE kiegészítéssel már működik
 
SELECT LPAD(' ', 4*level) || honnan, hova,
         level-1 Atszallasok,
         sys_connect_by_path(honnan||'->'||hova, '/'),
         connect_by_isleaf, connect_by_iscycle FROM jaratok
START WITH honnan = 'SF'
CONNECT BY NOCYCLE PRIOR hova = honnan;
 

 
  (c) További lehetőségek (nem-tananyag, opcionális szorgalmi)  
  >> Reguláris kifejezések: SQL_regularis_kif.txt; SQL_regular_exp.pdf
  >> Analitikus függvények: Oracle Példatár 13.fej.; Tutorial: Analytic Funct.