再帰クエリ

再帰クエリ () もしくは 階層クエリ () は、再帰的な問い合わせを行う SELECT ステートメントである。階層構造を持つデータなどに使う。
WITH RECURSIVE.
標準SQLでは再帰クエリを共通表式の一環として定義している。WITH RECURSIVE 形式の構文をサポートする関係データベース管理システムを以下に挙げる。通常RECURSIVE句は省略可能であるが、PostgreSQLでは省略できない。：
例 (PostgreSQL):
 WITH RECURSIVE r(level, employee, empno, mgr) AS (
 SELECT 1, ename, empno, mgr
 FROM emp WHERE mgr IS NULL
 UNION ALL
 SELECT r.level + 1, repeat(' ', r.level) || emp.ename, emp.empno, emp.mgr
 FROM emp, r WHERE emp.mgr = r.empno
 SELECT * FROM r;
CONNECT BY.
非標準の構文として CONNECT BY 形式の構文をサポートするデータベースを以下に挙げる：
構文：
 SELECT select_list
 FROM table_expression
 [ WHERE ... ]
 [ START WITH start_expression ]
 [ ORDER SIBLINGS BY column1 [ ASC | DESC ] [, column2 [ ASC | DESC ] ] ... ]
 [ GROUP BY ... ]
 [ HAVING ... ]
例 (Oracle Database):
 SELECT LEVEL, LPAD (' ', 2 * (LEVEL - 1)) || ename employee, empno, mgr
 FROM emp START WITH mgr IS NULL
 CONNECT BY PRIOR empno = mgr;
上記のクエリからは以下のような結果が得られる：
 level | employee | empno | mgr
 1 | KING | 7839 |
 2 | JONES | 7566 | 7839
 3 | SCOTT | 7788 | 7566
 4 | ADAMS | 7876 | 7788
 3 | FORD | 7902 | 7566
 4 | SMITH | 7369 | 7902
 2 | BLAKE | 7698 | 7839
 3 | ALLEN | 7499 | 7698
 3 | WARD | 7521 | 7698
 3 | MARTIN | 7654 | 7698
 3 | TURNER | 7844 | 7698
 3 | JAMES | 7900 | 7698
 2 | CLARK | 7782 | 7839
 3 | MILLER | 7934 | 7782
 (14 rows)