Une requête récursive est une requête SQL qui permet de définir un résultat en fonction de lui-même, afin de traiter des structures hiérarchiques ou répétitives (arbres, graphes, chaînes de dépendances, etc.).
En SQL (notamment SQLite), elle s’écrit généralement avec with recursive et comporte deux parties :
- Cas de base (initialisation): une première requête qui produit les lignes de départ.
- Partie récursive: une requête qui utilise le résultat déjà construit pour produire de nouvelles lignes. Elle est répétée automatiquement jusqu’à ce qu’aucune nouvelle ligne ne soit ajoutée.
La structure typique d'une requête récursive est la suivante:
with recursive my_relation as (
-- cas de base
select ...
union all
-- partie récursive
select ...
from my_relation
where ...
)
select *
from my_relation;
Dans notre base de données university, une requête récursive serait par exemple utile pour obtenir la chaîne des prérequis d'un cours (et pas seulement les prérequis directs.). Par exemple, si CS-103 a pour prérequis CS-102 et que CS-102 a pour prérequis CS-101, alors CS-103 a également CS-101 comme prérequis.
Plus d'informations sur les requêtes récursives sont présentes dans l'ouvrage de référence (Section 5.4, Advanced SQL & Recursive queries)
INGInious