使用方法を理解することによってで...接続開始をOrcale

1.基本的な文法

1  SELECT ... からのTableName
 2      スタート条件1。
 3      を接続することによって、条件2
 4。 条件3。

例えば:

1  選択 *  から テーブル
2      の開始 ORG_ID = 'HBHqfWGWPy'
 3      接続により前ORG_ID = PARENT_ID。

 

  簡単に説明すると、ツリー構造はこのようなテーブルとして、テーブルに格納され、二つのフィールドがある:ORG_ID、PARENT_IDは、各レコードで表される親は、ツリー構造であり、上記を用いて形成することができます。クエリ構文木はここで、すべてのレコードを取得することができます:  

        条件1は、  定義文のルートである、もちろん、定義された条件がルートノードの複数を得るために緩和することができ、木は、より実用的です。
        条件2は、  それによって状態、接続されている記録PRIOR発現のような、  CONNECT BY  PRIOR ORG_ID = PARENT_ID ;ことを意味するレコードにPARENT_IDセクションが記録さORG_ID、すなわち、このレコードの父親がレコードです。
        条件3は、  ろ過によって返されたすべてのレコードのフィルタ条件です。
 
    簡潔に述べると次のように
        :ツリー構造のテーブルをスキャンするため、各ノードは、ツリー構造にアクセスする必要がある場合、ノードのみ次アクセスするステップ、一度アクセスされ得る
        最初のステップは:ルートから始まる。
        ステップ:アクセスノード;
        第三段階:ノードは子ノードにアクセスできないのであれば、それはアクセスされなかった最も左のサブセクションに転じ、そして第二段階、そうでなければ第四のステップかどうかを決定するために、
        第四の工程:ノードがルートノードである場合、アクセスが、そうでなければ第5工程を終了する;
        ステップ5:ノードの親ノードに戻り、第3工程を行います。
        要するに:、あるツリー構造全体スキャンのプロセス順序ツリートラバーサルで処理。
 
1。説明ツリー構造
     ツリー構造テーブルに格納されたデータは、データ間の階層関係、すなわち、親子関係は、従業員ことを示す、EMP表のEMPNOおよびMGRとして、により、テーブルの列と列の間の関係を記述するEMPNOいいえ、親ノードの子ノードのEMPNO値に等しい従業員の数、MGR値のリーダーシップを表すMGR。テーブルの各行の親ノードがツリー構造全体を決定することができる(ルートノードを除く)MGR、ノードによって各親ノードを表しています。

     BY句START WITHおよびCONNECTの使用はSELECTコマンドでツリー構造のテーブルを照会することができ、次のように、コマンドの形式は次のとおりです。
1  SELECT ...
 2 CONNECT BY {PRIORである列名1 =列名2 |カラム名1 = PRIOR分割され名} 2
 3。 [ START WITH ]
    
  前記句して接続すると、データの各行は、階層順序によって取得され、所定のデータテーブルは、ツリー構造の関係に接続示します。PRIOR演算子は、一方の接続関係の二つの列の前に置かれなければなりません。ノード間の親子関係のために、以前の検索木構造の順序は、トップダウンまたはボトムアップであるかを決定するために、子ノードが、他方の側を表し、親ノードのオペレータ側に示されています
 
     列名を使用することに加えて、接続関係にあるだけでなく、列式の使用を可能にします。START WITH句は、句は、ルートノードとしてクエリを満たすすべての行が省略された場合、ツリー構造としてルートノードの識別を見つけるために使用され、任意です。
     START WITH:だけでなく、ルートノードを指定することができ、あなたが複数のルートノードを指定することができます。

  

2。事前の
     位置PRIOR演算子は前と等号の後に置かれ、検索順序クエリを決定しています。
     CONNECT BY節が中央番号の前に置かれたときPRIOR、検索されたリーフノードを順次ルートノードから強制される、すなわち、我々はトップダウン方式を呼び出す親ノード、によって示される方向介してツリー構造の子ノード。
   1 CONNECT BYが PRIOR EMPNOある= MGR     

     PIRORオペレータが句、適度な数でCONNECT後方に配置されたときに、リーフノードから検索されるルートノード、我々はボトムアップ方法を呼び出す方向介してツリー構造の親ノードへ、すなわち子ノードを注文することを余儀なくされます。例えば:    
   1 CONNECT BY EMPNO = PRIORはMGRは
     、このようにして開始ノードを指定します。
 
3。開始ノードの定義を検索
     見下ろし開始するために、クエリツリートップダウン構造だけでなく、ルートノードから、任意のノードでも開始ノードとして定義することが可能です。この外観の結果が始まるツリーのノードにあります。
 
4。LEVELの
     ツリー構造を有するテーブルは、データの各行は、レベル位置にある異なるノードので、行が各層の数を有することができ、ツリー内のノードです。層の数は、ルートノードから決定されます。ノードが起動し、そこからどんなには、最初のルートレベルの数は、ルートノードの子は2、などと常に1です。図1.2は、上の階層ツリー構造を示しています。
 
5。そして、分岐ノードを切断
     する際、クエリツリー構造テーブルの行の一部を削除することができ、あなたは木の枝、削除するツリー構造内の単一のノードを定義するための句、木を切ることができ、または先行ノード(上から下に検索された場合)(トップダウン検索するとき)単一のノードが、それは、その子孫のノードに影響を及ぼしません。
 
6。ソート表示
     クエリツリー構造内の他のクエリのようにではなく、ツリー構造のトラバーサルの順序よりも、検索結果の順序を変更し、ORDER BY句を使用してもよいです。
 
7.例
     Oracleは、文法的構造によって接続して起動提供して再帰クエリを達成することができます。
1.簡単な例:
 
 1 SQL> select *  from test;
 2 BILL_MONTH           DAY_NUMBER MSISDN
 3 -------------------- ---------- --------------------
 4 200803                        1 13800
 5 200803                        3 13800
 6 200803                        2 13800
 7 200803                        2 13801
 8 200803                        4 13804
 9 200803                        5 13804
10 200803                        7 13804
11 200803                        8 13804
12 200803                        6 13802
13 200803                        6 13801
14 200803                        7 13801
15 200803                        8 13801
16 rows selected
17  
18 SQL>
19 SQL> select * from test
20   2       start with day_number=1
21   3       connect by  prior day_number=day_number-1 and prior msisdn= msisdn
22   4      ;
23 
24 BILL_MONTH           DAY_NUMBER MSISDN
25 -------------------- ---------- --------------------
26 200803                        1 13800
27 200803                        2 13800
28 200803                        3 13800

 

上面的语句查找出了从1开始,并且day_number 逐渐+1 递增的,并且 msisdn 相同的哪些个数据.
2. start with  connect by 语法结构
    如上面说看到的例子,其语法结构为start with condition  connect by  condition (含 prior 关键字)
start with conditon 给出的seed 数据的范围, connect by  后面给出了递归查询的条件,prior 关键字表示父数据,prior 条件表示子数据需要满足父数据的什么条件。在下面的这个start with connect by 结构中,就表示查找出了从1开始,父数据的day_number等于子数据的day_number-1而且父数据的msisdn=子数据的msisdn.
start with day_number=1
connect by  prior day_number=day_number-1 and prior msisdn= msisdn

 

おすすめ

転載: www.cnblogs.com/JamesHooke/p/11031906.html