8.GYAKORLAT (ADATBÁZISOK)

        II.ZH (CANVAS) és
        a ZH után: az ún. "Eljut feladat"-ról gráfos adatok lekérdezéséről
 
   > Hierarchikus adatszerkezetek lekérdezése: 
            -- A példákhoz HR táblákhoz szinonimák: create_hr_synonym.txt
      >> Oracle DB SQL Lang. Ref. 12.2:  Hierarchical Queries html (Examples)
            SELECT ... FROM... WHERE ... START WITH ... CONNECT BY PRIOR ...
            SQL Hierarchikus függvények: sys_connect_by_path html (Examples)
            
      >> Oracle: SQL12_hiera_lekerd.pdfTutorial_HierarchicalQueries.html
            lásd még Kende-Nagy Oracle Példatár SQL 3.fejezet, 63-65.oldal
     
   > Rekurzió az SQL-ben - Az Eljut feladat:
   > SQL5.pdf (2020.tavaszi AB1EA/HajasCs. 10.ea végén: Eljut feladat; Rekurzió)
       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). 
     
   >> 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';
   
         --- Kérdés: itt miért fontos kiemelni az UNION (halmaz) és
                           UNION ALL (multihalmaz) közötti különbséget?
     
   >> 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;
     
     -- Példák az Oracle SQL Language Reference 11.2.pdf dokumentációban:
         >> Rekurzió with-utasítással: Recursive Subquery Factoring: Examples