Как рекурсивные запросы выглядят в реляционной и графовой БД.

Рекурсивный SQL-запрос представляет собой cte(common table expression). Это довольно громоздская конструкция, включающая в себя объединение рекурсивной и нерекурсивной часте с последующей обработкой итоговой выборки. with recursive x( <нерекурсивная часть> union [all] <рекурсивная часть> ) select * from x; На языке Gremlin(поддерживается Neo4j, JanusGraph, Amazon Neptune, OrientDB и другими) g.V().hasLabel(<метка>).has(<атрибут>, <значение>) .repeat(out(<рёбра обхода>)).emit() .until(<условие выхода из рекурсии>).values('name') На языке Cypher (используется в Neo4j) MATCH (p:Person {name: "Alice"})-[:FRIEND*1..]->(friend) RETURN p, friend; Собственно за рекурсию отвечает оператор * после :FRIENDS.