start with句、connect by句を使ったOracleの階層問い合わせ1
山岸賢治 [著] 2009/06/22 00:00

SourceCode 0.82 KB

 Oracleの階層問い合わせについて、基本事項から使用例まで、SQLのイメージを交えて解説します。本稿では、start with句,connect by句を扱います。

1 2 →

はじめに

 Oracleの階層問い合わせについて、基本事項から使用例まで、SQLのイメージを交えて解説します。本稿では、start with句、connect by句を扱います。

対象読者

  • Oracleの階層問い合わせを使いたい方
  • OracleのSQLの理解を深めたい方

 階層問い合わせは、木構造の知識を必要としますので、『AVL木で木構造を学ぼう - @IT』や、『データ構造の選択次第で天国と地獄の差 - @IT』を、読まれてからの方が、理解しやすいと思います。

必要な環境

 本稿で扱うSQLは、Oracle 10.2.0.1.0で動作確認しました。

1. start with句とconnect by句

 まずは、基本的な階層問い合わせを見てみましょう。

IDTable
IDOyaID
1null
21
32
43
51
65
72
20null
2120
2221
基本的な階層問い合わせ
select ID,OyaID,Level
  from IDTable
start with OyaID is null
connect by prior ID = OyaID;
出力結果
IDOyaIDLevel
1null1
212
323
434
723
512
653
20null1
21202
22213

 解説すると、start with句で、木の根となる条件を指定します。OyaID is nullを満たすのは、IDが1の行と20の行です。start with句の段階での、SQLのイメージは下記となります。

start with句の段階でのイメージ
start with句の段階でのイメージ

 そして、connect by句で、親子関係の条件を指定します。prior ID = OyaIDを満たせば親子関係があると判定されます。

 prior演算子は、親の行の値であることを意味します。prior ID = OyaIDは、(親の行の)ID = (子の行の)OyaID という意味になります。

 connect by句での、親子関係の条件を元に、木の根からのすべての子孫が行データとして返されます。そして、select句でLevel擬似列を指定して、ノードのレベルを表示してます。SQLのイメージは下記となります。

SQLのイメージ
SQLのイメージ

1 2
→
INDEX
Oracleの階層問い合わせ(1) (start with句、connect by句)
Page1
はじめに
対象読者
必要な環境
1. start with句とconnect by句
2. connect by句で複数条件
3. start with句の省略
最後に
参考資料
プロフィール
山岸賢治 ヤマギシケンジ

Oracle ACEの1人。
OracleSQLパズルの運営者。
ORACLE MASTER Silver Oracle Database 10g
(研修受講で)ORACLE MASTER Gold Oracle Database 10g
ソフトウェア開発技術者 (情報処理技術者試験)
第二種情報処理技術者 (情報処理技術者試験)
 


記事へのコメント・トラックバック機能は2011年6月に廃止させていただきました。記事に対する反響はTwitterやFacebook、ソーシャルブックマークサービスのコメントなどでぜひお寄せください。

スポンサーサイト