
Strona o szybkim czytaniu.
W tabeli bazodanowej może zostać zaimplementowana struktura drzewiasta. Przykładem takiej konstrukcji jest tabela towary, w której pewne elementy są składnikami innych, te z kolei mogą być składnikami jeszcze innych itp.
W Oracle SQL istnieje specjalna konstrukcja, która dzięki klauzulom CONNECT BY PRIOR
i START WITH
pozwala operować na tak zaimplementowanych drzewach.
Klauzula CONNECT BY PRIOR
pozwala zdefiniować połączenie pomiędzy ojcem i synem w drzewie. Kolejność kolumn w warunku nie jest obojętna. Najpierw powinien być wypisany ojciec a potem syn.
Klauzula START WITH
pozwala określić korzeń drzewa.
SELECT *
FROM towary
CONNECT BY PRIOR tow_id = tow_tow_id
START WITH tow_nazwa = 'Zestaw komputerowy';
W zapytaniach hierarchicznych mamy do dyspozycji specjalną „pseudokolumnę” LEVEL
dzięki której możemy stwierdzić, na jakim poziomie drzewa znajduje się dany wiersz.
SELECT lpad(' ', 3*LEVEL) || tow_nazwa, LEVEL
FROM towary
CONNECT BY PRIOR tow_id = tow_tow_id
START WITH tow_nazwa = 'Zestaw komputerowy';
Podczas korzystania z zapytań hierarchicznych można używać klauzuli WHERE
.
SELECT lpad(' ', 3*LEVEL) || tow_nazwa
FROM towary
WHERE tow_nazwa <> 'Komputer'
CONNECT BY PRIOR tow_id = tow_tow_id
START WITH tow_nazwa = 'Zestaw komputerowy';
Warunki ograniczające wynik można również definiować w klauzuli CONNECT BY PRIOR
, w której definiujemy wiązanie ojciec <-> syn.
SELECT lpad(' ', 3*LEVEL) || tow_nazwa
FROM towary
CONNECT BY PRIOR tow_id = tow_tow_id
AND tow_nazwa <> 'Komputer'
START WITH tow_nazwa = 'Zestaw komputerowy';