この項目では、関係データベース (RDB) のデータ問い合わせ手法について説明しています。ネームサービス(インターネットドメイン名・ホスト名の名前解決サービス)については「Domain Name System」をご覧ください。
再帰クエリ (英: recursive query) もしくは 階層クエリ (英: hierarchical query) は、再帰的な問い合わせを行う SELECT ステートメントである。階層構造を持つデータなどに使う。 標準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 形式の構文をサポートするデータベースを以下に挙げる: 構文:SELECT select_listFROM table_expression[ WHERE ... ][ START WITH start_expression ]CONNECT BY { PRIOR parent_expr = child_expr 。child_expr = PRIOR parent_expr }[ 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)
WITH RECURSIVE
IBM DB2 [1]
Microsoft SQL Server [2]
Firebird 2.1[3]
PostgreSQL 8.4 [4]
Oracle Database 11gR2[5]
H2 Database[6]
CONNECT BY
Oracle Database [7]
EnterpriseDB [8]
関連項目
木構造
新しい業界標準「SQL99」詳細解説
脚注^ “ ⇒common-table-expression”. DB2 Version 9.1 for z/OS. 2009年9月10日閲覧。
^ “ ⇒WITH common_table_expression (Transact-SQL)”. SQL Server 2008. 2009年9月10日閲覧。
^ Helen Borrie (2008年7月15日). “ ⇒Firebird 2.1 Release Notes”. 2009年9月10日閲覧。
^ “ ⇒WITH問い合わせ”. PostgreSQL 文書. 2009年9月10日閲覧。
^ “ ⇒Oracle Database 11g Release 2に関する10の重要なこと ? askTom Live - Point4: Recursive Subquery Factoring 【再帰的副問合せのファクタリング】”. 2010年10月31日閲覧。
^ “ ⇒Advanced - H2 Database”. 2010年10月31日閲覧。
^ “ ⇒階層問合せ”. Oracle Database SQL言語リファレンス 11gリリース2. 2010年10月31日閲覧。
^ ⇒Hierarchical Queries, EnterpriseDB