Junior — Middle
Wyjaśnij, czym są rekurencyjne wyrażenia tabel wspólnych (CTE) i jak są używane w zapytaniach SQL
sobes.tech AI
Odpowiedź od AI
Rekurencyjne wyrażenia tabeli wspólnych (CTE) to specjalny rodzaj tymczasowych zbiorów wyników w SQL, które mogą odwoływać się do siebie, aby wykonywać zapytania rekurencyjne. Są przydatne do pracy z hierarchicznymi lub graficznymi strukturami danych, na przykład do przechodzenia przez drzewo kategorii, organizowania pracowników według podległości itp.
Rekurencyjny CTE składa się z dwóch części:
- Zapytanie bazowe — początkowy zestaw wierszy.
- Zapytanie rekurencyjne — korzysta z wyników poprzedniej iteracji, aby uzyskać kolejny poziom danych.
Przykład: pobranie wszystkich podległych pracowników o id = 1 w hierarchii pracowników.
WITH RECURSIVE Subordinates AS (
SELECT id, manager_id, name
FROM employees
WHERE id = 1 -- przypadek bazowy
UNION ALL
SELECT e.id, e.manager_id, e.name
FROM employees e
INNER JOIN Subordinates s ON e.manager_id = s.id -- przypadek rekurencyjny
)
SELECT * FROM Subordinates;
Ta zapytanie najpierw wybiera pracownika o id=1, następnie rekurencyjnie dodaje wszystkich pracowników, których manager_id odpowiada id już znalezionych pracowników, aż do przeszukania całej hierarchii.