Да, это возможно в SQL. Вы можете использовать рекурсивные запросы для этой цели. Взгляните на здесь . Читайте полную страницу.
WITH req_query AS
(
SELECT id,
name,
ancestorid
FROM your_table
WHERE name='homo sapiens' //If you want to search by id, then change this line
UNION
SELECT yt.id,
yt.name,
yt.ancestorid
FROM your_table yt,
req_query rq
WHERE yt.id = rq.ancestorid
AND rq.id != 0
AND rq.id is not null
)
SELECT *
FROM req_query
;
Редактировать
Это будет работать с ORACLE, SQL Server, PostgreSQL и с любой другой базой данных, которая поддерживает рекурсивные запросы. Для работы с базами данных, которые не поддерживают рекурсивные запросы, вам придется использовать модель вложенного набора.