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.pdf; Tutorial_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