再帰クエリ
[Wikipedia|▼Menu]
.mw-parser-output .hatnote{margin:0.5em 0;padding:3px 2em;background-color:transparent;border-bottom:1px solid #a2a9b1;font-size:90%}

この項目では、関係データベース (RDB) のデータ問い合わせ手法について説明しています。ネームサービス(インターネットドメイン名ホスト名の名前解決サービス)については「Domain Name System」をご覧ください。

再帰クエリ (: recursive query) もしくは 階層クエリ (: hierarchical query) は、再帰的な問い合わせを行う SELECT ステートメントである。階層構造を持つデータなどに使う。
WITH RECURSIVE

標準SQLでは再帰クエリを共通表式の一環として定義している。WITH RECURSIVE 形式の構文をサポートする関係データベース管理システムを以下に挙げる。通常RECURSIVE句は省略可能であるが、PostgreSQLでは省略できない。:

IBM DB2 [1]

Microsoft SQL Server [2]

Firebird 2.1[3]

PostgreSQL 8.4 [4]

Oracle Database 11gR2[5]

H2 Database[6]

例 (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 形式の構文をサポートするデータベースを以下に挙げる:

Oracle Database [7]

EnterpriseDB [8]

構文: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)
関連項目

木構造

新しい業界標準「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


記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:7329 Bytes
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef