再帰クエリ
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-[[戻る>SQL]]
* 目次 [#e649080b]
#contents
*概要 [#r0892ffe]
SQLは非手続き言語のため、手続き的に解り難いことが多いが、~
再起クエリはより解り難いので、再帰クエリがどういう仕組み...
※ ココでは、[[DNSの再帰クエリ>DNSサーバ#a04f4c5b]]ではな...
*詳細 [#v339b0d2]
**定義 [#deeb247c]
***標準SQL [#m076b9e0]
標準SQLでは再帰クエリを[[共通表式>#ua7639e5]]の一環として...
以下は、WITH RECURSIVE 形式の構文をサポートするRDBMS
-Microsoft SQL Server
-Oracle Database 11gR2
-IBM DB2
-PostgreSQL 8.4
-Firebird
-H2 Database
***共通表式 [#ua7639e5]
-WITH問い合わせ(共通テーブル式)
-次に続く全選択の FROM 文節で表として指定できる 表 ID を...
***定義例 [#se32dead]
以下が、再起クエリの定義例(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...
FROM emp, r WHERE emp.mgr = r.empno
)
SELECT * FROM r;
**分析 [#f6b8a4d4]
***ルートのクエリ [#d393eda7]
以下の部分がルートのクエリ
SELECT 1, ename, empno, mgr
FROM emp WHERE mgr IS NULL
***ワークのレコード [#r792bf4d]
以下の部分で、
WITH RECURSIVE r(level, employee, empno, mgr) AS (
下記で取得した結果セットを[[再帰のクエリ>#mecf59f8]]に渡...
-[[ルートのクエリ>#d393eda7]]
-[[再帰のクエリ>#mecf59f8]]
***再帰のクエリ [#mecf59f8]
ここで、テーブルを[[ワークの親レコード>#r792bf4d]](=[[...
SELECT r.level + 1, repeat(' ', r.level) || emp.ename...
FROM emp, r WHERE emp.mgr = r.empno
この結果セットは、再び、「[[再帰のロジックに渡すレコード>...
***結果テーブル([[共通表式>#ua7639e5]]) [#j9998f33]
下記をUnionしたものが[[共通表式>#ua7639e5]]として利用可能。
-[[ルートのクエリ>#d393eda7]]の結果セット
-[[再帰のクエリ>#mecf59f8]]の結果セット
再帰の度に、[[再帰のクエリ>#mecf59f8]]の結果セットがUnion...
***[[結果テーブル>#j9998f33]]のSELECT [#f816bfcb]
[[結果テーブル>#j9998f33]]([[共通表式>#ua7639e5]])をSEL...
*参考 [#l72866e7]
-再帰クエリ - Wikipedia~
https://ja.wikipedia.org/wiki/%E5%86%8D%E5%B8%B0%E3%82%AF...
-再帰SQL -図解- - Qiita~
https://qiita.com/Shoyu_N/items/f1786f99545fa5053b75
----
Tags: [[:データアクセス]]
終了行:
「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicros...
-[[戻る>SQL]]
* 目次 [#e649080b]
#contents
*概要 [#r0892ffe]
SQLは非手続き言語のため、手続き的に解り難いことが多いが、~
再起クエリはより解り難いので、再帰クエリがどういう仕組み...
※ ココでは、[[DNSの再帰クエリ>DNSサーバ#a04f4c5b]]ではな...
*詳細 [#v339b0d2]
**定義 [#deeb247c]
***標準SQL [#m076b9e0]
標準SQLでは再帰クエリを[[共通表式>#ua7639e5]]の一環として...
以下は、WITH RECURSIVE 形式の構文をサポートするRDBMS
-Microsoft SQL Server
-Oracle Database 11gR2
-IBM DB2
-PostgreSQL 8.4
-Firebird
-H2 Database
***共通表式 [#ua7639e5]
-WITH問い合わせ(共通テーブル式)
-次に続く全選択の FROM 文節で表として指定できる 表 ID を...
***定義例 [#se32dead]
以下が、再起クエリの定義例(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...
FROM emp, r WHERE emp.mgr = r.empno
)
SELECT * FROM r;
**分析 [#f6b8a4d4]
***ルートのクエリ [#d393eda7]
以下の部分がルートのクエリ
SELECT 1, ename, empno, mgr
FROM emp WHERE mgr IS NULL
***ワークのレコード [#r792bf4d]
以下の部分で、
WITH RECURSIVE r(level, employee, empno, mgr) AS (
下記で取得した結果セットを[[再帰のクエリ>#mecf59f8]]に渡...
-[[ルートのクエリ>#d393eda7]]
-[[再帰のクエリ>#mecf59f8]]
***再帰のクエリ [#mecf59f8]
ここで、テーブルを[[ワークの親レコード>#r792bf4d]](=[[...
SELECT r.level + 1, repeat(' ', r.level) || emp.ename...
FROM emp, r WHERE emp.mgr = r.empno
この結果セットは、再び、「[[再帰のロジックに渡すレコード>...
***結果テーブル([[共通表式>#ua7639e5]]) [#j9998f33]
下記をUnionしたものが[[共通表式>#ua7639e5]]として利用可能。
-[[ルートのクエリ>#d393eda7]]の結果セット
-[[再帰のクエリ>#mecf59f8]]の結果セット
再帰の度に、[[再帰のクエリ>#mecf59f8]]の結果セットがUnion...
***[[結果テーブル>#j9998f33]]のSELECT [#f816bfcb]
[[結果テーブル>#j9998f33]]([[共通表式>#ua7639e5]])をSEL...
*参考 [#l72866e7]
-再帰クエリ - Wikipedia~
https://ja.wikipedia.org/wiki/%E5%86%8D%E5%B8%B0%E3%82%AF...
-再帰SQL -図解- - Qiita~
https://qiita.com/Shoyu_N/items/f1786f99545fa5053b75
----
Tags: [[:データアクセス]]
ページ名: