(57)【要約】  関係データベースシステムを制御するための方法であって、キーワードからなるクエリステートメントが解析され、ここで、ＲＴＮが独立したＲＴＮビルディングブロックから形成され、ここで各ＲＴＮビルディングブロックは、少なくとも一つの決定経路上に少なくとも一つの決定ポジションを有する他のＲＴＮビルディングブロックの内部の有向決定グラフとは独立して定義される内部の有向決定グラフを有しており、選択ステップにおいてキーワードを用いて全てのＲＴＮビルディングブロックの内部決定グラフが実行され、それぞれに選択される経路との一致が該決定グラフによって決定されず当該処理が中断されるか、またはそれぞれに選ばれる経路が最後まで実行されるかのいずれかまで、この決定グラフのありうる全ての経路がたどられる。【選択図】図６
2009539151.tif 000002
【特許請求の範囲】
【請求項１】
関係データベースシステムを制御するための方法であって、当該方法では、キーワードからなるクエリステートメントが再帰遷移ネットワーク（ＲＴＮ）を適用することによって、および、キーワードまたはキーワードのグループに対して、該ステートメントによって与えられる順序で処理に関連する特性を割り当てることによって、最初に解析され、その後に制御コマンドへの変換および任意選択的に最適化が続き、
その特徴が、
ＲＴＮが独立したＲＴＮビルディングブロックから形成され、ここで、各ＲＴＮビルディングブロックは内部の有向決定グラフを有し、該グラフは、他のＲＴＮビルディングブロックの内部の有向決定グラフとは独立して定義され、少なくとも一つの決定経路に沿って少なくとも一つの決定ポジションを持っており、
選択ステップにおけるキーワードを用いて、全てのＲＴＮビルディングブロックの内部の決定グラフが実行され、それぞれに選択される経路との一致が該決定グラフによって決定されず当該処理が中断されるか、またはそれぞれに選ばれる経路が最後まで実行されるかのいずれかまで、この決定グラフのありうる全ての経路がたどられ、
ここで該決定経路の少なくとも一部は、該決定ポジションの少なくとも一つにおいて再帰呼び出し関数を有しており、該再帰呼び出し関数を通じて、該ＲＴＮビルディングブロックの一つが、全てのＲＴＮビルディングブロックに対する選択ステップの適用の結果として実行されるため、該決定ポジションの該少なくとも一つから始まる、選択ステップの任意の頻繁に再帰的にネストされた実行が可能となること、および、
全てのキーワードでの選択ステップの適用の結果として、該ＲＴＮビルディングブロックの順序およびそれらのネスティングから、該関係データベースシステム用のアクセスプランが生成されることである、
当該方法。
【請求項２】
ＲＴＮビルディングブロックの決定グラフが決定ポジションにおいて実行されるときに、クエリステートメントのキーワードが、関連する印に依存して、文字列、記号、変数または数字のいずれかと比較されるか、または、全てのＲＴＮビルディングブロックからＲＴＮビルディングブロックが挿入され、次いでそれが再び実行されること、
を特徴とする、請求項１に記載の方法。
【請求項３】
ＲＴＮビルディングブロックの決定グラフにおいて、決定ポジションでは再帰呼び出し関数の事前決定し得ない無制限の回数の連続的な呼び出しが行われるものであり、該決定ポジションが、キーワード（文字列、記号、変数または数字）を要求する少なくとも一つの決定ポジションを前置され、かつ、少なくとも一つの決定ポジションが後に続き、該決定ポジションがまたキーワードを要求すること、
を特徴とする、請求項１または２に記載の方法。
【請求項４】
選択ステップの実行前の変換ステップにおいて、各ＲＴＮビルディングブロックが第１または第２の包括的グループのいずれかに割り当てられ、ここで、
文字列、記号、変数または数字で始まるＲＴＮビルディングブロックは第１の包括的グループに割り当てられ、かつ、選択ステップが全てのＲＴＮビルディングブロックに対して適用される再帰的クエリ関数を含む決定ポジションが、該選択ステップが第１の包括的グループのＲＴＮビルディングブロックに対してのみ適用され得る程度に制限されるように変換され、かつ、
再帰的クエリ関数で始まるＲＴＮビルディングブロックが、第２の包括的グループに割り当てられ、かつ、第１の決定ポジションが削除されるよう、および、選択ステップが全てのＲＴＮビルディングブロックに対して適用される再帰的クエリ関数を含む決定ポジションが、該選択ステップが第１の包括的グループのＲＴＮビルディングブロックに対してのみ適用される程度に制限されるように変換され、かつ、
第１の包括的グループの全てのＲＴＮビルディングブロック、および、最後の決定ポジションにおいて文字列、記号、変数または数字で終わる第２の包括的グループのＲＴＮビルディングブロックが、該選択ステップが第２の包括的グループのＲＴＮビルディングブロックに対してのみ適用される最後のポジションにおいて、任意に実行可能な決定ポジションを付加されること、
を特徴とする、先行する請求項に記載の方法。
【請求項５】
各ＲＴＮビルディングブロックが、少なくとも一つの文字列、少なくとも一つの記号、変数または数字で始まり、かつ、
選択ステップが、第１の包括的グループのＲＴＮビルディングブロックに対してのみ、または、第２の包括的グループのＲＴＮビルディングブロックにおいてのみ、適用され得ること、
を特徴とする、請求項４に記載の方法。
【請求項６】
第２の包括的グループのＲＴＮビルディングブロックが、決定グラフの最後の決定ポジションにおいてのみ、任意選択にて呼び出され得ること、
を特徴とする、請求項４または５に記載の方法。
【請求項７】
各ＲＴＮビルディングブロックが、決定グラフの完全な実行後に、少なくとも一つの処理入力セットに依存して、各々のＲＴＮビルディングブロックのために定義された少なくとも一つの処理関数の結果として、ＺＥＲＯを含む少なくとも一つの値を有する処理出力セットを返し、ここで、これらのセット内の値の順序が格納され、かつ、得られた各処理出力セットは、処理入力セットの一つとして各ＲＴＮビルディングブロックに割り当てられ得ること、
を特徴とする、上記請求項のうちの１項に記載の方法。
【請求項８】
各ＲＴＮビルディングブロックが、少なくとも一つの第１の重みを有し、それによって、ＲＴＮビルディングブロックのネスティングが、１つのネスティングへと変えられ、該１つのネスティングは、各選択ステップの間または全ての選択ステップを実行した後に、さらなる処理のために使用でき、それが、同等に小さい第１の重みを有する元の上位付けされたＲＴＮビルディングブロックのそれぞれに対して、より大きい第１の重みのＲＴＮビルディングブロックを上位付けることによって行われること、
を特徴とする、上記請求項のうちの１項に記載の方法。
【請求項９】
第１の包括的グループの全てのＲＴＮビルディングブロックの第１の重みが、ステートメントにおいて直接的に上位付けされている第２の包括的グループのＲＴＮビルディングブロックに依存しており、
そのことが、第１の包括的グループのＲＴＮビルディングブロックに対して割り当てられる第１の重みが、初期の重みとして記述される理由であること、
を特徴とする、請求項８に記載の方法。
【請求項１０】
第１の包括的グループのＲＴＮビルディングブロックが、同一の第１の初期の重みを持ち、それは好ましくは平均的な大きさのものであり、かつ、これらのＲＴＮビルディングブロックが、第２の包括的グループのＲＴＮビルディングブロックに導入されるときに、単一の値だけ、好ましくは１だけ減らされた第１の重みを採用すること、
を特徴とする、請求項９に記載の方法。
【請求項１１】
第１または第２の包括的グループのＲＴＮビルディングブロックの処理関数の処理出力セットに対して、それらの処理関数を適用する第２の包括的グループのＲＴＮビルディングブロックが、第２の包括的グループの第１の包括的サブグループを形成し、かつ、それぞれが、同一の第１の重みを持ち、その重みは、可能な最も大きい重みではなく、しかし、第１の包括的グループのＲＴＮビルディングブロックの第１の初期の平均の大きさの重みよりは大きいこと、
を特徴とする、請求項８、９または１０に記載の方法。
【請求項１２】
第２の包括的グループのＲＴＮビルディングブロックが、それらの処理出力セットが第１または第２の包括的グループの他のＲＴＮビルディングブロックのための処理入力セットとして受け取られるものであって、該第２の包括的グループのＲＴＮビルディングブロックは、第２の包括的グループの第２の包括的サブグループを形成し、かつ、どんな場合であっても第１の包括的グループのＲＴＮビルディングブロックの第１の初期の平均の大きさの重みよりは小さいそれぞれに異なる第１の重みを有し、かつ、各々のＲＴＮビルディングブロックのための第１の重みが、各場合において、該第１のグループのＲＴＮビルディングブロックを実行するためにより小さい第１の重みをこのグループにそれぞれに割り当てることによって、第２の包括的グループの第２の包括的サブグループのＲＴＮビルディングブロックに関する予め決定可能な処理の順序を個々に記述していること、
を特徴とする、請求項８、９、１０または１１に記載の方法。
【請求項１３】
第１の包括的グループからの少なくとも一つのＲＴＮビルディングブロックの導入を指示する決定ポジションの後に、少なくとも一つのさらなる決定ポジションが、第１および第２の包括的グループの全てのＲＴＮビルディングブロックに続き、
前記さらなる決定ポジションは、変換ステップの後で任意選択的に存在して第２の包括的グループからのＲＴＮビルディングブロックの導入を指示するものである最後の任意選択的な決定ポジションとは独立しており、
前記第１および第２の包括的グループの全てのＲＴＮビルディングブロックが、可能な最も大きい重みの大きさを持った第２の固定された重みを有すること、
を特徴とする、請求項８から１２に記載の方法。
【請求項１４】
変換ステップ後のクエリステートメントに由来するネスティングの順序での第２の包括的グループの各ＲＴＮビルディングブロックの第１の重みが、より大きい第１の重みの各々のＲＴＮビルディングブロック、または、最後の決定ポジションに位置しておらず、かつ可能な最も大きい重みの第２の重みを有する各々の上位付けされたＲＴＮビルディングブロックが到達されるまで、各上位付けされたＲＴＮビルディングブロックの第１の重みと比較されること、および、
それに応じて、比較の基準としての役目をする、この決定されたネスティングの順序のＲＴＮビルディングブロックが、到達されたＲＴＮビルディングブロックに対して直接的に下位付けされ、次いで、該比較においてスキップされ、かつ以前に上位付けされた全てのＲＴＮビルディングブロックに対して上位付けされること、
を特徴とする、請求項１３に記載の方法。
【請求項１５】
第１の包括的グループのＲＴＮビルディングブロックが、それら自身の第１の重み、および、それらに対して上位付けされるＲＴＮビルディンブロックの第１の重みとは無関係に、それらに対して直接的に上位付けされる第１または第２の包括的グループのＲＴＮビルディングブロックに対して下位付けされること、
を特徴とする、請求項８から１４に記載の方法。
【請求項１６】
比較されことになる第２の包括的グループのＲＴＮビルディングブロックが、第２の包括的サブグループのものでもある上位付けされたＲＴＮビルディングブロックの一つと同一の第１の重みを持つ場合に、該比較される必要のあるＲＴＮビルディングブロックが、これらのＲＴＮビルディングブロックが第２の包括的グループの第２の包括的サブグループのＲＴＮビルディングブロックであるならば、かつ、そうである場合にのみ、このＲＴＮビルディングブロックに対して直接的に下位付けされること、
を特徴とする、請求項８から１５に記載の方法。
【請求項１７】
第２の包括的サブグループのものでもある上位付けされたＲＴＮビルディングブロックの一つと比較されることになる第２の包括的グループのＲＴＮビルディングブロックが、同一の第１の重みを持つ場合、上位付けされたＲＴＮビルディングブロックとの比較は、これらのＲＴＮビルディングブロックが第２の包括的グループの第１の包括的サブグループのＲＴＮビルディングブロックである限り継続されること、
を特徴とする、請求項８から１６に記載の方法。
【請求項１８】
該第１の包括的グループのＲＴＮビルディングブロックが、全てのＲＴＮビルディングブロックから、第２の可能な最大の重みの大きさを有するＲＴＮビルディングブロックが導入可能である決定ポジションの一つに直接的に導入されるときに、第２の包括的グループのＲＴＮビルディングブロックに対して下位付けされることが予め定められており、該第１の包括的グループのＲＴＮビルディングブロックが、最小の重みの大きさの第２の重みを割り当てられること、および、
そのような場合において、最小の大きさの第２の重みを持たない当該第１の包括的グループのＲＴＮビルディングブロックが、第２の包括的グループのＲＴＮビルディングブロックに対して下位付けされないこと、
を特徴とする、請求項１３から１７に記載の方法。
【請求項１９】
第１および第２の包括的グループの全てのＲＴＮビルディングブロックが、少なくとも一つのＲＴＮビルディングブロックを割り当てられ、ここで該少なくとも一つのＲＴＮビルディングブロックは、第１および第２の包括的グループのＲＴＮビルディングブロックが、可能な最も大きい第２の重みを有するＲＴＮビルディングブロックの、全てのＲＴＮビルディングブロックからの一つが導入されうる決定ポジションに直接的に導入されるときに、上位付けされることになるものであること、
を特徴とする、請求項１３から１８に記載の方法。
【請求項２０】
ステートメントにおける順序に従って、および、重みに従ってネストされ、かつ、特定のＲＴＮビルディングブロックグループを割り当てられたＲＴＮビルディングブロックが、エンジンインターフェースの要素においてそれぞれ変換され、ここで、一つのエンジンインターフェースの要素は、処理ステップに従って設定され得る、独立した構成要素の記録を有すること、
を特徴とする、上記請求項のうちの１項に記載の方法。
【請求項２１】
少なくともコンピュータシステムを有する関係データベースシステムであって、該コンピュータシステムは、少なくとも関係データベース、少なくともデータ処理ユニット、および、少なくともメモリを備え、その特徴が、
該データ処理ユニットが、請求項１から２０のいずれかに記載の上記方法に従って動作するよう、プログラムに基づくように構成されていることである、
前記関係データベースシステム。
【請求項２２】
請求項２３に記載のデータキャリアまたは電子キャリア信号の関係データベースシステムを制御するために、データベース言語で与えられるデータベースステートメントをメモリ内に読み込むための手段を有すること、
を特徴とする、請求項２１に記載の関係データベースシステム。
【請求項２３】
請求項２２に記載の関係データベースシステムを制御するため、および、該関係データベースシステムを読み込むための、データベース言語で与えられるデータベースステートメントを有するデータキャリアまたは電子キャリア信号であって、
その特徴が、
該データキャリアまたは該キャリア信号上に存在する該データベースステートメントが、独立したＲＴＮビルディングブロックから形成されたＲＴＮの情報を有しており、
ここで、各ＲＴＮビルディングブロックは、少なくとも一つの決定経路上に少なくとも一つの決定ポジションを有する他のＲＴＮビルディングブロックの内部の有向決定グラフとは独立して定義される内部の有向決定グラフを有しており、
選択ステップにおいてキーワードを用いて、全てのＲＴＮビルディングブロックの内部決定グラフが実行され、それぞれに選択される経路との一致が該決定グラフによって決定されず当該処理が中断されるか、またはそれぞれに選ばれる経路が最後まで実行されるかのいずれかまで、この決定グラフのありうる全ての経路がたどられ、
ここで該決定経路は、少なくとも部分的に、該決定ポジションの少なくとも一つにおいて再帰呼び出し関数を有しており、該再帰呼び出し関数を通じて、該ＲＴＮビルディングブロックの一つが、全てのＲＴＮビルディングブロックに対する選択ステップの適用の結果として実行されるため、該決定ポジションの該少なくとも一つから始まる、選択ステップの任意の頻繁に再帰的にネストされた実行が可能となり、
ここで該決定経路の少なくとも一部は、該決定ポジションの少なくとも一つにおいて再帰呼び出し関数を有しており、該再帰呼び出し関数を通じて、該ＲＴＮビルディングブロックの一つが、全てのＲＴＮビルディングブロックに対する選択ステップの適用の結果として実行されるため、該決定ポジションの該少なくとも一つから始まる、選択ステップの任意の頻繁に再帰的にネストされた実行が可能となること、および、
クエリステートメントの全てのキーワードに対する選択ステップの適用の結果として、該ＲＴＮビルディングブロックの順序およびそれらのネスティングから、該関係データベースシステム用のアクセスプランが生成されることである、
前記データキャリアまたは電子キャリア信号。
【請求項２４】
請求項１から２０のいずれか１項に記載の方法を実行するように調整された命令を有するコンピュータプログラム。
【請求項２５】
コンピュータに読み込み可能な媒体を有するコンピュータプログラム製品であって、当該コンピュータプログラム製品は、コンピュータが、請求項１から２０のいずれか１項に記載のコンピュータプログラムを読み込んだ後には毎回、当該方法を実行するためのプログラムによって促されるコンピュータプログラムコード手段を有するものである、
前記コンピュータプログラム製品。
【請求項２６】
電子キャリア信号上にコンピュータプログラムを有するコンピュータプログラム製品であって、
コンピュータが、当該コンピュータプログラムの読み込み後に、毎回、請求項１から６のいずれか１項に係る発明の方法を実行するよう、該プログラムによって指示されるものである、
前記コンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、関係データベース（リレーショナルデータベース）システムを制御するための方法に関し、キーワードからなるクエリステートメントが再帰遷移ネットワーク（recursive transition network）（ＲＴＮ）を適用することによって最初に解析され、該再帰遷移ネットワークでは、キーワードまたはキーワードのグループが、該ステートメントによって与えられる順序で処理に関連するプロパティ（特性）を割り当てられ、その後に続いて、制御コマンドへの変換およびオプションでの最適化が行われる。
【０００２】
本発明はさらに、関連する関係データベースシステム、該関係データベースシステム用の制御情報を含む関連するデータキャリアまたはキャリア信号、ならびに、前述の方法を実行するための関連するコンピュータプログラムおよびコンピュータプログラム製品に関する。
【背景技術】
【０００３】
関係データベースシステムは、大部分がＳＱＬに基づいており、該ＳＱＬは、その高い伝搬レベルおよび絶え間ない進歩にも関わらず、より複雑なクエリを処理する場合にクエリステートメントを定式化するのに難があり、また、文法的に自由度が制限されていることから、不必要に複雑な問題記述およびその結果として最適でないアクセスコードが生じ、それに伴ってストレージ集約的、ハードディスクアクセス集約的およびプロセッサ集約的な処理が生じる。
【０００４】
ＳＱＬは、セット処理(set-processing)クエリ言語であり、各ステートメントおよびサブステートメントのそれぞれについての自由に定義可能な入力量に、各ステートメントおよびサブステートメントのそれぞれに対するある固定された順序で、予め定められたセット処理関数を適用する。
【０００５】
ＳＱＬの適用におけるこの相対的な制限は、基礎となっているＲＴＮ（再帰遷移ネットワーク）の論理から生じており、該ＲＴＮの論理の処理は、与えられる決定グラフ（decision graph）に沿って行なわれており、該与えられる決定グラフにより、各キーワードの後のキーワードの選択の制限が可能となると同時に、キーワードの順序が固定または大部分固定され、かつ、予め定められた決定ポジション（decision position）において決定グラフ全体が再帰的に使いやすくなる。この与えられる順序により、ステートメントの処理は、決定グラフ全体の、自己ネスト（self-nested）および／または自己連結した（self-concatenated）全実行のみによって記述されることができ、それにより、特にＳＱＬ、ＯＱＬなどを用いる場合、定義された処理ブロックの処理は、決定グラフによって定められた順序によって可能であるが、一方で、順序が自由に選択可能かつ繰り返し可能である新たな処理ブロックを導入することは不可能である。
【０００６】
上述した本来的に有効であるＲＴＮの制限を有するＳＱＬは、チューリング完全であるように設計されてきたとはいえ、実際には、相当な数のクエリが専門家にとっても実行が難しく、それゆえ、理論的に可能な処理時間と比べて長い処理時間を招くことが多く、ＳＱＬのＲＴＮは、定式化およびクエリステートメントの使用における自由度を許容していないため、理論的に可能な処理時間を達成することができない。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従って、本発明の目的は、クエリ言語において種々の困難のレベルにある事実の簡単かつ簡明な記述、および、改善されたアクセスプランの確立を可能とし、その結果として、クエリ結果の計算および実行をそれぞれはるかに高速に行なうことができる、上述したような種類の方法を提示することである。
【０００８】
本発明のさらなる目的は、ユーザーおよびサードパーティーにとっての理解および明確さを増し、かつ、例えばある問題から開始して更なる類似の問題が与えられる場合に、現存のステートメントの修正または調整を容易に達成することを可能とする方法を提示することである。
【０００９】
容易な適用性を確実にするために、本発明の方法はまた、グラフィカルインターフェースで表示するのを容易にすべきである。
【００１０】
当該方法の基礎であるクエリ言語を適用するための新たな処理関数の定義およびアップグレードのそれぞれは、容易に行えるようにすべきである。
【課題を解決するための手段】
【００１１】
これは、本発明によって、次のように達成される。
独立したＲＴＮビルディングブロック（複数）からＲＴＮを形成し、各ＲＴＮビルディングブロックは、内部の有向決定グラフを持つものであり、該グラフは、他のＲＴＮビルディングブロックの内部の有向決定グラフ（inner, directed decision graph）とは独立して定義され、少なくとも一つの決定経路（decision path）上に少なくとも一つの決定ポジションを有するものであり、
選択ステップにおけるキーワードを用いて、全てのＲＴＮビルディングブロックの内部決定グラフを実行し、個々の経路との一致（match）が該決定グラフによって決定されず当該処理が中断されるか、またはそれぞれに選ばれる経路が最後まで実行されるかのいずれかまで、この決定グラフのありうる全ての経路をたどり（following）、
ここで該決定経路の少なくとも一部は、該決定ポジションの少なくとも一つにおいて再帰呼び出し関数を有しており、該再帰呼び出し関数を通じて、該ＲＴＮビルディングブロックの一つが、全てのＲＴＮビルディングブロックに対する選択ステップの適用の結果として実行されるため、該決定ポジションの該少なくとも一つから始まる、選択ステップの任意の頻繁に再帰的にネストされた実行が可能となり、
かつ、全てのキーワードでの選択ステップの適用の結果として、該ＲＴＮビルディングブロックの順序およびそれらのネスティングから、該関係データベースシステム用のアクセスプランを生成することによって達成され、
また、少なくともコンピュータシステムを有する関係データベースシステムによって達成され、該コンピュータシステムは、少なくとも関係データベース、少なくともデータ処理ユニット、および、少なくともメモリを有し、前述の本発明の方法に従って動作するようにプログラムに基づくように構成される。
【００１２】
このようにして、ＳＥＬＥＣＴ、ＦＲＯＭ、ＷＨＥＲＥ、ＧＲＯＵＰ  ＢＹ、ＨＡＶＩＮＧ、ＯＲＤＥＲ  ＢＹ、ＬＩＭＩＴ、ＵＮＩＯＮなどの予め定められた処理領域および処理順序を有するＳＱＬやＯＱＬなどのクエリ言語において、これまでの高い構造的な度合いを適用することなく済ませることができる。デカルト積がクエリのＦＲＯＭ部分で形成され、デカルト積の特定の行がＷＨＥＲＥ部分で除かれ、特定のデータフィールドがＧＲＯＵＰ  ＢＹ部分で結合され、特定の行がＨＡＶＩＮＧ部分でグループ計算の結果を用いることによって除かれ、ソートがＯＲＤＥＲ  ＢＹによって行われ、かつ、セットがＵＮＩＯＮまたは、セットを結び付けるその他の演算で結合される、ＳＱＬにおいて適用されるこのモデルによって、必要とされるチューリング完全が達成され得るため、データに関連する全ての解決可能な問題を理論的には定式化することができるが、それにも関わらず、複雑性が高いため、中等度に困難なタスクから始めて困難なタスクまで、ユーザーの能力に依存して、現実にはうまくいかない。加えて、あり得る全てのクエリのうちの大部分は専門家によって定式化され得るが、それらは各々の問題によって、複雑なやり方でのみ、与えられた処理領域に組み込まれ得る。これは、例えばＳＱＬにおいて、構造および順序が予め定められていることにより、他の方法で行なうことができないためである。処理領域のセットが小さいためにセット処理の直接的な方法を予め定めることが多くの場合において不可能であるため、最悪の方法の多くを回避するのはこの目的のために意図されたオプティマイザー次第であり、個々に適用される記述が最良の方法を決定する。理論的に可能な最良の方法と比較すると、これは、それとは大きく異なるものであり得る。
【００１３】
本発明のさらなる実施形態は、添付の特許請求の範囲において与えられる。以下において、図に示した実施形態によって本発明を詳細に説明する。
【図面の簡単な説明】
【００１４】
【図１】図１は、先行技術のＳＱＬ−ＲＴＮの概略的な表現である。
【図２】図２は、本発明の方法の一つの実施形態のための基礎としての役目を果たすＲＴＮビルディングブロックの概略的な表現である。
【図３】図３は、本発明の方法に従うＲＴＮビルディングブロックの概略的な表現である。
【図４】図４は、本発明の方法に従うＲＴＮビルディングブロックの概略的な表現である。
【図５】図５は、本発明の方法に従うＲＴＮビルディングブロックの概略的な表現である。
【図６】図６は、本発明の方法の更なる実施形態のための基礎としての役目を果たすＲＴＮビルディングブロックの概略的な表現である。
【図７】図７は、本発明の方法の一つの実施形態によるＲＴＮビルディングブロックのネスティングの概略的な表現である。
【図８】図８は、本発明の方法の実施形態で適用される、それぞれ、異なるＲＴＮビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図９】図９は、本発明の方法の実施形態で適用される、それぞれ、異なるＲＴＮビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図１０】図１０は、本発明の方法の実施形態で適用される、それぞれ、異なるＲＴＮビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図１１】図１１は、本発明の方法の実施形態で適用される、それぞれ、異なるＲＴＮビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図１２】図１２は、本発明の方法の実施形態で適用される、それぞれ、異なるＲＴＮビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図１３】図１３は、本発明の方法の実施形態で適用される、それぞれ、異なるＲＴＮビルディングブロックのネスティングおよび特有の形式の、入力セットの割り当ての概略的な表現である。
【図１４】図１４は、本発明の方法の実施形態において適用される、ＲＴＮビルディングブロックのグループの変形の概略的な表現である。
【図１５】図１５は、本発明の方法の実施形態において適用される、ＲＴＮビルディングブロックのグループの変形の概略的な表現である。
【図１６】図１６は、本発明の方法の実施形態において適用される、ＲＴＮビルディングブロックのグループの変形の概略的な表現である。
【図１７】図１７は、本発明の方法の実施形態において適用される、ＲＴＮビルディングブロックのグループの変形の概略的な表現である。
【発明を実施するための形態】
【００１５】
２つの非常に単純な例が、これを説明するのに役に立つだろう。
表（テーブル）“会社(COMPANIES)”を与え、該表は、“会社_名”および“都市”のフィールドを少なくとも含んでいる。
【００１６】
例１
第１の問題：１００より多い会社を有する都市からの全ての会社
【００１７】
ＳＱＬでの一つの可能な記述（先行技術）：
SELECT 会社.*
FROM 会社, (SELECT 会社.都市
FROM 会社
GROUP BY 会社.都市
HAVING (count(*)＞100)
） AS 会社_都市_more_than_100
WHERE (会社.都市＝会社_都市_more_than_100.都市)
【００１８】
会社のセットを受け取り、都市に従って結合し、そして１００より多い会社を有する都市のみを記憶する。このセットは、会社のセットとデカルト（カルテシアン）・リンク（Cartesian linkage）を持っており、そして、そのフィールド「都市」を１００より多い会社を有する都市のセットにおいても見つけることができる会社のみが受け取られる。
欠点：都市のセットを格納しなければならず、また、会社のセットを２度実行し、都市と１度比較しなければならない。
【００１９】
本発明の方法による、ＲＴＮビルディングブロックにおける一つの可能な記述：
SELECT 会社. *
WHERE (会社.都市.WHERE([会社.count]>100)）
【００２０】
会社のセットを受け取り、各会社について、この都市において１００より多い会社が見つかるかどうかを調べる。見つかった都市が出力である。当然、当該処理は、オプティマイザー（最適化プログラム）によって、充分に良く定式化される。
【００２１】
例２
第２の問題：各都市から無作為な１００の会社
【００２２】
ＳＱＬでの一つの可能な記述（先行技術）：
SELECT*
FROM (
SELECT 会社.*,row_numberate() OVER 会社.都市 AS 都市_の_会社
FROM 会社
)
WHERE (都市_の_会社<=100)
【００２３】
会社のセットを数え、各都市で再び開始し、それを一つのセットに格納し、そして、数えた結果（numeration）が<=100であるこのセットからの全ての要素を受け取る。
【００２４】
本発明の方法による、柔軟性のあるＲＴＮビルディングブロックを用いた一つの可能な記述：
SELECT 会社.*
BREAKON 会社.都市
FIRST #100
【００２５】
会社のセットが対応するテーブルから受け取られる。BREAKON が指し示すのは、同一の都市からの各会社に対して、次に続く関数を適用することを示しており、即ち、各都市からの FIRST 100 （最初の１００）の会社である。
【００２６】
図１は、クエリ言語ＳＱＬのSELECTコマンドについての単純化した先行技術の決定グラフを示しており、図１から、ＳＱＬ用のＲＴＮの概略的な構造が明確になる。
【００２７】
各クエリステートメントは、固定して予め定められた順序の、必須に連続に配置された処理領域４０、４１、４２、４３、４４、４５から形成され、これらはキーワード２０、２１、２３、２４、２５、２６、２７、２８、２９、３０、３１を持っており、処理領域４２、４３、４４および４５の導入キーワード２４、２６、２８、３０のみが所望のクエリ結果に到達する単純化のために、或る選択したキーワードのみが決定ポジション１０、１１、１２、１３で選ばれる。キーワードのあるグループが各処理領域（例、FROM（キーワード２２、２３）、WHERE（キーワード２４、２５）、GROUP BY（キーワード２６、２７）など）を形成し、各処理領域が割り当てられたセット処理関数を実行し（例、FROMはデカルト積を形成する）、それにより特有のJOINが可能となる。
【００２８】
各導入キーワード２０、２２、２４、２６、２８、３０の後に、さらなるキーワード（明快にするために図１には示していない）が続いてもよい。従って、例えば、キーワード２４“WHERE”の後に、キーワード“（”、“NOT”、テーブル名、テーブルスペース名、定義関数などが、直接その後に続いてもよい。SUBSELECT、即ち、例えば“（”による、常にSELECT（キーワード２０）において始まるＲＴＮの再帰的適用は、常に、予め定められた決定ポジションにおいて現れ得る。それゆえ、そのようなポジションでは、常にＲＴＮ全体のみがユニットとして再帰的に使用され得る。
【００２９】
潜在的には複数のキーワードが選択可能であるにも関わらず、ＳＱＬおよび関連するクエリ言語ではかなり制限されており、また、予め定められた処理順序での与えられた処理領域によるそのトランスクリプションがかなり複雑で冗長である様々なクエリがあり、それが、この記述から、現実に必要とされるよりも複雑かつ遅いアクセスプランが生成される理由となっている。
【００３０】
図２は、本発明が基礎としているＲＴＮの概略的な表現を一例で示しており、ＲＴＮは独立したＲＴＮビルディングブロック５０、５１、５２、５３、５４、５５（その個数は、所望により拡大することができる）から形成されている。図２は、一例として、単純化されたＲＴＮビルディングブロックを示しており、そのそれぞれは、対応する少数の決定ポジションを有するわずか一つの単一の決定経路７９を有している。
【００３１】
各ＲＴＮビルディングブロック５０、５１、５２、５３、５４、５５は、セットの要素の順序が定義された割り当てられた処理入力セットの入力データセットにアクセスし、これらを処理し、そして、これもまたセットの要素の順序が定義されている少なくとも一つの出力データセットを有する新たな処理出力セットを提供し、ここで、該出力データセットは、それらの値に関して、必ずしも該入力データセットから逸脱するものではない。それぞれの場合における処理は、キーワード６１“WHERE”、キーワード６２“ORDERBY”、キーワード６３“FINDFIRST”、キーワード６４“=”、キーワード６６“#”およびキーワード６７（例、当該関係データベースで利用可能なテーブルフィールド名）などの、決定ポジションにあるキーワードに基づく。
【００３２】
ＲＴＮビルディングブロック５０、５１、５２、５３、５４、５５における*で印を付けた決定ポジション７０では特殊な関数(special function)が実行されるが、それは即ち、利用可能な全てのＲＴＮビルディングブロックの選択全体からの任意のＲＴＮビルディングブロックがこのポジションに導入され、当該処理の間に実行されるということである。
【００３３】
例３
FROM 会社
WHERE 会社.都市＝“ウィーン”
ORDERBY 会社.従業員_の_NO.
FINDFIRST (会社.売り上げ_前_年>20,000)#100
【００３４】
FROMは、データセットを与え、データセットは、この例では、表「会社」である。
【００３５】
WHERE（ＲＴＮビルディングブロック５０におけるキーワード６１）は、入力データセット 会社の全てのセットの要素を受け取るが、この処理関数は、データ入力およびデータ出力のいずれにおいても順序に影響を与えず、かつ、それ自身の順序にも影響を与えない。図２から明らかなように、ＲＴＮビルディングブロック５０では、WHEREは、“*”で印を付けた決定ポジション７０に続き、そこにおいて、全ての定義されたＲＴＮビルディングブロックからの任意のＲＴＮビルディングブロックが導入され、実行される。
【００３６】
WHEREは、入力データセットから、決定ポジション７０で導入されたＲＴＮビルディングブロックが、各データ記録に関して渡された値のセットで実行された後に、０でもＺＥＲＯでもない少なくとも一つの値を生じるデータ記録のみを、このＲＴＮビルディングブロックのためにここで用いられる定義に対応して、出力データセットとして与える（各ＲＴＮビルディングブロックは少なくとも一つの値を有するセットを出力するため）。
【００３７】
少なくとも一つの値が０でもＺＥＲＯでもないものでなければならないこと、あるいは厳密には、０またはＺＥＲＯである値であってはならないことが、決定ポジション７０の値のセットにおける選択基準として定義されることを規定するために、例えばＲＴＮビルディングブロック５０に対するさらなる任意選択の決定ポジションを付加すること、または、別個のビルディングブロックを定義することが好適であろう。
【００３８】
例３によれば、ＲＴＮビルディングブロック５３は、決定ポジション７０において導入され、該決定ポジション７０において、それぞれの場合について、（図２のＲＴＮビルディングブロックを用いることにより、）決定ポジション７０“*”の両方においてさらなるＲＴＮビルディングブロックが導入される。
【００３９】
例３では、ＲＴＮビルディングブロック５０は、テーブルフィールド 都市に “ウィーン”と書いてある会社のみを渡す。
【００４０】
ORDERBY（ＲＴＮビルディングブロック５１におけるキーワード６２）
処理入力セットの要素は、各要素に関する決定ポジション７０に由来する値に従ってソートされ、該ＲＴＮビルディングブロックは、処理入力セットの要素を、適切にソートされた順序で処理出力セットとして渡す。例３では、ソートは、従業員の人数に従って行われる。
【００４１】
FINDFIRST（ＲＴＮビルディングブロック５２におけるキーワード６３）
このＲＴＮビルディングブロックは、例えばORDERBY ＲＴＮビルディングブロックによって渡されたとおりにソートされた順序で入力データセットを受け取り、そして、決定ポジション７０で導入されたＲＴＮビルディングブロックが、各要素に関して渡された値のセットで実行された後に、０でもＺＥＲＯでもない少なくとも一つの値を生じる要素のみを、この順序を考慮することによって、また、この順序の考慮のもとで、見つけ、そして、入力のソートの順序に従って、見つかった要素を出力する。
【００４２】
#（ＲＴＮビルディングブロック５４におけるキーワード６６）
例３では、ＲＴＮビルディングブロック５２（“FINDFIRST”）が、１つ目の決定ポジション７０の代わりに、上位とされたＲＴＮビルディングブロックであるＲＴＮビルディングブロック５４において導入される。この定義では、ＲＴＮビルディングブロック５４は、１つ目の決定ポジション７０の実行に由来して渡される全ての要素が第２の決定ポジション７０において記述された要素の個数に制限されることを指示する。
【００４３】
例４から分かるように、ＲＴＮビルディングブロック５４（“#”）の、ＲＴＮビルディングブロック５４（“#”）中に組み込まれた形での適用は、定義により許容可能である。
【００４４】
例４
(5, 3, 2, 9) #3 #2
ステップ#3に由来して、最初の３つの要素が受け取られ、従って、出力データセットとして(5, 3, 2)が渡され、それが#2のための入力データセットとなる。#2からの結果は(5, 3)である。
【００４５】
=（ＲＴＮビルディングブロック５３におけるキーワード６４）
本例では、ＲＴＮビルディングブロック５０において、ＲＴＮビルディングブロック５３が、キーワード６１（WHERE）の後で決定ポジション７０において導入され、従って、WHERE * = *となる。
【００４６】
テーブルフィールド名（ＲＴＮビルディングブロック５５におけるキーワード６７）
都市、従業員_の_NO.、売り上げ_前_年は、表のフィールド名であり、これは、任意の決定ポジション７０にあってよい。
【００４７】
既に述べたように、各ＲＴＮビルディングブロック（図２の５０、５１、５２、５３、５４、５５においても）は、少なくとも一つの決定経路７９を有する内部の有向決定グラフを持つ。図２に従う例では、それぞれの場合において、厳密には、一つの決定経路が、分岐を持たない各ＲＴＮビルディングブロック５０、５１、５２、５３、５４、５５の中を走り、図２からの決定グラフは、上から始まって下へ進む。
【００４８】
ＲＴＮビルディングブロック５０、５１、５２、５３、５４、５５の各決定グラフは、他のＲＴＮビルディングブロック５０、５１、５２、５３、５４、５５の内部の有向決定グラフとは独立して定義され、また、決定経路上には１つ以上の決定ポジション７０があっても良い。
【００４９】
以下において、可能なさらなるＲＴＮビルディングブロックを説明するが、これらは、部分的には、より複雑な決定グラフを必要とする。
【００５０】
図３はＲＴＮビルディングブロック１５０を示しており、これは、処理入力セットによって、上位付けされたセットの各要素に対し、個別に計算されるという特徴を持つ処理出力セットを渡す。決定ポジション７０に、任意のＲＴＮビルディングブロックを導入することができる。説明する決定グラフを用いることにより、矢印で示しているように、角括弧１６１、１６２の間で所望の回数だけ連続的にこのポジションが実行されることが可能であり、ここで、ＲＴＮビルディングブロックの選択全体からの一つが各実行時に導入される。この状況における上位付けされたセットとは、このＲＴＮビルディングブロックが決定ポジション７０で導入されるところの上位付けされたＲＴＮビルディングブロックの処理入力セットである。
【００５１】
例５
[
SELECT COMPANIES.会社_名
WHERE [
部門.COUNT
WHERE (会社.会社_ID=部門.会社_#)
]>3
]
【００５２】
ここでは、全ての会社のセットは上位付けされたセットであるため、部門のセット全体から、各会社に割り当てられてカウントされる部門のみが各会社のために与えられる。３つより多くの部門を有する会社のみが受け取られる。
【００５３】
例５に従うステートメントを、以下のビルディングブロックに変形しても良い。
【００５４】
ＲＴＮビルディングブロック１５０の適用：この例における［*（繰り返し）］は、［ * * ］を与え、
ここで、
* .........SELECT *１
* .........WHERE *１
である。
【００５５】
この定義による「角括弧」は、該角括弧に含まれているセットを受け取り、そして、処理されている処理入力セットの要素および導入されたＲＴＮビルディングブロックが、ＲＴＮビルディングブロック１５０の決定経路上で実行され、これは、該処理入力セットの要素があるのと一致した回数だけ行われる。この１つ目のＲＴＮビルディングブロック１５０は上位付けされたＲＴＮビルディングブロックを持たないため、この１つ目のＲＴＮビルディングブロックが１回だけ実行されるように、一つの要素を有する仮想の処理入力セットが仮定されている。
【００５６】
SELECT *1の処理入力セットは、会社(COMPANIES)であり、それは、これらがSELECTのパラメータとして記載されているからである。
【００５７】
WHERE *1の処理入力セットは会社でありが、それは、ＳＱＬ標準との互換性の理由から、SELECTに代表される表示関数は、常に最後に行われ、ステートメントにおいて決して前には記述され得ないためである。
【００５８】
WHERE *1はＲＴＮビルディングブロック５０に対応しており、決定ポジション７０は、処理入力セット（すなわち、会社）の各要素に対して値のセットが計算される選択全体からのＲＴＮビルディングブロックを要求する。当該の場合（例５）における決定ポジション７０において、次のＲＴＮビルディングブロックが導入される：
*２ （決定ポジション７０） > （文字列） *２ （決定ポジション７０）
【００５９】
１つ目の星印 *２ （決定ポジション７０）は、ＲＴＮビルディングブロック１５０を再び導入するが、今度はこれが、[ *３ *３ ]（すなわち、複合の１つ目の星印 *３ ＝ 部門.COUNT、および、複合の２つ目の星印 *３としてWHERE （会社.会社_ＩＤ ＝ 部門.会社_#））を有している。
【００６０】
“>”の後の２つ目の星印 *２ （決定ポジション７０）は、一つの値（すなわち、３）を有する値のセットを含んでいる。
【００６１】
例５と同様にして、さらなるＲＴＮビルディングブロックへの変換が継続される。
【００６２】
以下では、異なる抽象化を用いて例５と同じ問題を記述し、且つ、例５と同じ方法で最適化することができて同一の処理プランを渡す、この例のための２つの代替的な表記法を示す。
【００６３】
例６
[SELECT 会社.会社_名
WHERE [
部門
WHERE (会社.会社_ID = 部門.会社_NO.)
].COUNT>3
]
【００６４】
例６では、各会社に関する部門のセットが実行され、マッチ（一致）する要素が、現在の会社に従ってＲＴＮビルディングブロック１５０の処理出力セットとして渡され、“COUNT”によってカウントされ、そして＞３と比較される。
【００６５】
例７
[SELECT 会社.会社_名
WHERE [
部門.WHERE (会社.会社_ID = 部門.会社_NO.).COUNT
] > 3
]
【００６６】
例７では、各会社に関する部門のセットが実行され、一致（一致）する要素の個数が、現在の会社に従ってＲＴＮビルディングブロック１５０の処理出力セットとして渡され、＞３と比較される。
【００６７】
角括弧の定義をさらに説明するために、例１と同じ問題（即ち、１００より多い会社を有する都市からの全ての会社）に答える別の例を与える。
【００６８】
例８
[SELECT 会社.会社_名,会社.住所
WHERE [会社 AS 会社2
WHERE 会社.都市 = 会社2.都市
].COUNT > 100]
【００６９】
この例は、各要素 会社についてセット 会社がアクセスされ、それにより同一の都市をカウントすることが可能となるという特徴を持つ。
【００７０】
以下では、異なる抽象化ではあるが同一の最適化されたアクセスプランを有する、３つの代替的な表記法を示す。
【００７１】
例９
[SELECT 会社.会社_名, 会社.住所
WHERE 会社.都市.[会社.COUNT] > 100]
【００７２】
１００より多い会社が見つかる都市における全ての会社を受け取る。
【００７３】
例１０
[SELECT 会社.会社_名, 会社.住所
GROUPBY 会社.都市
WHERE [会社.COUNT] > 100
END GROUPBY]
【００７４】
異なる各都市に関して会社．都市をGROUPBYによって結合し、結合された各要素に関してこの都市の会社を記憶する。［会社.count］によって各要素の都市に対していくつの会社が割り当てられているかをカウントし、そしてWHEREによって１００より多くの会社を割り当てられている都市のみを受け取る。END GROUPBYが意味するのは、各都市についての結合を止め、代わりに、該都市に割り当てられた会社を使用することである。１００未満の会社を有する都市であったならば処理されないため、これらの会社もまた、これ以上は処理されない。
【００７５】
例１１
[SELECT 会社.会社_名, 会社.住所
BREAKON 会社.都市
WHERE COUNT > 100]
【００７６】
ＲＴＮビルディングブロック“BREAKON *”は、その処理入力セットの各要素に対して、その処理出力セットにおけるいくつかの出力データセットへの分割を与える。生じた出力データセットは、決定ポジション７０（*）に導入されたＲＴＮビルディングブロックのために対応する同一の処理出力セットを再び渡す該処理入力データセットの要素がそれぞれ、対応する同一の出力データセットに導入されるようにして、および、出力データセットの個数が、ＲＴＮビルディングブロックBREAKONの決定ポジション７０（*）における異なる値の個数と同じになるようにして、処理出力セットにおいて結合される。
【００７７】
当該の場合（例１１）においては、BREAKONのための決定ポジション７０は“会社.都市”であり、それに由来して、存在する都市の個数に一致するデータセットの個数が生じる。
【００７８】
BREAKONの後の他の処理関数は常に、入力データセットがこれらの出力データセットと関係しており、一つ一つの入力データセットに対して独立してそれらの処理関数を適用し、特定のＲＴＮビルディングブロック（例えば、”END BREAKON“）に到達するまで同数の出力データセットを次々に与える。それが、その処理入力セットの全ての入力データセットが、その処理出力セットにおいて、一つの単一の出力データセットに結合されるということを指し示す。
【００７９】
上記例１１については、各都市についての全ての会社はそれぞれ、それら自身のセットに書き込まれ、後続するWHEREがこれらのセットのそれぞれに対して独立して適用され、それは、現在の入力データセット（都市）においていくつの要素（会社）があるかを、各入力データセットに関してカウントするためである。現在の入力データセットの都市において１００より多い会社がある場合には、この都市についての入力セット全体が採用され、そしてこの後で、この出力データセットの全ての会社が、SELECTにより表示される。
【００８０】
別の例が第一に示しているのは、データセット内のデータ全体に対して処理関数を適用し、それに続くのは、いくつかのデータセットへの分割、次いで、各データセットに対して個別に適用される処理関数であり、その後、データセット全体を参照する最後の処理関数によって一つのデータセットへ結合するというものである。ＳＱＬと比較すると、定式化記述(formulation)がより短く、かつ、現在の問題に対してより具体的に追従し、なおかつ、処理が改善されており、その理由は、個々のＲＴＮビルディングブロックがユーザーがどのような種類の結果を期待しているかを非常に具体的に記載しており、一時的なテーブルで作業する必要がないからである。
【００８１】
例１２
[SELECT 会社.都市_名, 会社.住所    （０）
WHERE 会社.削除済 = FALSE          （１）
BREAKON 会社,都市                  （２）
WHERE COUNT > 100                  （３）
END BREAKON                        （４）
MAX 会社.売り上げ2006 # 1000       （５）
］
【００８２】
（１）会社のセット全体から、削除されていない会社のみを選択する。
（２）対応する同一のデータセットにおける同一の都市に従って、削除されていない会社のセットを格納する。
（３）各データセットをカウントし、１００より多い要素が存在するデータセットのみを用いて続ける。いまや、１００より多い会社があるデータセット（この場合、都市）のみが残される。
（４）一つのデータセット中に全ての個々のデータセットを再び書き込むとは、１００より多い会社を有する全ての都市の全ての会社を、一つのデータセットに書き込むことを意味する。
（５）これらの会社から、全体の中で、最も良い売り上げを持つ１０００の会社に属する会社のみを選ぶ。
（０）SELECTにおいて定義されたテーブルフィールドを渡す。
【００８３】
図４は、キーワード１６３“ALL”および１６４“ANY”を有するＲＴＮビルディングブロック１５１を示しており、これらは、既に以前に示したように、少なくとも一つの値がnot ０および not ＺＥＲＯ(ANY)でなければならないか、あるいは正確にどの値も０またはＺＥＲＯ（ALL）であってはならないようにして、決定ポジション７０において導入されるＲＴＮビルディングブロックの値のセットにおいての選択基準として定義されている。
【００８４】
ＲＴＮビルディングブロック１５１はまた、ある値のセット（キーワード１６８）の、EXACTLY（キーワード１６７）、AT LEAST（キーワード１６６）またはA MAXIMUM OF（キーワード１６７）がゼロ（zero）またはＺＥＲＯであってはならないこと（“ANY”の場合）、あるいは、（“ALL”の場合には、）exactly（キーワード１６７）／at least（キーワード１６６）／a maximum of（キーワード１６５）を除く全ての値がそれぞれゼロおよびＺＥＲＯであるセット（キーワード１６８）でなければならないことを記述することを可能とする。
【００８５】
ＲＴＮビルディングブロックの適用における柔軟性は、以下の通りに、既述のＲＴＮビルディングブロック１５１を用いることによって示すことができる。基本の定義においてANYとは、処理入力セットの現在の要素についての値のセットの少なくとも一つの値がマッチ（一致）して、ゼロでもＺＥＲＯでもないものでなければならないことを意味している。しかしながら、この関数は、必要であれば、一つ若しくは複数のさらなる上位付けされるまたは導入されるＲＴＮビルディングブロックの各々の修正を許容することによって拡張されてもよい。
【００８６】
例１３
会社.WHERE ANY [担当_者 WHERE (会社.会社_ID = 担当_者.会社_NO.)].性別 = “男性”
【００８７】
ANYは、（例１３では、WHEREのポジションにおける）処理関数の少なくとも一つの値が、少なくとも一つのゼロではない値を持たなければならないことを指し示し、従って、少なくとも一人の男性担当者がいる全ての会社を渡す。
【００８８】
例１４
会社.WHERE ANY (<=3) [担当_者 WHERE (会社.会社_ID = 担当_者.会社_NO.)].性別 = “男性”
【００８９】
(<=3)という拡張を伴うANYが意味しているのは、（例１４では、WHEREのポジションにおける）処理関数の最大３つの値が、少なくとも一つのゼロではない値を持たなければならず、従って最大で３人の男性担当者がいる全ての会社を与えるということである。
【００９０】
例１５
会社.WHERE ALL [担当_者 WHERE (会社.会社_ID = 担当_者.会社_NO.)].性別 = “男性”
【００９１】
ALLが意味しているのは、処理関数の全ての値（例１５では、WHEREのポジションにおけるもの）が、正確にゼロではない(not ZERO)値を持ってはならないということであり、従って、男性担当者のみ(ONLY)である全ての会社を与えるということである。
【００９２】
例１６
会社.WHERE ALL (<=3) [担当_者 WHERE (会社.会社_ID = 担当_者.会社_NO.)].性別 = “男性”
【００９３】
(<=3)という拡張を伴うALLが意味しているのは、（例１６では、WHEREのポジションにおける）処理関数の最大３つの値を除いた全てが、ゼロではない値を持つということであり、従って、最大で３人の女性担当者がいる全ての会社を与えるということである。
【００９４】
図５は、出力データセットの計算のために、IF THEN ELSE条件を使用するＲＴＮビルディングブロック１５２を示している。
【００９５】
例１７
SELECT 会社.会社_名, 会社.都市
IF 会社.従業員_の_数< 100
THEN WHERE 会社.売り上げ2006 >
IF 会社.ZIP = 1010 THEN 500,000 ELSE 300,000
ELSE MAX 会社.売り上げ_2006 # 1000
END IF
ORDERBY 会社.会社_名
【００９６】
この例についての問題は、次の通りである。全ての会社を記述し、ここで、１００人未満の従業員を有する会社は、正確に１００人または１００人より多くの従業員を有する会社と比べて他の基準を有している。
会社が１００人未満の従業員を有する場合、売り上げ２００６が、郵便番号（ZIP）に従って比較されるが、ZIP １０１０では、売り上げは > 500,000でなければならず、一方、他の全てのZIPでは、300,000の売り上げと比較される。
少なくとも１００人の従業員を有する会社の中で、２００６年の売り上げが、全会社のうちで１０００の最も大きな売り上げに入る会社のみが選択される。
【００９７】
図５におけるＲＴＮビルディングブロック１５２は、２つの必須な、そして１つの任意選択の（キーワード１７２の後）（ELSE）決定ポジション７０を有しており、そこで全てのＲＴＮビルディングブロックからのＲＴＮビルディングブロックが導入され、キーワード１７０（IF）および後続する決定ポジション７０が、このＲＴＮビルディングブロックが、処理入力セットの現在の要素に関して、このＲＴＮビルディングブロックの処理出力セットとして、キーワード１７１（THEN）の後の決定ポジション７０、または、キーワード１７２（ELSE）の後の決定ポジション７０のいずれを返すのかを決定する。キーワード１７２（ELSE）および、その結果として決定ポジション７０が記述されない場合は、この決定ポジション７０についての処理出力セットとしては、TRUE（-1）が仮定される。
【００９８】
従って、キーワード１７３（END）および１７４（IF）は任意選択（optional)であり、それは、これらのキーワードは明確化のために記述され得るとはいえ、ＲＴＮビルディングブロック１５２の最後は、正確に一つの（EXACTLY ONE）決定ポジション７０によって定義されるためである。
【００９９】
キーワード１７０と１７１との間、またはキーワード１７１と１７２との間、またはキーワード１７２と１７３との間のそれぞれに、いくつかの決定ポジション７０が連続的に導入される場合、２つの可能性がある。
【０１００】
第１の可能性は、キーワード１７３（END）および１７４（IF）を固定して決定し、その結果として、このＲＴＮビルディングブロックの各決定ポジション７０において任意の回数だけ繰り返すことができる呼び出しを可能とするというものであろう。
【０１０１】
ここで選んだ第２の可能性は、少なくとも一つのキーワードで始まって少なくとも１つのキーワードで終了するＲＴＮビルディングブロックであって、これらのキーワードの間に、任意の回数だけ呼び出し可能な正確に一つの決定ポジション７０を有する前記ＲＴＮビルディングブロックを使用するということであろう。このＲＴＮビルディングブロックでは、あらゆる所望のＲＴＮビルディングブロックを記述することができ、また、各々のＲＴＮビルディングブロックを、該決定ポジションにおける他の全てのＲＴＮビルディングブロックにおいてのみならず、ＲＴＮビルディングブロック１５２において導入することができる。
【０１０２】
例１８
図６は、一例として、単純化の目的のために、総数が制限されていることが仮定された、互いに隣接して定義されたＲＴＮビルディングブロック２５０、２５１、２５２、２５３、２５４、２５５を示している。
【０１０３】
使用されるキーワードであるＡ、Ｂ、Ｃを持った、１０個のキーワードを有する次のステートメントが、例１８のための基礎として役に立つ。
ＢＡＣＣＣＢＡＣＣＡ
【０１０４】
本発明の方法に従う選択ステップでは、ＲＴＮビルディングブロック２５０から２５５までの全ての内部決定グラフがキーワード２６１から２７１までを用いて実行され、そして、決定グラフを通るそれぞれに選ばれた経路７９とのマッチ（一致）が見つからずに処理が停止されるか、または、それぞれに選ばれた経路７９が最後まで実行されるかのいずれかまで、これらの決定グラフのありうる全ての経路７９がたどられる。
【０１０５】
この処理は、以下の１０個のステップからなるが、ステップの個数はキーワードの個数と対応しており、また、この処理を、最後の１０ステップの結果として図７に図式的に示している。
【０１０６】
ステップ１
当該ステートメントにおける１つ目のキーワードである“Ｂ”を、ＲＴＮビルディングブロック２５０、２５１．．．における各１つ目のキーワードと比較すると、マッチ（一致）するものが以下で見つかる：
ＲＴＮビルディングブロック２５０ → キーワード２６１（“Ａ”）ではマッチしない
ＲＴＮビルディングブロック２５１ → キーワード２６３（“Ａ”）ではマッチしない
ＲＴＮビルディングブロック２５２ → キーワード２６５（“Ｂ”）
ＲＴＮビルディングブロック２５３ → キーワード２６８（“Ｂ”）
ＲＴＮビルディングブロック２５４ → キーワード２６９（“Ｂ”）
ＲＴＮビルディングブロック２５５ → キーワード２７１（“Ｃ”）ではマッチしない
このため、ＲＴＮビルディングブロック２５２、２５３、２５４のみが、たどられる。
結果（現在の位置に下線を引いている）
ＲＴＮビルディングブロック２５２    Ｂ * Ｃ
ＲＴＮビルディングブロック２５３    Ｂ * Ａ
ＲＴＮビルディングブロック２５４    Ｂ Ａ *
【０１０７】
ステップ２
当該ステートメントにおける次のキーワード（“Ａ”）が使用され、各々のＲＴＮビルディングブロックの現在の２番目のポジションにおけるマッチ（一致）が検索される。この状況における決定ポジション７０（“*”）が意味しているのは、任意のＲＴＮビルディングブロックをこのポジションに導入できるということである。それゆえ、決定経路は、決定ポジション７０において再帰呼び出し関数を持っており、該再帰呼び出し関数によって、全てのＲＴＮビルディングブロックでの選択ステップの適用の結果としてＲＴＮビルディングブロックの一つが実行されるため、選択ステップの再帰的にネストされた(nested、入れ子)実行が、少なくとも一つの決定ポジションから始めて、所望の回数だけ繰り返され得る。従って、決定ポジション７０においては、全てのＲＴＮビルディングブロックからの一つを導入することによってマッチを見つけることができるかどうかも調べなければならない。
ＲＴＮビルディングブロック２５２ → 決定ポジション７０（“Ｂ” “*”）によってフォローされるキーワード２６５
ＲＴＮビルディングブロック２５３ → 決定ポジション７０ （“Ｂ” “*”）によってフォローされるキーワード２６８
ＲＴＮビルディングブロック２５４ → キーワード２６９ （“Ｂ” “Ａ”）
それゆえ、ＲＴＮビルディングブロック２５２における決定ポジション７０では、全てのＲＴＮビルディングブロックからその一つを選択して導入することができる。例えば、ＲＴＮビルディングブロック２５０から２５５までが導入され、そしてそれらが当該ステートメントとマッチするかどうかが調べられるが、１つ目の決定ポジションにおけるマッチは、ＲＴＮビルディングブロック２５０および２５１についてのみ見つけることができる。
２５２に導入された２５０：  Ｂ * Ｃ → Ｂ Ａ Ｂ * Ｃ
２５２に導入された２５１：  Ｂ * Ｃ → Ｂ Ａ Ｃ * Ｃ
２５３に導入された２５０：  Ｂ * Ａ → Ｂ Ａ Ｂ * Ａ
２５３に導入された２５１：  Ｂ * Ａ → Ｂ Ａ Ｃ * Ａ
２５４                      Ｂ Ａ *
【０１０８】
ステップ３
２５２に導入された２５０：  Ｂ * Ｃ → Ｂ Ａ Ｂ* Ｃ    これ以上は続けない
２５２に導入された２５１：  Ｂ * Ｃ → Ｂ Ａ Ｃ* Ｃ    継続する
２５３に導入された２５０：  Ｂ * Ａ → Ｂ Ａ Ｂ* Ａ    これ以上は続けない
２５３に導入された２５１：  Ｂ * Ａ → Ｂ Ａ Ｃ* Ａ    継続する
２５４                      Ｂ Ａ *                    全てのビルディングブロックの導入
結果：
２５２に導入された２５１：  Ｂ * Ｃ → Ｂ Ａ Ｃ* Ｃ
２５３に導入された２５１：  Ｂ * Ａ → Ｂ Ａ Ｃ* Ａ
２５４に導入された２５５：  Ｂ Ａ * → Ｂ Ａ Ｃ
【０１０９】
ステップ４
２５２に導入された２５１：  Ｂ Ａ Ｃ * Ｃ  全てのＲＴＮビルディングブロックの導入
２５３に導入された２５１：  Ｂ Ａ Ｃ * Ａ  全てのＲＴＮビルディングブロックの導入
２５４に導入された２５５：  Ｂ Ａ Ｃ      最後まで達したため、これ以上は続けない
結果：
２５２に導入された２５１における２５５：  Ｂ * Ｃ → Ｂ Ａ Ｃ ＣＣ
２５３に導入された２５１における２５５：  Ｂ * Ａ → Ｂ Ａ Ｃ ＣＡ
【０１１０】
ステップ５
２５２に導入された２５１における２５５：  Ｂ Ａ Ｃ Ｃ Ｃ      継続する
２５３に導入された２５１における２５５：  Ｂ Ａ Ｃ Ｃ * Ａ    任意の種類の、ＲＴＮビルディングブロックにおける決定ポジション７０への到達が可能；
２５３に導入された２５１における２５５    Ｂ Ａ Ｃ Ｃ Ａ      マッチ（一致）するものがなかったため、これ以上は続けない
結果
２５２に導入された２５１における２５５    Ｂ Ａ Ｃ Ｃ Ｃ
２５３に導入された（２５１における２５５、その後に２５５）    Ｂ Ａ Ｃ Ｃ Ｃ Ａ
【０１１１】
ステップ６
２５２に導入された２５１における２５５：  Ｂ Ａ Ｃ Ｃ Ｃ          最後まで達したため、これ以上は続けない
２５３に導入された（２５１における２５５、その後に２５５）  Ｂ Ａ Ｃ Ｃ Ｃ Ａ  マッチ（一致）するものがなかったため、これ以上は続けない
２５３に導入された（２５１における２５５、その後に２５５）  Ｂ Ａ Ｃ Ｃ * Ａ  全てのＲＴＮビルディングブロックの導入
結果：
（２５１における２５５、続いて２５５、続いて２５２）
２５３に導入されたもの                                Ｂ Ａ Ｃ Ｃ Ｃ Ｂ * Ｃ Ａ
（２５１における２５５、続いて２５５、続いて２５３）
２５３に導入されたもの                                Ｂ Ａ Ｃ Ｃ Ｃ Ｂ * Ａ Ａ
（２５１における２５５、続いて２５５、続いて２５４）
２５３に導入されたもの                                Ｂ Ａ Ｃ Ｃ Ｃ Ｂ Ａ * Ａ
など．．．
【０１１２】
ステップ１０の結果
２５３における（２５１における２５５、続いて２５５、続いて２５４における２５５、続いて２５５）
【０１１３】
図７に示した結果から、ステップ１０によって、ＲＴＮビルディングブロックの順序および、クエリステートメントの全てのキーワードでの選択ステップの実行の結果としてのそれらのネスティング(nesting)に従って、当該関係データベースシステムのためのアクセスプランが生成され、ここでＲＴＮビルディングブロックのネスティングは、任意に、他のＲＴＮビルディングブロックの決定ポジション７０でのＲＴＮビルディングブロックの導入の可能性に起因する曖昧さを適切に解決するために、以下に説明する重み（weighting）によって変える必要がある。
【０１１４】
各ＲＴＮビルディングブロックの最後、および、そこに導入されるＲＴＮビルディングブロックに常に明確に示すためには、次のことが必要であり、それは、キーワード（文字列、記号、変数または数字）を要求する少なくとも一つの決定ポジションが、再帰呼び出し関数（これは前もって決定することができない）の無制限の回数の連続的な呼び出しが行われる決定ポジションにおけるＲＴＮビルディングブロックの決定グラフに前置される（prefixed）こと、および、これもまたキーワードを要求する少なくとも一つの決定ポジションが、これに従うことである。
【０１１５】
その一例は、決定ポジション７０が所望の回数だけ連続して続くことができるＲＴＮビルディングブロック“レベル”であり、このビルディングブロックは、定義により、先行するキーワード（“[”）で始まり、後続するキーワード（“]”）で終了する：“[” (1) * （*１）“]”。
【０１１６】
ステートメントの定式化における自由度を有する本発明の方法により、以下の論理に従うクエリ言語を定義することが可能となる。
【０１１７】
関係データベースシステムでは、複数のテーブル（表）および格納されたクエリが想定されており、以下にそれらをセットと呼び、そして、それらを要約する。
【０１１８】
本発明によれば、複数の予め定められたＲＴＮビルディングブロックが与えられ、ここで各ＲＴＮビルディングブロックは、他のＲＴＮビルディングブロックの内部決定グラフからは独立して定義される内部決定グラフを有するものである。複数のＲＴＮビルディングブロックは、少なくとも一つの決定ポジションにおいて、全てのＲＴＮビルディングブロックからの任意の所望のＲＴＮビルディングブロックをこの決定ポジションに導入できることを示す構文上の印を有する。上に示したものにおいては、これは、決定ポジション７０に対応している。
【０１１９】
各ＲＴＮビルディングブロックは、少なくとも一つの処理入力セットを割り当てられ、この処理入力セットに基づいて少なくとも一つの処理関数を実行し、処理出力セットを形成する。そうすることによって、ＲＴＮビルディングブロックの処理入力セットが、処理関数の実行前に、このＲＴＮビルディングブロックにおける決定グラフ７０に導入されるＲＴＮビルディングブロックによって、新たに割り当てられることができるということが意図されている。
【０１２０】
ＲＴＮビルディングブロックへの変換および導入によって、定式化可能な各ステートメントは、使用時にＲＴＮビルディングブロックに割り当てられることになる処理関数とは無関係に、ＲＴＮビルディングブロックのネスティングに基づく同一の抽象化形式にさせられる。この同一の抽象化によって、一つの代数（algebra）で、全てのＲＴＮビルディングブロックおよびネスティングの可能性が満たされる。
有限の数の基本のビルディングブロック群を常に宣言することができるが、ここで、上位付けされたまたは導入されたＲＴＮビルディングブロックがそれら独自の異なる定義を指定しない限りにおいて適用されるいくつかの仮定が必要とされる。
【０１２１】
可能な基本のビルディングブロック群の例（図１４、１５、１６、１７）
【０１２２】
変形１（図１４）：ＲＴＮビルディングブロック６０１であって、これは、任意のキーワード６００および、全てのＲＴＮビルディングブロックから一つのＲＴＮビルディングブロックが導入される正確に一つの決定ポジション７０を有しており、ここで、この変形の一つのＲＴＮビルディングブロックは、決定ポジション７０の前および／または後のいずれかにおいて、少なくとも一つのキーワード６００を指定している。
【０１２３】
変形２（図１５）：ＲＴＮビルディングブロック６０２であって、これは、任意のキーワード６００および少なくとも２つまたはそれより多い決定ポジション７０を有しており、存在する全ての決定ポジション７０がそれぞれキーワードによって分けられている。
【０１２４】
変形３（図１６）：ＲＴＮビルディングブロック６０３であって、これは、所望の回数だけ呼び出すことができる、排他的に決定ポジション７０の前または後に位置する任意のキーワード６００を有している。
【０１２５】
変形４（図１７）：ＲＴＮビルディングブロック６０４であって、これは、決定経路７９の最初および最後に位置する任意のキーワード６００を有しており、かつ、決定ポジション７０を有しており、その後に、所望の回数だけ呼び出すことができる決定ポジション７０が従っており、任意の個数のキーワード６００が、１つ目の決定ポジション７０の後に従うことができる。
【０１２６】
任意のステートメントの定式化に由来するネスティングの可能性の全ては、これらまたはさらなる変形あるいはそれらの組み合わせに分けることができる。使用されるＲＴＮビルディングブロックが他の処理方法および処理セットの割り当てをそれぞれ記述していない限りにおいて、これらの変形においてそれぞれに適用される処理ステップを示す。
【０１２７】
変形１（図８、１４）
図１４に示す変形１に従って定義される全てのＲＴＮビルディングブロックのＲＴＮビルディングブロックには、以下の処理セットの割り当てが適用される：
上位付けされたＲＴＮビルディングブロックにおいて決定ポジション７０が与えられる場合、処理入力セットとしてこのポジションに導入されるさらなるＲＴＮビルディングブロックは、該上位付けされたＲＴＮビルディングブロックに対して割り当てられた処理入力セットを割り当てられる。この処理はネストしたＲＴＮビルディングブロックの最も内部まで実行されるため、該処理入力セットは常に、決定ポジション７０において直接的に導入される各々のＲＴＮビルディングブロックに受け渡される。
他のＲＴＮビルディングブロックが、該導入されたＲＴＮビルディングブロックに導入されない場合、導入されたＲＴＮビルディングブロックの処理関数がその割り当てられた処理入力セットに対して適用され、そして、生成した、導入されたＲＴＮビルディングブロックの渡される処理出力が新たな処理入力セットとして該上位付けされたＲＴＮビルディングブロックに割り当てられ、続いて、該上位付けされたＲＴＮビルディングブロックの処理関数が実行される。この適用の結果が、該上位付けされたＲＴＮビルディングブロックの処理出力セットとして渡される。それゆえ、この原理により、望むだけ頻繁なＲＴＮビルディングブロックのネスティングが可能となる。
【０１２８】
従って、図８は、次に従ってネスティングにしたに従うネストしたＲＴＮビルディングブロック４０７、４０８、４０９を示す。
ＲＴＮビルディングブロック４０７（キーワード＋決定ポジション７０）
ＲＴＮビルディングブロック４０８（キーワード＋決定ポジション７０）
ＲＴＮビルディングブロック４０９（キーワード）
【０１２９】
処理入力セット４０１がＲＴＮビルディングブロック４０７に受け渡され、次いで導入されたＲＴＮビルディングブロック４０８に対してその処理入力セット４０２として受け渡され、それが今度は、ＲＴＮビルディングブロック４０８に導入されるＲＴＮビルディングブロック４０９に同様にして渡される。
【０１３０】
最も内部のネスティング点(nesting point)までいったん達すると、ＲＴＮビルディングブロック４０９の処理関数が処理入力セット４０３に対して適用され、そしてその結果が処理出力セット４０４として、ＲＴＮビルディングブロック４０８に対して新たな処理入力セットとして受け渡される。
【０１３１】
ここでＲＴＮビルディングブロック４０８の処理関数が新たな処理入力セット４０４に対して適用され、その結果が、処理出力セット４０５として、そして、ＲＴＮビルディングブロック４０７に対する新たな処理入力セットとして、受け渡される。
【０１３２】
次のステップでは、次なる外部のＲＴＮビルディングブロック（すなわち、ＲＴＮビルディングブロック４０７）の処理関数がその新たな処理入力セット４０５に対して適用され、そしてその結果が、ＲＴＮビルディングブロック４０７の処理出力セット４０６に格納される。
【０１３３】
しかしながら、既に上述したように、個々のＲＴＮビルディングブロックのための異なる定義を排除してはならない。
【０１３４】
変形２（図９、１５）
図１５に示した変形２に従って定義される全てのＲＴＮビルディングブロックのうちのＲＴＮビルディングブロックについては、処理セットに関する以下の割り当てが適用される：
それぞれの場合において、上位付けされたＲＴＮビルディングブロックにおける２つまたはそれより多い決定ポジション７０の間に少なくとも一つのキーワードが存在する場合には、毎回、同じ処理入力セット（すなわち、上位付けされたＲＴＮビルディングブロックの処理入力セット）が、決定ポジション７０に直接的に導入されるＲＴＮビルディングブロックに対して割り当てられ、外部のおよび／または少なくとも一つの導入されたＲＴＮビルディングブロックが異なる定義を用いている特殊な場合でなければ、生成する全ての処理出力セットが、上位付けされたＲＴＮビルディングブロックの処理関数の処理入力セットとして受け渡される。
【０１３５】
図９は、ＲＴＮビルディングブロック４１７に導入されるキーワード４２０によって連結されたＲＴＮビルディングブロック４１８および４１９を示している。この変形は、例えば、ＲＴＮビルディングブロックの算術または論理演算において適用される。
【０１３６】
ＲＴＮビルディングブロック４１７（決定ポジション７０＋キーワード４２０＋決定ポジション７０）
ＲＴＮビルディングブロック４１８        ＲＴＮビルディングブロック４１９
【０１３７】
処理入力セット４１１が上位付けされたＲＴＮビルディングブロック４１７に受け渡され、次いで、導入されるＲＴＮビルディングブロック４１８に対して、その処理入力セット４１２として渡される。その後、ＲＴＮビルディングブロック４１８の関連する処理関数が処理入力セット４１２に対して適用され、処理出力セット４１３に格納される。
【０１３８】
また、ＲＴＮビルディングブロック４１９は処理入力セット４１４として、上位付けされたＲＴＮビルディングブロック４１７の処理入力セット４１１を受け取る。次いで、ＲＴＮビルディングブロック４１９の関連する処理関数がその処理入力セット４１４に対して適用され、処理出力セット４１５に格納される。
【０１３９】
次のステップでは、上位付けされたＲＴＮビルディングブロック４１７が、処理出力セット４１３および４１５を、その２つの新たな処理入力セットとして割り当てられ、それらに対してそれ以後に、その処理関数が適用された後、１つの処理出力セット４１６に記憶される。
しかしながら、既に上述したように、個々のＲＴＮビルディングブロックのための異なる定義を排除してはならない。
【０１４０】
変形３（図１０、１６）
図１６に示した変形３に従って定義される全てのＲＴＮビルディングブロックのうちの各ＲＴＮビルディングブロックについては、処理セットに関する以下の割り当てが適用される：
上位付けされたＲＴＮビルディングブロックは、決定ポジション７０に所望の回数だけ連続的に達することを可能とする決定経路を有する（図６におけるＲＴＮ２５３を参照）。
【０１４１】
この場合には、当該順序の１番目のポジションで導入されるＲＴＮビルディングブロックは上位付けされたＲＴＮビルディングブロックの処理入力セットを取り出し、他の連続的なＲＴＮビルディングブロックのそれぞれは、処理入力セットとして、先行するものの処理出力セットを使用し、そして順序が最後であるＲＴＮビルディングブロックは、その処理出力セットを、上位付けされたＲＴＮビルディングブロックに対して処理入力セットとして渡し、上位付けされたＲＴＮビルディングブロックは、外部のまたは少なくとも一つの導入されたＲＴＮビルディングブロックが異なる定義を用いている特殊な場合でなければ、その処理関数を実行するというのが適用される。そうすることによって、別の箇所で既に述べたように、ＳＱＬと比較して大幅に自由なクエリの実行が可能となる。
【０１４２】
図１０は、上位付けされたＲＴＮビルディングブロック４２７の中で互いに続いているＲＴＮビルディングブロック４２８、４２９、４３０を示しており、上位付けされたＲＴＮビルディングブロック４２７においては、最初および最後のＲＴＮビルディングブロックを除いて、与えられたＲＴＮビルディングブロックの順序で、先行するＲＴＮビルディングブロックの各処理出力セットが、後続するＲＴＮビルディングブロックの処理入力セットとして取り出され、そして、各々のＲＴＮビルディングブロックに対して割り当てられる処理関数が適用される。
【０１４３】
具体的には、上位付けされたＲＴＮビルディングブロック４２７の処理入力セット４２１が、順序としては最初にくるＲＴＮビルディングブロック４２８の処理入力セット４２２として受け渡され、そこにその処理関数が適用され、処理出力セット４２３を生成する。後者が、２つ目のＲＴＮビルディングブロック４２９の処理入力セット４２３として渡される。同様にして、これが、後続するＲＴＮビルディングブロック４３０および生成した処理入力セット４２４について起こり、その処理出力セット４２５が、上位付けされたＲＴＮビルディングブロック４２７の処理関数が適用される新たな処理入力セットとして取り出され、その結果として処理出力セット４２６が渡される。
【０１４４】
変形３の可能な一つの有用な再定義は、以下のセットの割り当ての特性を有するＲＴＮビルディングブロック４４６によって与えられ、それを図１２に示している。
【０１４５】
しかしながら、上位付けされたＲＴＮビルディングブロック４４６は、決定ポジション７０に所望の回数だけ連続的に達することができることを可能とする決定経路を有する。
【０１４６】
特殊なＲＴＮビルディングブロック４４６の定義によれば、決定ポジション７０で直接的に導入される全てのＲＴＮビルディングブロック４４７、４４８、４４９が、上位付けされたＲＴＮビルディングブロック４４６の処理入力セット４４１を割り当てられることが適用される。
【０１４７】
上位付けされたＲＴＮビルディングブロック４４６の処理入力セットとして、直接的に導入される全てのＲＴＮビルディングブロック４４７、４４７、４４９の処理出力セット４４２、４４３、４４４が受け取られ、そして、処理関数の適用後、処理出力セット４４５に格納される。
【０１４８】
例えば自身のＲＴＮビルディングブロックによって決定される、このＲＴＮビルディングブロック４４６の可能な処理関数の例：
１．  導入されるＲＴＮビルディングブロックの全ての処理出力セットの特定の個数（少なくとも、正確に、最大、．．．）を有する全ての要素（ANY （*））
２．  少なくとも／最大で／正確に特定の個数を除いた、それぞれ、導入されるＲＴＮビルディングブロックの各処理出力セットにある全ての要素、および、全ての処理出力セットにある全ての要素（ALL （*））
【０１４９】
別個のＲＴＮビルディングブロックを用いることによって、導入されるＲＴＮビルディングブロックの一つより多くの処理出力セットにおいて存在する要素が、上位付けされたＲＴＮビルディングブロックの処理出力セットにおいて、１度または複数回、受け取られるべきかどうかを記述することもできる。
【０１５０】
この上位付けされたＲＴＮビルディングブロック４４６の処理関数のためのパラメータとしてＲＴＮビルディングブロックが与えられない場合、導入されるＲＴＮビルディングブロック４４７、４４８、４４９の処理出力セット４４２、４４３、４４４の少なくとも一つに存在する全ての要素が重複なく渡されなければならないことが仮定される。
【０１５１】
変形４（図１１、１３、１７）
図１７に示した変形４に従って定義される全てのＲＴＮビルディングブロックのうちのＲＴＮビルディングブロックについては、処理セットに関する以下の割り当てが適用される：
上位付けされたＲＴＮビルディングブロック（例、図１１におけるＲＴＮビルディングブロック４５７、または、図１３におけるＲＴＮビルディングブロック４７７）は、１つ以上のキーワード６００の後に決定ポジション７０を指定する決定経路を有しており、該決定ポジション７０の後に、任意の個数のキーワード６００が続くことができ、かつ、該決定経路は、所望の回数だけ連続的に決定ポジション７０に達することを可能とし（図６におけるＲＴＮ２５３を参照）、これは少なくとも一つのキーワード６００によって終了する。
【０１５２】
この変形のＲＴＮビルディングブロックに対しては、１つ目の決定ポジション７０が上位付けされたＲＴＮビルディングブロックの処理入力セットのデータを使用し、また、決定ポジション７０に導入されるＲＴＮビルディングブロックの処理出力セットを用いることによって、このＲＴＮビルディングブロックの処理関数が実行されるということが適用され、一方、所望の回数だけ呼び出すことができる決定ポジション７０で導入される他の全てのＲＴＮビルディングブロックについては、変形３に関して記載した論理（ロジック）（図１６）がセット割り当てに適用され、所望の回数だけ呼び出すことができる決定ポジション７０の１つ目のＲＴＮビルディングブロックは、１つ目の、繰り返し可能ではない決定ポジションにおけるＲＴＮビルディングブロックの処理出力セットを、その処理入力セットとして割り当てられる。少なくとも一つのキーワード６００で印をされている上位付けされたＲＴＮビルディングブロックの最後に達した時点で、少なくとも一つのさらなる処理関数を、所望の回数だけ呼び出すことができる決定ポジション７０の最後のＲＴＮビルディングブロックの処理出力セットに対して適用することができる。
【０１５３】
図１１には、変形４のＲＴＮビルディングブロックを示しており、これは、上位付けされたＲＴＮビルディングブロック４５７の１つ目の決定ポジション７０において、上位付けされたＲＴＮビルディングブロック４５７の処理入力セット４５２にアクセスするＲＴＮビルディングブロック４５８を導入しており、ここで処理入力セット４５２は、処理入力セット４５１に一致している。
このＲＴＮビルディングブロック４５７の処理関数は、最初に、グループ化を実行し、それは、各々のグループ化される要素を参照して、処理入力セット４５２の要素についてのＲＴＮビルディングブロック４５８の処理出力セット４５３の同一の値のセットに従って行われる。このようにして、処理入力セット４５２として渡される処理入力セット４５１は、１７個の要素を含んでいる。ＲＴＮビルディングブロック４５８の処理関数の結果として、処理出力セット４５３において、これらは５つの異なる要素にグループ化され、ここで各要素は、結合された個々の要素によって各々のセットを参照する（セット４６１、４６２、４６３、４６４、４６５）。いま、処理出力セット４５３は、ＲＴＮビルディングブロック４５９のための処理入力セットである。要素が、導入されるＲＴＮビルディングブロック４５９および４６０の後続する処理関数によって、各々の処理出力セット４５４、４５５から除かれる場合、割り当てられた要素のセット（図１１ではセット４６１および４６３）に対する参照もまた削除される。このＲＴＮビルディングブロックを完了したときに、ＲＴＮビルディングブロック４５７の処理出力４５６における処理出力セット４６５の割り当てられたセット（セット４６２、４６４、４６５）の全ての要素がＲＴＮビルディングブロック４５７の処理出力セット４５６に書き込まれることが定義される。この最後の処理関数は、ＲＴＮビルディングブロック４５７における少なくとも一つの任意選択のキーワードを通じて、または、後続するＲＴＮビルディングブロックによって、明示的に呼び出される場合にのみ、実行される。
【０１５４】
図１３には、変形４の一つのＲＴＮビルディングブロックを示しており、これは、上位付けされたＲＴＮビルディングブロック４７７の１つ目の決定ポジション７０において、上位付けされたＲＴＮビルディングブロック４７７の処理入力セット４７２にアクセスするＲＴＮビルディングブロック４７８を導入しており、ここで処理入力セット４７２は、処理入力セット４７１に一致している。
【０１５５】
このＲＴＮビルディングブロック４７７の処理関数は、最初に、処理入力セット４７２の要素に対して、ＲＴＮビルディングブロック４７８の処理出力セット４７３の同一の値のセットに従ってグループ化を実行し、各々同じにグループ化されるべき要素は、処理出力セット４７３の同一の出力データセットに独立に書き込まれる。
このＲＴＮビルディングブロック４７７の存在によって仮定されるのは、各処理入力セットおよび各処理出力セットが、それぞれ、少なくとも一つの入力データセットおよび少なくとも一つの出力データセットを含んでおり、ここで、該処理入力セットおよび該処理出力セットのデータセット内の個数、内容および順序は、同一でなくても良いということである。それぞれ、入力データセットおよび出力データセットが記述されていない場合には、各処理入力セットおよび各処理出力セットは、全ての要素を含む、それぞれ、正確に一つの入力データセットおよび出力データセットを含む。全ての処理関数が、各々のＲＴＮビルディングブロック（図１３では：４７９、４８０）の処理入力セット（図１３では：４７３、４７４）の全ての入力データセットに対して独立して適用され、そしてそれに対応して、出力データセットがまだ要素を含んでいる場合には、各々のＲＴＮビルディングブロック４７９、４８０の処理出力セット４７４、４７５の出力データセットに書き込まれる。このＲＴＮビルディングブロックを完了したときに、処理出力セット４７５の全ての出力データセットが、ＲＴＮビルディングブロック４７７の処理出力セット４７６の同一の出力データセットに書き込まれることが定義される。この最後の処理関数は、ＲＴＮビルディングブロック４７７における少なくとも一つの任意選択のキーワードを通じて、または、後続するＲＴＮビルディングブロックによって、明示的に呼び出される場合にのみ、実行される。
【０１５６】
図１３を参照することによって明確となるのは、ＲＴＮビルディングブロックが異なる定義を指示していなければ、ＲＴＮビルディングブロックの各処理関数は、その処理入力セットを参照し、かつ、常に、その処理入力セットにおける全ての入力データセットの全ての要素で独立して実行され、その処理出力セットのそれぞれ同一および他の出力データセットに格納されるということである。
【０１５７】
該ＲＴＮビルディングブロックは、処理入力セットを割り当てられる。従って、ＲＴＮビルディングブロックに対する処理入力セットの割り当てを独立して記述するＲＴＮビルディングブロックを与えることができる。
【０１５８】
ＲＴＮビルディングブロックのさらなる可能な特徴付けを、以下の通りに実行することができるが、一例として述べており、この特徴づけに関しても限定はない。その上、エンジン(engine)による処理に関するアプローチがあることがはっきりと明らかである。
【０１５９】
一つのセットとしてデカルト積（カルテシアン積）の処置を施すこと（ＲＴＮビルディングブロック“FROM”）、および、それぞれの場合において、要素ごとに全体的な２つ目のセットへ進み、そしてそうすることにより、これもまたデカルト積に到達すること、の両方が可能でなければならず、ここで、この場合の値は、該２つ目のセットの基準に依存して該１つ目のセットの各要素に従って計算されて渡される（ＲＴＮビルディングブロック“レベル”）。
【０１６０】
ＲＴＮビルディングブロック“FROM”
“FROM”は、このＲＴＮビルディングブロックの決定ポジション７０において指し示されるＲＴＮビルディングブロックが生成するセットについてのデカルト積を形成し、そしてそれを、その上位付けされたＲＴＮビルディングブロック“レベル”の１つ目の決定ポジション７０におけるＲＴＮビルディングブロックのための処理入力セットとして利用できるようにする。
【０１６１】
ＲＴＮビルディングブロック“レベル”
“レベル”は、このＲＴＮビルディングブロック（“レベル”）中で決定ポジション７０においてその後に記述されたＲＴＮビルディングブロックの全ての処理関数を、このＲＴＮビルディングブロック（“レベル”）が含まれるＲＴＮビルディングブロックの処理入力セットの各要素に従って段階的に実行し、ここで、各ＲＴＮビルディングブロックの処理入力セットは、直前のＲＴＮビルディングブロックの処理出力セットである。変形３のこのＲＴＮビルディングブロックの特異な点は、このＲＴＮビルディングブロックは、そこに導入される１つ目のＲＴＮビルディングブロックのための処理入力セットとして、その処理入力セットを渡さず、１つ目のＲＴＮビルディングブロックのための処理入力セットは、それ自身のＲＴＮビルディングブロック（例、ＲＴＮビルディングブロック“FROM”の処理出力セット）を用いて定義されるか、または、このＲＴＮビルディングブロックで使用されるそれぞれ、全てのセットおよびテーブルの、全ての合計から定義されるということである。
【０１６２】
このＲＴＮビルディングブロック“レベル”に１つ目の決定ポジション７０において導入されるＲＴＮビルディングブロックは、ＲＴＮビルディングブロック“レベル”において、特定のＲＴＮビルディングブロック（例、“FROM”）の処理出力セットによる処理入力セットとして定義されるセット（テーブル、格納されたクエリまたはデカルト積）を、処理入力セットとして受け取る。導入されるＲＴＮビルディングブロックのための処理入力セットがＲＴＮビルディングブロック”レベル”で定義されていない場合、この処理入力セットは、データベース固有の特性によって、例えば、グラフの理論、関係のテーブル、およびこのＲＴＮビルディングブロック“レベル”における全ての記述されたＲＴＮビルディングブロック“テーブル”によって、ＲＴＮビルディングブロック“レベル”におけるネスティングとは無関係に、決定することができる。
【０１６３】
最も外側のＲＴＮビルディングブロック“レベル”には、それを導入することができ、かつ、その処理入力セットを受け取ることができる取り囲むＲＴＮビルディングブロックがないため、一つの要素を有する抽象的な開始のセットが受け取られ、ここで該要素には、抽象化された様式で、あらゆる数字、定数、文字およびグローバル関数などが含まれる。
【０１６４】
各ＲＴＮビルディングブロック“レベル”は、それ自身およびそこにネストされた全てのＲＴＮビルディングブロックに、上位付けされたＲＴＮビルディングブロックによって渡される、その処理入力セットの情報の全ての構成要素（例、全てのテーブルフィールド）を有する各々の現在の要素を与え、ここでまた、“最も深く”ネストされたＲＴＮビルディングブロックは、全てのＲＴＮビルディングブロック“レベル”の情報のそれらの構成要素へのアクセスを持つ。
【０１６５】
ＲＴＮビルディングブロック“レベル”の処理出力セットは、最後の繰り返し可能な決定ポジション７０においてＲＴＮビルディングブロック“レベル”に導入される、最後のＲＴＮビルディングブロックの処理出力セットである。
【０１６６】
ＲＴＮビルディングブロック“処理_同一の親”
このＲＴＮビルディングブロックを図１２に示し、上で説明したが、これは、そのセット割り当てが、変形３のための一般的な説明とは一致しないため、“特殊な”セット割り当てのグループに挙げられる。
【０１６７】
このＲＴＮビルディングブロックに導入される全てのＲＴＮビルディングブロックは、直前に位置するＲＴＮビルディングブロックの処理出力セットを割り当てられず、その代わりに、ＲＴＮビルディングブロック 処理_同一の親の処理入力セットを割り当てられる。
ＲＴＮビルディングブロック 処理_同一の親の処理出力セットは、このＲＴＮビルディングブロックに導入された全ての要素の全ての処理出力セットの全ての要素である。付加的なＲＴＮビルディングブロックにパラメータとして依存して、このＲＴＮビルディングブロックの処理出力セットもまた、全てまたは特定の（正確な、最小の、または最大の）個数で存在する要素のみを含み得る。ＲＴＮパラメータ要素（RTN parameter elements）によって、処理出力セット中に複数（multiply）存在する要素がこの要素の処理出力セットにおいて数回、複数（multiply）格納されるかどうか、あるいは、１回のみ格納されるべきかまたは全く含められないべきかどうかについても決定することができる。
【０１６８】
ＲＴＮビルディングブロック“処理_先行する親(PrevParents)“
このＲＴＮビルディングブロックに導入される全てのＲＴＮビルディングブロックは、処理入力セットとして、直前のＲＴＮビルディングブロックの処理出力セットを割り当てられ、それにより、このＲＴＮビルディングブロックは、変形３に従うセット割り当てと一致する。このＲＴＮビルディングブロックにより、例えば、ＲＴＮビルディングブロック 処理_同一の親において、または、決定ポジション７０を１つだけ許容する他のＲＴＮビルディングブロックにおいて、一つのＲＴＮビルディングブロックが、いくつかの連続的、かつ段階的に順次実行される処理関数の処理出力セットを渡すことができるようになる。
【０１６９】
ＲＴＮビルディングブロック“BreakOn”
各処理関数は、処理入力セットにおける全ての入力データセットにおいて独立して実行される。いくつかのデータセットへの分割が行なわれる場合、これは、ＲＴＮビルディングブロック“BreakOnによって行なうことができ、それぞれの場合において、１つ目の決定ポジション７０において導入されるＲＴＮビルディングブロックの処理出力セット（この処理出力セット中にいくつかの要素がある場合には、それぞれ“ALL”および“ANY”の使用が有用である）のために同一の値を渡すＲＴＮビルディングブロック“BreakOn”の処理入力セットの要素が、それぞれに同じデータセットに書き込まれる。
【０１７０】
一つのデータセットへの結合は例えば、ＲＴＮビルディングブロック“BreakOn”において所望の回数だけ繰り返すことができる決定ポジション７０の後の少なくとも一つのキーワード（例、“END”、“BREAKON”）によって決定することができる。
【０１７１】
ＲＴＮビルディングブロック“GroupBy”
処理入力セットおよび処理出力セットの各要素は、それぞれの場合において、一つの値のセットを割り当てられ得る。
多くの問題は、同一の値に従ってグループ化すること、および、各グループ化された要素について任意に、この要素と一緒のグループとされた要素を記憶することを必要とさせる。これは、ＲＴＮビルディングブロック“GroupBy”によって決定されるが、一方、ＲＴＮビルディングブロック“GroupBy”の処理出力セット中の要素に従って割り当てられるセットの全ての要素を書き、それによって処理関数の完了後にグループ化を削除ことが可能である。これは、所望の回数だけ呼び出すことができる決定ポジション７０の後の少なくとも一つのキーワード（例、“END GROUPBY”）によって決定することができる。ステートメント中にそのようなキーワードが与えられない場合、グループ化が、それを初めて使用したときから、各々の上位付けされたＲＴＮビルディングブロックにおける後続する全ての処理関数のために残ったままである。
【０１７２】
ＲＴＮビルディングブロック“OrderBy”
各セットの要素は常に、ある順序で並べられる。最適化の後では、全ての処理関数がこの順序を固持するわけではない。
【０１７３】
それゆえ、ＲＴＮビルディングブロック（“OrderBy”）が提供され、これは、その処理入力セットの全ての入力データセットの要素を、ソートされた与えられた値および値のセットにそれぞれ従って、互いに独立して格納する。
【０１７４】
それぞれの有用なセット処理関数および値計算関数を各々、または表示関数なども、ＲＴＮビルディングブロックによって定義して、クエリにおいて実行することができる。以下において、セット処理関数のいくつかの例を挙げる。
【０１７５】
ＲＴＮビルディングブロック“WHERE”
このＲＴＮビルディングブロックは、処理入力セットの各要素に対して、このＲＴＮビルディングブロック“WHERE”の決定ポジション７０におけるＲＴＮビルディングブロックがゼロでない値を渡すときにのみこの要素が処理出力セットに書き込まれることを決定するために使用される。値のセットが渡される場合、定義は、決定ポジション７０においてＲＴＮビルディングブロック“ALL”および“ANY”のそれぞれによって決定することができる。
【０１７６】
ＲＴＮビルディングブロック“MIN”/“MAX”
それぞれの場合において一つのデータセットから、セット全体のうちの各要素についての計算の、それぞれ最大値および最小値に一致する要素のみが選択されるべき場合には、これは、それぞれＲＴＮビルディングブロック“MIN”および“MAX”によって決定することができる。最大値および最小値のそれぞれの、あるセットが渡される場合には、これは、決定ポジション７０において導入されるＲＴＮビルディングブロックの処理出力セットの要素の個数を制限する上位付けされたＲＴＮビルディングブロック（“セット要素”）によって実行することができる。
【０１７７】
ＲＴＮビルディングブロック“セット要素の制限（set element limiting）”
現在のソートに基づく処理出力セットの現在のデータセットのそれぞれから、ある個数の要素のみを渡すのであれば、この場合には、ＲＴＮビルディングブロック“セット要素制限（set element limited）”を上位付けされたＲＴＮビルディングブロックとして使用することができる。このＲＴＮビルディングブロックは、その処理入力セットの、正確にＸ番目の要素（“＝”）、Ｘ番目の要素までの全ての要素（“＜＝”）、またはＸ番目の要素から始まる全ての要素（“＞＝”）が、その処理出力セットにおいて取り出されることを決定する。処理入力セットにおける現在のデータセットの要素の個数についてのあるパーセンテージに対して、制限を決定することもできる（“％”）。
【０１７８】
ＲＴＮビルディングブロック“FIND”
各処理関数が、その処理入力セットの全ての入力データセットに対して各要素についてそれぞれに実行され、処理出力セットのデータセットの要素が、上位付けされたおよび後続するＲＴＮビルディングブロックのそれぞれのための処理入力セットとして受け取られる。
特定のＲＴＮビルディングブロック（“FIND”）を使用することによって、ＲＴＮビルディングブロック“FIND”の処理出力セットが、変えられることなくこのＲＴＮビルディングブロックの処理出力セットに一致し、ここでそれが、決定ポジション７０においてＲＴＮビルディングブロック“FIND”に導入されるＲＴＮビルディングブロックの処理出力セットに存在する要素が、ＲＴＮビルディングブロック“FIND”の処理出力セットにおいて渡された順序で印をされるという特徴を有しているものであることが決定される。次いで、後続するＲＴＮビルディングブロックのそれぞれが、データのセット全体ではなく、それぞれに印をされた要素に対して、後続する要素（ＲＴＮビルディングブロック“NEXT”）または先行する要素（ＲＴＮビルディングブロック“PREV”）に関して、それらの処理関数を独立に実行する。それより先では、処理関数において見つかった要素が印をされるのみである。
このＲＴＮビルディングブロックを使用するときには、ＲＴＮビルディングブロック“ORDERBY”を前以て適用しておくことがかなり有用である。
後にデータのセット全体へのアクセスが行なわれる場合、これは例えば、ＲＴＮビルディングブロック“FIND”における拡張によって行なうことができ、それは、１つ目の決定ポジション７０（例、“：”）の一つの後に従うキーワードの後に所望の回数だけ決定ポジション７０を呼び出すことを可能とし、従って必然的に少なくとも一つのキーワード（例、“END”、“FIND”）を指示するものである。このキーワードが見つかった時点で、決定ポジション７０（これは、可能な回数だけ呼び出すことができる）におけるＲＴＮビルディングブロック“FIND”中の最後のＲＴＮビルディングブロックの処理出力セットの印をされた全ての要素を、このＲＴＮビルディングブロックの処理出力セットに書き込み、そして他の要素にはこれ以上印をしないことによって、後続する処理関数は再び、データのセット全体にアクセスする。
【０１７９】
ＲＴＮビルディングブロック“NEXT”/“PREV”
各処理関数が、処理データセット中の各要素に対して個々に適用される。それにより、例えば、各々の現在の要素を、後続する（“NEXT”）または先行する（“PREV”）要素の値と比較することが可能となる。ＲＴＮビルディングブロック“NEXT”が上位付けされたＲＴＮビルディングブロックを持たない場合、それぞれの場合におけるセット全体から、Ｘ番目の要素のみ（“＝”）、Ｘ番目の要素までの全ての要素（“＜＝”）、またはＸ番目の要素から始まる全ての要素（“＞＝”）が、このＲＴＮビルディングブロックの処理出力セットとして渡される。
【０１８０】
ＲＴＮビルディングブロック“ANY”/“ALL”
例えば、ＲＴＮビルディングブロック“比較”（これは、両方とも決定ポジション７０において導入されるＲＴＮビルディングブロックの処理出力セットを比較する）では、導入されるＲＴＮビルディングブロックの少なくとも一つが値のセットを返す場合に、全ての（“ALL”）返された値または少なくとも一つの（“ANY”）返された値が、比較されたときにマッチしなければならないかどうかを決定することができる。“ANY”では、正確に（“＝）、少なくとも（“＞＝”）または最大で（“＜＝”）ある個数の要素が、比較についてマッチしなければならないことも決定することができる。“ALL”では、比較は、正確に（“＝”）、少なくとも（“＜＝”）または最大で（“＞＝”）Ｘ個の要素にマッチしなければならないことをいうことができる。
【０１８１】
ＲＴＮビルディングブロック“中間セット”
ＲＴＮビルディングブロックの処理出力セットが他のＲＴＮビルディングブロックとのさらなる処理のために格納されるべき場合、これは、上位付けされたＲＴＮビルディングブロック“中間セット”によって実行することができる。このＲＴＮビルディングブロックは、その処理入力セットが、変数名として記述されたセットに一時的に格納され、後続する全てのＲＴＮビルディングブロックによって処理入力セットとして使用され得るということを指示する。
【０１８２】
ＲＴＮビルディングブロック“DO LOOP”
ある問題では、ＲＴＮビルディングブロック“DO LOOP”におけるキーワード“DO” “：”の後で決定ポジション７０に導入されるＲＴＮビルディングブロックの処理入力セットの各要素の後で（その要素は、導入されるＲＴＮビルディングブロックの処理関数に付される）、キーワード“UNTIL”の後の決定ポジション７０において記述されたＲＴＮビルディングブロックの処理出力セットがゼロでないかについて、またはＺＥＲＯでないかについて調べられること、および、それに依存して、このＲＴＮビルディングブロックのための処理関数が終了されることが必要であり得る。
【０１８３】
例１９
選択された会社の売り上げ２００６が、１００,０００ユーロよりも大きな総計となるまで、ウィーンの全ての会社を受け取る。
SELECT
DO:
WHERE （会社.都市=“ウィーン”）
LOOP UNTIL
SUM （会社.売り上げ２００６） > 100000
ＲＴＮビルディングブロック“セット要素の形成” “,”を用いることにより、両方ともこのＲＴＮビルディングブロックの決定ポジション７０で導入されるＲＴＮビルディングブロックの２つの処理出力セットは、このＲＴＮビルディングブロックの結合された処理出力セットに結合される。
【０１８４】
さらなるＲＴＮビルディングブロックとしては、現在の関係データベースにおける、それぞれ、全てのテーブルおよび格納されたクエリの名前ならびにテーブルおよびクエリフィールドの名前を含む、それぞれＲＴＮビルディングブロック“テーブルＲＴＮビルディングブロック”および“テーブルフィールドＲＴＮビルディングブロック”であり、その他にはまた、ＲＴＮビルディングブロック“変数”、“数”、“定数”（有効な定数の定義）、“グローバル関数”（別の言語における“CurrentUser()”などの組み込み関数をユーザーが定義するため）、比較(“>”,“>=”,“<=”,“<>”,“=”,“BETWEEN”,“IN”，．．．)のための、論理演算(“AND”,“OR”,“XOR”，．．．)のための、論理否定(“NOT”)のための、ＲＴＮビルディングブロックへの結合のための(“()”)、およ
び、コンピュータの演算
2009539151.tif 000003
のための、ＲＴＮビルディングブロックがある。
好ましい変形は、集約関数（“count”、“all”、“none”、“sum”、“AVG”、“percent”，．．．）のためのＲＴＮビルディングブロックであり、それらは、それらに対して割り当てられた処理入力セットの要素にそれぞれ適用され、各入力データセットについて正確に一つの値をその出力データセットにおいて再び渡す。
それぞれデータ操作およびデータ出力のためのＲＴＮビルディングブロックが必要である。先行技術でのこの種のコマンドを、例えば“SELECT”、“UPDATE”、“INSERT INTO”および“DELETE”がそうであるように、ＲＴＮビルディングブロックとして好適に採用することができる。
【０１８５】
ＳＱＬで使用可能なジョイン(join)リンクである“left join”、“right join”、inner join”および“outer join”を定義するＲＴＮビルディングブロックが導入されてもよい。ＯＬＡＰ、Ｔ−ＳＱＬ、ＧＥＯ−ＳＱＬの関数、および他のＳＱＬの拡張において定義される関数を含むＲＴＮビルディングブロックがあってもよい。
【０１８６】
さらには、例えばＲＴＮビルディングブロック“IN”でそうであるように、変換可能なＲＴＮビルディングブロックを定義することが可能である：Value IN (1, 2, 3, 4, 5)をRTNビルディングブロック* “IN” “(”*“)”として定義することができ、ここで、* “,” *は、それ自身のＲＴＮビルディングブロックである。ＲＴＮビルディングブロックINは、value = ANY (1, 2, 3, 4, 5)と同一であり、これらのＲＴＮビルディングブロックに変換されるか、または、それ自身エンジンによって処理されるかのいずれであってもよい。
同様のことは、可能なＲＴＮビルディングブロックUNION (ALL)、INTERSECT、EXCLUDEについても成立し、これらは、重複を伴わない（UNION）か、または、伴う（UNION ALL）かのいずれかでセットを結合し、記述された両方のセットに存在する要素のみを受け取る（INTERSECT）か、あるいは、２つのセットのいずれにも存在しない要素のみを受け取る（EXCLUDE）。これらのＲＴＮビルディングブロックは、任意にＲＴＮビルディングブロック“Group By”を伴うＲＴＮビルディングブロック“ANY”/“ALL”と組み合わせて表すことができ、また、これらのＲＴＮビルディングブロックに変換することもできる。
【０１８７】
(1, 2, 3, 4) UNION ALL (3, 4, 5, 6) = ANY (>=1)(1, 2, 3, 4), (3, 4, 5, 6)
>=1は、基準として受け取られ、記述される必要はない。
(1, 2, 3, 4) UNION (3, 4, 5, 6) = GROUPBY ANY (>=1)(1, 2, 3, 4), (3, 4, 5, 6)
は、オプティマイザーによって異なるようにして処理することができる。
(1, 2, 3, 4) INTERSECT (3, 4, 5, 6) = ALL (1, 2, 3, 4), (3, 4, 5, 6)
(1, 2, 3, 4) EXCLUDE (3, 4, 5, 6) = ANY (=1) (1, 2, 3, 4), (3, 4, 5, 6)
【０１８８】
明らかなように、UNIONなどでそうであるように、ANYおよびALLによって、２つより多くのセットを用いたはるかに正確な記述を作成することができる。また、これらのＲＴＮビルディングブロックの定義は、より簡便な適用性という理由のみならず、ＳＱＬとの互換性という理由からも実行することができるが、それは特に、多数のＲＴＮビルディングブロックの存在は、不都合をもたらさないためである。
【０１８９】
同様のことは、ＲＴＮビルディングブロック“AND”、“OR”/“XOR”を用いても行なうことができる：
これらのＲＴＮビルディングブロックは、ＲＴＮビルディングブロック“ANY”/“ALL”をRTNビルディングブロック“処理_同一の親”と結合することによって表すことができ、また、これらのRTNビルディングブロックに変換することができる。
【０１９０】
2009539151.tif 000004
【０１９１】
WHERE (会社.業種=“販売”) AND (会社.[従業員.count]>100)
は、例えば、このようにもまた表すことができ、それは、１つ目の外部のＲＴＮビルディングブロック“WHERE”の処理出力セットが、処理入力セットとして２つ目の外部のＲＴＮビルディングブロック“WHERE”に渡されるためである：
WHERE (会社.業種=“販売”) WHERE (会社.[従業員.count]>100)
【０１９２】
変換可能なＲＴＮビルディングブロックはさらに、例えば、RTNビルディングブロック“セット要素の制限”であり、これは、ＲＴＮビルディングブロック“FOR-NEXT”、“IF THEN ELSE”に変換することができ、これらは、ＲＴＮビルディングブロック“SELECT CASE”、ＲＴＮビルディングブロック“count”に変換することができ、これらは、ＲＴＮビルディングブロック“SUM”および“1”などに変換することができる。
【０１９３】
クエリはＲＴＮビルディングブロックからなり、具体的には、必要な個数のＲＴＮビルディングブロックを、与えられた順序で有するＲＴＮレベル要素(RTN level element)からなる。
【０１９４】
定義により、決定グラフの決定ポジション７０で始まるＲＴＮビルディングブロックが存在する。各ステートメントにおいて使用されるＲＴＮビルディングブロックを決定するためには、ＲＴＮビルディングブロックを２つの包括的（generic）グループに分けるため、および、さらなる処理のために各ＲＴＮビルディングブロックについて対応する包括的グループを記憶するために、１つ目のステートメントでの選択ステップの適用の前に変換ステップを実施することが必要である。
【０１９５】
選択ステップの適用前の変換ステップでは、各ＲＴＮビルディングブロックが第１または第２の包括的グループのいずれかに割り当てられ、ここで、
文字列、記号、変数または数字で始まるＲＴＮビルディングブロックは第１の包括的グループに割り当てられ、かつ、選択ステップが全てのＲＴＮビルディングブロックに対して適用される再帰的クエリ関数を含む決定ポジションが、該選択ステップが第１の包括的グループのＲＴＮビルディングブロックに対してのみ適用され得る程度に制限されるように変換され、かつ、
再帰的クエリ関数で始まるＲＴＮビルディングブロックが、第２の包括的グループに割り当てられ、かつ、第１の決定ポジションが削除されるよう、および、選択ステップが全てのＲＴＮビルディングブロックに対して適用される再帰的クエリ関数を含む決定ポジションが、該選択ステップが第１の包括的グループのＲＴＮビルディングブロックに対してのみ適用される程度に制限されるように変換され、かつ、
第１の包括的グループの全てのＲＴＮビルディングブロック、および、最後の決定ポジションにおいて文字列、記号、変数または数字で終わる第２の包括的グループのＲＴＮビルディングブロックが、該選択ステップが第２の包括的グループのＲＴＮビルディングブロックに対してのみ適用される最後のポジションにおいて、任意に実行可能な決定ポジションを付加される。
【０１９６】
一例として以下では、決定グラフにおける１つ目の決定ポジションとして決定ポジション７０を有さないＲＴＮビルディングブロックの変換を示す：
“(”*“)”
は、
“（” 第１の包括的グループのＲＴＮビルディングブロック “）”［第２の包括的グループのＲＴＮビルディングブロック］
に変換される。
【０１９７】
一例として、次のものでは、決定グラフにおいて、１つ目の決定ポジションとして決定ポジション７０を有し、かつ、最後の決定ポジションとして決定ポジション７０を有するＲＴＮビルディングブロックの変換を示す：
* (“+”1/2“-”) *
は、
(“+”1/2“-”)ＲＴＮビルディングブロックであって第１の包括的（generic）グループのものへと変換される。
【０１９８】
一例として、次のものでは、決定グラフにおいて、１つ目の決定ポジションとして決定ポジション７０を有し、かつ、最後の決定ポジションとして決定ポジション７０を有さないＲＴＮビルディングブロックの変換を示す：
* “IN” “(”*“)”
は、第２の包括的グループに割り当てられ、かつ、
“IN” “(” 第１の包括的グループのＲＴＮビルディングブロック “)” [第２の包括的ＲＴＮビルディングブロック]
に変換される。
【０１９９】
与えられる各ステートメントを先行技術のアルゴリズムを通じてＲＴＮビルディングブロックに変換し、以ってクエリを定式化するときにＲＴＮビルディングブロックの完全な柔軟性を使用することを可能とすることが、この変換ステップによって保証される。
【０２００】
この変換ステップの後で、各ＲＴＮビルディングブロックは、少なくとも一つの文字列、少なくとも一つの記号、一つの変数または一つの数字で始まり、そしてそれ以降、各選択ステップは、第１の包括的グループのＲＴＮビルディングブロックに対してのみ、または、第２の包括的グループのＲＴＮビルディングブロックにおいてのみ、適用される。さらには、この変換ステップの後、第２の包括的グループのＲＴＮビルディングブロックが、決定グラフの最後の決定ポジションにおいてのみ、任意に呼び出される。
【０２０１】
具体的には、当該２つの包括的グループへの必要とされる変換は、ＲＴＮビルディングブロックのネスティングをもたらし、これはさらなる処理に適用されないが、その理由は、それぞれの場合において、ステートメント中に存在するならば第１の包括的グループの一つのＲＴＮビルディングブロックは、第２の包括的グループのＲＴＮビルディングブロックを呼び出すが、ここで第２の包括的グループのこのＲＴＮビルディングブロックは常に、第１の包括的グループの少なくともこの呼び出しのＲＴＮビルディングブロックに対して上位付けされるためである。
定義により、決定グラフにおいて決定ポジション７０で始まるＲＴＮビルディングブロックが存在する。これらのＲＴＮビルディングブロックでは、多数のネスティングに関しては、それらがどのＲＴＮビルディングブロックに対して上位付けされているか明確に確認することができないが、それは、一つの決定ポジション７０において、ＲＴＮビルディングブロックのネスティングにおいて明らかでない第１または第２の包括的グループの全てのＲＴＮビルディングブロックを導入することができるためである。
【０２０２】
例２０
以下の単純な例は、上記を説明するために役に立つ：
WHERE Ａ + Ｂ / Ｃ
１つ目のステップで、ＲＴＮビルディングブロックのネスティングが、当該ステートメントで選択ステップを実行した後で示される。
WHERE 第１の包括的グループのRTNビルディングブロック [第２の包括的グループのRTNビルディングブロック]
Ａ [第２の包括的グループのRTNビルディングブロック]
＋ 第１の包括的グループのRTNビルディングブロック
Ｂ [第２の包括的グループのRTNビルディングブロック]
/ 第１の包括的グループのRTNビルディングブロック
Ｃ [第２の包括的グループのRTNビルディングブロック]
【０２０３】
ここで、１つ目の決定ポジション７０でのＲＴＮビルディングブロック“＋”に関して次の２つの導入の可能性があることが明らかである：
* (WHERE *)   +   *
* (Ａ)         +   *
【０２０４】
同様に、ＲＴＮビルディングブロック“＋”の２つ目の決定ポジション７０に関して２つの導入の可能性がある：
*      +   * (Ｂ)
*      +   * (* / *)
【０２０５】
ＲＴＮビルディングブロック“/”に関して、その１つ目の決定ポジション７０についての以下の３つの導入の可能性がある：
* (WHERE *)   /   *
* (* + *)     /   *
* (Ｂ)         /   *
【０２０６】
ＲＴＮビルディングブロック“/”に関して、その２つ目の決定ポジション７０についてのただ１つの導入の可能性がある：
*             /   * (Ｂ)
【０２０７】
これらの単純な場合およびより複雑な場合を明確かつ正確に解決するためには、各ＲＴＮビルディングブロックに対して第１および第２の重みを割り当てることが必要であり、ここで、個々のＲＴＮビルディングブロックのための重みは、ステートメント中に見られる全てのＲＴＮビルディングブロックの互いの間のネスティングを考慮に入れる以下の方法に従って決定される。
【０２０８】
各ＲＴＮビルディングブロックは、第１の重みを割り当てられ、それによって、ＲＴＮビルディングブロックのネスティングは、各選択ステップの間または選択ステップを全て適用した後に、それぞれの場合においてより大きい第１の重みを有するＲＴＮビルディングブロックを、比較するとより小さい第１の重みを有する元々上位にあるＲＴＮビルディングブロックに対して上位付けることによって、後続する処理に使用可能なネスティングに変えられる。
【０２０９】
第１の包括的グループの全てのＲＴＮビルディングブロックの第１の重みは、ステートメントにおいて直接的に上位付けされている第２の包括的グループのＲＴＮビルディングブロックに依存するが、そのことが、第１の包括的グループのＲＴＮビルディングブロックに対して割り当てられる第１の重みが、初期（initial）重みとして記述（described）される理由である。
【０２１０】
第１の包括的グループのＲＴＮビルディングブロックは、同一の第１の初期重みを持ち、それは好ましくは平均的な大きさのものであり、そして、第１の包括的グループのこれらのＲＴＮビルディングブロックは、第２の包括的グループのＲＴＮビルディングブロックに導入されるときに、単一の値だけ、好ましくは１だけ減らされる第１の重みを採用する。
【０２１１】
一例として、ＲＴＮビルディングブロック“テーブルフィールド”は、第１の包括的グループのその他の全てのＲＴＮビルディングブロックと同様に、第１の最初の重み２００を受け取り、ここでＲＴＮビルディングブロック“加法／減法演算”は、重み１７を有している。
“Ａ” (テーブルフィールド) “+” (加法／減法演算) “Ｂ” (テーブルフィールド)とすると、両ＲＴＮビルディングブロック テーブルフィールドは、それらの元々の第１の最初の重み２００の代わりに、１だけ減らされた、それらに対して上位付けされることになるＲＴＮビルディングブロック 加法／減法演算の第１の重み１７を割り当てられる。両方のテーブルフィールドＲＴＮビルディングブロックは従って、ステートメントに起因して、重み１６を受け取り、そして両者は、小さい第１の重み（１６）のため、加法／減法演算ＲＴＮビルディングブロック（重み１６）に対して下位付けされる。
【０２１２】
第２の包括的グループのＲＴＮビルディングブロックのための第１の重みは以下のようにして決定される：
・第１または第２の包括的グループのＲＴＮビルディングブロックの処理関数の処理出力セットに対してそれらの処理関数を適用する第２の包括的グループのＲＴＮビルディングブロックは、第２の包括的グループの第１の包括的サブグループを形成し、かつ、それぞれは、可能な最も大きい重みではないが、第１の包括的グループのＲＴＮビルディングブロックの第１の最初の平均の大きさの重みよりは大きい、同一の第１の重みを割り当てられる。
【０２１３】
このようにして、例えば、処理関数ＲＴＮビルディングブロック * “UNION” *, * “#” * および * “AS” V：変数名 がそれぞれ、第１または第２の包括的グループのＲＴＮビルディングブロック（これらは、それらの決定ポジション７０において直接的に導入される）の、それぞれ処理出力セット（単数）および処理出力セット（複数）に対して適用されるが、これが、第１の包括的サブグループのＲＴＮビルディングブロックが第２の包括的グループに割り当てられ、かつ２５０という第１の重みを受け取る理由である（ここで、２００が第１の包括的グループのＲＴＮビルディングブロックの第１の重みであり、また、２５５を可能な最も大きい重みとして仮定している）。
【０２１４】
結果として、第２の包括的グループの第１の包括的サブグループのＲＴＮビルディングブロックが常に、第１および第２の包括的グループのＲＴＮビルディングブロックに対して上位付けされること、および、従って定義によりそれらの処理入力セットとしてそれらの処理出力セットを割り当てられることが保証される。
【０２１５】
・その処理出力セットが第１または第２の包括的グループの他のＲＴＮビルディングブロックのための処理入力セットとして受け取られる第２の包括的グループのＲＴＮビルディングブロックは、第２の包括的グループの第２の包括的サブグループを形成し、かつ、どんな場合であっても第１の包括的グループのＲＴＮビルディングブロックの第１の最初の平均の大きさの重みよりは小さいそれぞれに異なる第１の重みを割り当てられる。各々のＲＴＮビルディングブロックのためのこの第１の重みは、それぞれの場合において、より小さい第１の重みをそれぞれ第一に割り当てて、このグループのＲＴＮビルディングブロックを実行することによって、第２の包括的グループの第２の包括的サブグループのＲＴＮビルディングブロックに関する予め決定可能な処理の順序を個々に記述している。
【０２１６】
従って、例えば、ＲＴＮビルディングブロック“乗法／除法演算”は第１の重み１４を受け取り、ＲＴＮビルディングブロック“加法／減法演算”はより大きい第１の重み１７を受け取り、ＲＴＮビルディングブロック“比較”は第１の重み５０を受け取り、そしてＲＴＮビルディングブロック“ブール組み合わせ”は第１の重み１００を受け取る。
【０２１７】
これは、Ａ + Ｂ * Ｃ > Ｄ AND Ｅ = Ｆという所望のネスティングから明らかとなる。
【０２１８】
ここに記述された全ての第１の重みは、第１の包括的グループのＲＴＮビルディングブロックの第１の最初の重み２００よりも小さい。
【０２１９】
決定ポジション７０の後に、任意に加えられる最後の決定ポジション７０（これは変換ステップの後で加えられる）の前で少なくとも一つのさらなる決定ポジションが従う第１および第２の包括的グループのＲＴＮビルディングブロックにおける誤ったネスティングを排除するために、最大の大きさの第２の重みを、正確にこれらのＲＴＮビルディングブロックのために割り当てることが必要となる。さもなければ、第２の包括的グループの第１の包括的サブグループの少なくとも一つのＲＴＮビルディングブロックが、最後ではない決定ポジション７０（即ち、第１の包括的グループのＲＴＮビルディングブロックの平均の重みの大きさよりも大きい重みを有するＲＴＮビルディングブロック）において、これらのＲＴＮビルディングブロックに導入されるまさにその時に、誤ったネスティングが現実に生じるであろう。より大きい第１の重みにもかかわらず、これらのＲＴＮビルディングブロックは、決定経路における最大の第２の重みを有するＲＴＮビルディングブロックが変換ステップの後で任意に導入される最後の決定ポジション７０に達するまでは、最大の第２の重みを有するこれらのＲＴＮビルディングブロックではネストしてはならない。
【０２２０】
それゆえ、第１の包括的グループの少なくとも一つのＲＴＮビルディングブロックの導入を指示する決定ポジション７０の後に、少なくとも一つのさらなる決定ポジションが、第１および第２の包括的グループの全てのＲＴＮビルディングブロックに続き、前記の少なくとも一つのさらなる決定ポジションは、変換ステップの後で任意選択的に（オプションとして）存在して第２の包括的グループのＲＴＮビルディングブロックの導入を指示するものである最後の任意選択的な決定ポジション７０とは独立しており、
該第１および第２の包括的グループの全てのＲＴＮビルディングブロックが、可能な最も大きい重みの大きさを有する第２の固定された重みを割り当てられる。
【０２２１】
ＲＴＮビルディングブロック“WHERE”は、定義により最大の大きさの第２の重みを割り当てられない第１の包括的グループのＲＴＮビルディングブロックの一例として役に立つ：
“WHERE” *                  変換ステップ後：
“WHERE” 第１の包括的グループのＲＴＮビルディングブロック [第２の包括的グループのＲＴＮビルディングブロック ]
【０２２２】
このＲＴＮビルディングブロックでは、変換ステップによって加えられる最後の任意選択の決定ポジション７０を除いて、１つ目の決定ポジション７０の後には他の決定ポジションは従わない。従って、このＲＴＮビルディングブロックのための第２の重みは、このＲＴＮビルディングブロックの第１の重みの値を受け取ることができる。
【０２２３】
ＲＴＮビルディングブロック“ＲＴＮビルディングブロックの集約”（角括弧内）およびＲＴＮビルディングブロック“for next”は、定義により最大の大きさの第２の重みを割り当てられる第１の包括的グループのＲＴＮビルディングブロックの２つの例である：
“(” * “)”                   変換ステップ後：
“(” 第１の包括的グループのＲＴＮビルディングブロック “)” [第２の包括的グループのＲＴＮビルディングブロック]
“FOR” * “:” * “NEXT”      変換ステップ後：
“FOR” 第１の包括的グループのＲＴＮビルディングブロック “:” 第１の包括的グループのＲＴＮビルディングブロック
“NEXT” [第２の包括的グループのＲＴＮビルディングブロック]
【０２２４】
これらのＲＴＮビルディングブロックでは毎回、各１つ目の決定ポジション７０の後に、最後の任意選択の決定ポジション７０（これは変換ステップによって加えられる）に加えて、少なくとも一つの決定ポジションが常に従う。従って、これらのＲＴＮビルディングブロックのための第２の重みは、可能な最も大きい重みの大きさ、具体的には２５５に一致する。
【０２２５】
同じことは、第２の包括的グループのＲＴＮビルディングブロックに対しても成り立つ。これは例えば、ＲＴＮビルディングブロック“加法／減法演算”およびＲＴＮビルディングブロック“IN 比較”に関して示される：
* (“+”1/2“-”) *              変換ステップ後
(“+”1/2“-”) 第１の包括的グループのＲＴＮビルディングブロック
このＲＴＮビルディングブロックでは、変換ステップ後には、唯一の決定ポジション７０の後には他の決定ポジションは従わない。従って、このＲＴＮビルディングブロックのための第２の重みは、例えば、このＲＴＮビルディングブロックの第１の重みの値を受け取ることができる。
【０２２６】
* “IN” “(” * “)”              変換ステップ後：
“IN” 第１の包括的グループのＲＴＮビルディングブロック [第２の包括的グループのＲＴＮビルディングブロック] 
このＲＴＮビルディングブロックでは、１つ目の決定ポジション７０の後に、最後の任意選択の決定ポジション７０（これは変換ステップによって加えられる）に加えて、決定ポジションが続く。従って、このＲＴＮビルディングブロックのための第２の重みは、可能な最も大きい重みの大きさ、具体的には２５５に一致する。
【０２２７】
各ＲＴＮビルディングブロックの、変換ステップ後の選択ステップの実行によってそれらに対して上位付けされるステートメント中の各ＲＴＮビルディングブロックに関するさらなる処理のために必要であるネスティングを決定するために、変換ステップ後のクエリステートメントに由来するネスティングの順序での第２の包括的グループの各ＲＴＮビルディングブロックの第１の重みが、より大きい第１の重みの各々のＲＴＮビルディングブロック、または、最後の決定ポジションに位置しておらず、かつ可能な最も大きい重みの第２の重みを有する各々の上位付けされたＲＴＮビルディングブロックが到達されるまで、各々の上位付けされたＲＴＮビルディングブロックの第１の重みと比較され、そして、この決定されたネスティングの順序に従って、比較の基準としての役目をするＲＴＮビルディングブロックが、到達されたＲＴＮビルディングブロックに対して直接的に下位付けされ、次いで、該比較においてスキップされ、かつ以前に上位付けされた全てのＲＴＮビルディングブロックに対して上位付けされる。
これは、以下の例によって説明される：
【０２２８】
例２１
IF Ａ THEN WHERE Ｂ=Ｃ # 5 ELSE WHERE Ｄ=Ｅ#10 END IF # 20
この例においてさらなる処理を要求するネスティングは以下の通りである：
*(1.1) # *(1.2)                                    第１の重み.250、第２の重み.250
(=1.1) IF *(2.1) THEN *(2.2) ELSE *(2.3) END IF  第１の重み.200、第２の重み.255
(=2.1) Ａ                                      第１の重み.200、第２の重み.1
(=2.2) *(3.1) # *(3.2)                         第１の重み.200、第２の重み.200
(=3.1) *(4.1) = *(4.2)                     第１の重み. 50、第２の重み 50
(=4.1) Ｂ                      第１の重み. 49(初期200)、第２の重み. 1
(=4.2) Ｃ                      第１の重み. 49(初期200)、第２の重み. 1
(=3.2) 5                         第１の重み. 249(初期200)、第２の重み. 1
(=2.3) *(5.1) # *(5.2)                      第１の重み. 250、第２の重み. 250
(=5.1) *(6.1) = *(6.2)                  第１の重み. 50、第２の重み. 50
(=6.1) Ｄ                      第１の重み. 49(初期200)、第２の重み. 1
(=6.2) Ｅ                      第１の重み. 49(初期200)、第２の重み. 1
(=5.2) 10                          第１重み. 249(初期200)、第２重み. 1
(=1.2) 20                                第１重み. 249(初期200)、第２重み. 1
ここで、第１の重み(first weight)．は、第１の重み付け（first weighting）であり、
第２の重み(second weight)．は、第２の重み付け（second weighting）であり、
初期(initial)は、第２の包括的グループのＲＴＮビルディングブロックへの導入によって変えられる場合に記述される、第１の包括的グループのＲＴＮビルディングブロックの初期の重み付けである。
ここで、第１の重み２５０を有するＲＴＮビルディンブロック“＃”は、ＲＴＮビルディングブロック“IF THEN ELSE END IF”（これがその最後の決定ポジションに到達した後では、第１の重み２００および第２の重み２５５を有する）に対してのみ上位付けされることが分かる。
【０２２９】
例２１の記述の完全性を目的として、この例では変換ステップ後の選択ステップの実行に由来する、ネスティングを示す：
IF                  呼び出し：第１の包括的グループのＲＴＮビルディングブロック
Ａ
THEN                呼び出し：第１の包括的グループのＲＴＮビルディングブロック
WHERE             呼び出し：第１の包括的グループのＲＴＮビルディングブロック
Ｂ              呼び出し：第２の包括的グループのＲＴＮビルディングブロック
=             呼び出し：第１の包括的グループのＲＴＮビルディングブロック
Ｃ          呼び出し：第２の包括的グループのＲＴＮビルディングブロック
#         呼び出し：第１の包括的グループのＲＴＮビルディングブロック
5
ELSE                呼び出し：第１の包括的グループのＲＴＮビルディングブロック
WHERE             呼び出し：第１の包括的グループのＲＴＮビルディングブロック
Ｄ              呼び出し：第２の包括的グループのＲＴＮビルディングブロック
=             呼び出し：第１の包括的グループのＲＴＮビルディングブロック
Ｅ          呼び出し：第２の包括的グループのＲＴＮビルディングブロック
#         呼び出し：第１の包括的グループのＲＴＮビルディングブロック
10
END
IF                    呼び出し：第２の包括的グループのＲＴＮビルディングブロック
#                   呼び出し：第１の包括的グループのＲＴＮビルディングブロック
20
【０２３０】
第１の包括的グループのＲＴＮビルディングブロックは、それら自身、および、それらに対して上位付けされるＲＴＮビルディンブロックの第１の重みとは無関係に、それらに対して直接的に上位付けされる第１または第２の包括的グループのＲＴＮビルディングブロックに対して下位付け(subordinated)される。
【０２３１】
例２２
WHERE Ａ + MIN Ｂ
【０２３２】
例２２は以下の通りにネストされる：
WHERE * (1.1)                      第１の重み. 200、第２の重み. 200
(=1.1) *(2.1) + *(2.2)           第１の重み. 50、第２の重み. 50
(=2.1) Ａ                      第１の重み. 49（初期 200）、第２の重み. 1
(=2.2) MIN *(3.1)              第１の重み. 49（初期 200）、第２の重み. 200
(=3.1) Ｂ                    第１の重み. 200、第２の重み. 1
【０２３３】
例２２から分かるように、第１の包括的グループのＲＴＮビルディングブロックとしてのＲＴＮビルディングブロック“Ｂ”は、そのより大きい第１重み２００にもかかわらず、それに対して上位付けされたＲＴＮビルディングブロック“MIN”と比較したときに、その上位付けされた第２の包括的グループのＲＴＮビルディングブロック“+”によって変えられる第１重み４９と共に下位付けされる。
【０２３４】
第２の包括的グループのＲＴＮビルディングブロックの第１の重みを比較するときに同一の第１の重みを有する上位付けされたＲＴＮビルディンブロックが存在するならば、各々の包括的サブグループに依存して手続きは異なる：
第２の包括的サブグループのものでもある上位付けされたＲＴＮビルディングブロックの一つと比較されることになる、第２の包括的グループのＲＴＮビルディングブロックが、同一の第１の重みを持つ場合、該比較される必要のあるＲＴＮビルディングブロックは、これらのＲＴＮビルディングブロックが第２の包括的グループの第２の包括的サブグループのＲＴＮビルディングブロックであるならば、このＲＴＮビルディングブロックに対して直接的に下位付けされる。
以下の例が上記を説明するために役に立つ：
【０２３５】
例２３
2009539151.tif 000005
【０２３６】
例２３では、第１の重みを比較するときに、第２の包括的グループの第２の包括的サブグループのＲＴＮビルディングブロックは２度出会う（“/”は“MOD”に出会い、
2009539151.tif 000006
は“/”に出会う）。第２の包括的グループの第２の包括的サブグループへの割り当てにより、これらのＲＴＮビルディングブロックはそれぞれ下位付けされるが、それは、下位付けされたＲＴＮビルディングブロックの処理出力セットが各上位付けされたＲＴＮビルディングブロックの処理入力セットとして受け取られることが定義されているためである。ＲＴＮビルディングブロック“ＲＴＮビルディングブロックの集約”を使用することで、すなわち、括弧でくくることによって、別の第１および第２の重み、ならびに、従って別の計算順序が得られる。
【０２３７】
比較されることになる第２の包括的グループのＲＴＮビルディングブロックが、第２の包括的サブグループのものでもある上位付けされたＲＴＮビルディングブロックの一つと同一の第１の重みを持つ場合、上位付けされたＲＴＮビルディングブロックとの比較は、これらのＲＴＮビルディングブロックが第２の包括的グループの第１の包括的サブグループのＲＴＮビルディングブロックである限り継続される。
【０２３８】
以下の例は、上記を説明するために役に立つ：
例２４
Ａが要求する全ての要素を受け取る。このセットから最初の１００個を受け取り、中間セット１にこれらの１００要素を格納し、この中間セット１から最初の５０要素を受け取る。
WHERE Ａ # 100 AS 中間セット # 50
*(1.1) # *(1.2)                        第１の重み. 250、第２の重み. 250
(=1.1)  *(2.1) AS Zwischenmenge    第１の重み. 250、第２の重み. 250
(=2.1)  *(3.1) # *(3.2)        第１の重み. 250、第２の重み. 250
(=3.1)  WHERE *(4.1)       第１の重み. 249(初期200)、第２の重み. 200
(=4.1) Ａ              第１の重み. 200、第２の重み. 1
(=3.2)  100                第１の重み. 249(最初 200)、第２の重み. 1
(=1.2)  50                     第１の重み. 249(最初 200)、第２の重み. 1
【０２３９】
例２４では、第１の重みを比較するときに、第２の包括的グループの第１の包括的サブグループのＲＴＮビルディングブロックが２度応じる（“AS”は“＃”に応じ、“＃”は“AS”に応じる）。第２の包括的グループの第１の包括的サブグループへの割り当てにより、これらのＲＴＮビルディングブロックは、それぞれ前もって配置される（prearranged）が、それは、下位付けされたＲＴＮビルディングブロックの処理出力セットが各上位付けされたＲＴＮビルディングブロックの処理入力セットとして受け取られることが定義されているためである。
【０２４０】
可能な最も大きい第２の重みのＲＴＮビルディングブロックの決定ポジション７０に直接的に導入されるＲＴＮビルディングブロックが、各々のＲＴＮビルディングブロックに関して望まれる場合には第２の包括的グループのＲＴＮビルディングブロックに対してのみ下位付けされることは重要である。これは、次の方法によって行われ、即ち、第１の包括的グループのＲＴＮビルディングブロックであって、該第１の包括的グループのＲＴＮビルディングブロックが、ＲＴＮビルディングブロックの全体から一つが導入可能（introducible）である第２の可能な最大の重みの大きさを有するＲＴＮビルディングブロックの決定ポジションの一つに直接的に導入されるときに、第２の包括的グループのＲＴＮビルディングブロックに対して下位付けされることが予め定められているものである当該第１の包括的グループのＲＴＮビルディングブロックが、最小の重みの大きさの第２の重みを割り当てられ、かつ、そのような場合において、最小の大きさの第２の重みを持たない当該第１の包括的グループのＲＴＮビルディングブロックが、第２の包括的グループのＲＴＮビルディングブロックに対して下位付けされない、という方法である。
【０２４１】
２つの例が、これらの２つの可能な場合に関するネスティングを示すが、これらは、上述した方法の後では以下の結果となる。
【０２４２】
例２５
第１の可能な場合：可能な最も大きい重みの大きさを有する第２の重みの上位付けされたＲＴＮビルディングブロックの決定ポジション７０において、最小の重みの大きさの重みではない第２の重みの第１の包括的グループのＲＴＮビルディングブロックが導入される（この例では、キーワードは“WHERE”）：
[ WHERE MAX Ａ + Ｂ / Ｃ = Ｄ ]
【０２４３】
例２５においてさらなる処理を要求するネスティングは以下の通りである：
[ *(1.1) ]                            第１の重み. 200、第２の重み. 255
(=1.1)  WHERE *(2.1)                第１の重み. 200、第２の重み. 200
(2.1)  *(3.1) = *(3.2)            第１の重み. 50、第２の重み. 50
(=3.1) MAX *(4.1)               第１の重み. 49(初期. 200)、第２の重み. 200
(=4.1) *(5.1) + *(5.2)        第１の重み. 17、第２の重み. 17
(=5.1) Ａ                   第１の重み. 16(初期. 200)、第２の重み. 1
(=5.2) *(6.1) / *(6.2)      第１の重み. 14、第２の重み. 14
(=6.2) Ｂ                 第１の重み. 13(初期. 200)、第２の重み. 1
(=6.3) Ｃ                 第１の重み. 13(初期. 200)、第２の重み. 1
(=3.2)  Ｄ                      第１の重み. 49、第２の重み. 200
【０２４４】
ＲＴＮビルディングブロック“MAX”はキーワード“/”を有するＲＴＮビルディングブロックに対して下位付けされるが、これは、その上位付けされたＲＴＮビルディングブロック“WHERE”が可能な最大の重みの大きさの重みを持たないためである。
ＲＴＮビルディングブロック“WHERE”は、グローバル定義に従って、キーワード“=”を有するＲＴＮビルディングブロックに対して下位付けされるべきであるが、これはこの場合には起こらない。それは、その上位付けされたＲＴＮビルディングブロック“レベル”（“［ ］”）は、第２の可能な最大の重みの大きさを持っているが、一方、ＲＴＮビルディングブロック“WHERE”は、最小の重みの大きさの第２の重みを持っていないためである。
【０２４５】
ＲＴＮビルディングブロックの異なるネスティングが達成されるべきならば、これは、ＲＴＮビルディングブロック“ＲＴＮビルディングブロックの集約”(“()”)（例、WHERE (MAX (Ａ + Ｂ / Ｃ) = Ｄ)、MAX Ａ + Ｂ / Ｃと同等）を使用することによって行なうことができる。
【０２４６】
例２６
第２の可能な場合：可能な最も大きい重みの大きさの第２の重みを有する上位付けされたＲＴＮビルディングブロックの決定ポジション７０において、最小の重みの大きさの第２の重みを有する第１の包括的グループのＲＴＮビルディングブロックが導入される（この例ではキーワード“Ａ”）：
[ Ａ + Ｂ ]
[ *(1.1) ]                        第１の重み. 200、第２の重み. 255
(=1.1)  *(2.1) + *(2.2)       第１の重み. 17、第２の重み. 17
(=2.1) Ａ                 第１の重み. 16（初期 200）、第２の重み. 1
(=2.2) Ｂ                 第１の重み. 16（初期 200）、第２の重み. 1
【０２４７】
例２６は、ＲＴＮビルディングブロック“加法／減法 演算”が、ＲＴＮビルディングブロック“テーブルフィールド”（Ａ）に対して上位付けされるということを示しており、これは、ＲＴＮビルディングブロック“Ａ”がＲＴＮビルディングブロック“レベル”の決定ポジション７０に直接的に導入され、ＲＴＮビルディングブロックＡは最小の重みの大きさの第２の重みを有しており、かつ、直接的に導入されたＲＴＮビルディングブロック“レベル”は可能な最も大きい重みの大きさの第２の重みを持っているためである。
【０２４８】
本発明の一つの更なる実施形態をここで与える。この場合には、ステートメントに従って、変換ステップの後で、第２の包括的グループのＲＴＮビルディングブロックの導入を指示する任意選択の決定ポジションが後に続く、第２の包括的グループのＲＴＮビルディングブロックが、正確にこの任意選択の決定ポジションにおいて、導入された第２の包括的グループのＲＴＮビルディングブロックである。
このような場合には、この最後の決定ポジションで導入されるＲＴＮビルディングブロックは常に、それより以前に上位付けされたＲＴＮビルディングブロックに対して上位付けされた目下の２つのＲＴＮビルディングブロックの第１および第２の重みとは無関係である。
【０２４９】
これは以下の例によって示されるが、以下の例が示しているのは、変形（variant）“中間セット”中のフィールドＡの値が格納され、この変数“中間セット”に対してフィールドＢの値が加えられ、次いでこの値が値Ｃと一致しているかどうかが調べられるということ、および、次いでこの比較の結果が変数“結果IN”に格納されるということである。
【０２５０】
Ａ AS 中間セット ＋ Ｂ IN (Ｃ) AS 結果IN
【０２５１】
ここでは、より小さい第１の重み１７にもかかわらず、キーワード“＋”を有するＲＴＮビルディングブロックは、第１の重みが２５０であるキーワード“AS”を有するＲＴＮビルディングブロックに対して上位付けされる。同じことがキーワード“IN”および“AS”を有するＲＴＮビルディングブロックに関しても起こり、ここで、上位付けされる必要があるキーワード“AS”を有するＲＴＮビルディングブロックの第１の重みは、キーワード“IN”を有するＲＴＮビルディングブロックの第１の重み（６０）とは独立して、より高い（２５０）ものである。
【０２５２】
当該のＲＴＮビルディングブロックに従って、ＲＴＮビルディングブロックグループもまた、例えば算術型または論理型の処理関数のみを含む、ステートメントまたはステートメントの一部として定義することができる。そのような場合について一致するのは、第１および第２の包括的グループの全てのＲＴＮビルディングブロックが、少なくとも一つのＲＴＮビルディングブロックを割り当てられることができ、ここで該少なくとも一つのＲＴＮビルディングブロックは、第１および第２の包括的グループのＲＴＮビルディングブロックが、可能な最も大きい第２の重みを有するＲＴＮビルディングブロックの、全てのＲＴＮビルディングブロックからの一つが導入されうる決定ポジションに直接的に導入されるときに、上位付けされることになるということである。
【０２５３】
以下のＲＴＮビルディングブロックは、ある程度は、可能な最も大きい重みの大きさを有する第２の重みのＲＴＮビルディングブロックの決定ポジション７０に直接的に導入される限りにおいて、下記する割り当てを含む：
【０２５４】
ＲＴＮビルディングブロック“テーブルフィールド”：このＲＴＮビルディングブロックは、“SELECT”ＲＴＮビルディングブロック、このフィールドにおけるテーブルの名前を含むＲＴＮビルディングブロック“テーブル”、ならびに、２つのＲＴＮビルディングブロック“テーブル”および“テーブルフィールド”を互いに関係させるためのＲＴＮビルディングブロック“値のリンク”を自動的に前置され（prefixed）得る。
【０２５５】
例２７
[テーブル_フィールド_名]
これは、自動的な前置の後では：
[SELECT テーブル_名.テーブル_フィールド_名]
となる。
【０２５６】
ＲＴＮビルディングブロック“テーブル”：このＲＴＮビルディングブロックは、全てのテーブルフィールドを渡すために“SELECT”ＲＴＮビルディングブロックを前に置かれ（preceded with）得る。
【０２５７】
例２８
[テーブル_名]
これは、自動的な前置の後では：
[SELECT テーブル_名.*]
となる。
【０２５８】
計算または比較演算を実行するＲＴＮビルディングブロック：これらのＲＴＮビルディングブロックは、“WHERE”ＲＴＮビルディングブロックを前置され得るが、これが存在しない場合にも、例えばそれぞれに必要なＲＴＮビルディングブロック“セット要素形成”および“値のリンク”を有する全ての使用されるテーブルの全てのフィールドを渡す、“SELECT”ＲＴＮビルディングブロックを前置され得る。
【０２５９】
例２９
[ Ａ + Ｂ ]
これは、自動的な前置の後で、
[ SELECT テーブル_名.Ａ, テーブル_名.Ｂ
WHERE テーブル_名.Ａ + テーブル_名.Ｂ ]
となる。
【０２６０】
表１および表２は、各々の第１および第２の重みを有するあり得るＲＴＮビルディングブロックのリスト、ならびに、該ＲＴＮビルディングブロックの決定グラフを含んでおり、該決定グラフにおいては、ＲＴＮビルディングブロックの決定グラフが決定ポジションで実行されるときに、クエリステートメントのキーワードが、関連する印に依存して、文字列、記号、変数または数字のいずれかと比較されるか、あるいは、全てのＲＴＮビルディングブロックからＲＴＮビルディングブロックが挿入され、次いでそれが再び実行される。
【０２６１】
各決定ポジション７０において、常に全てのＲＴＮビルディングブロックから選択することができるということから、決定ポジションでの選択が限られている場合と比較して、クエリステートメントを定式化するときにより高い自由度が可能である。
【０２６２】
ＲＴＮビルディングブロック“NEXT”は、例で示すように作用し、その処理入力セットから、現在の要素ごとに、その処理出力セットにおいて決定ポジション７０で挙げられたその次の要素を再び渡す。
例えば、決定ポジション７０の代わりに数字のみが許されているのであれば、現在の要素ごとに渡されることになる次の要素の数字のみ決定することができ、そして、次いでその１つ目の決定ポジション７０においてＲＴＮビルディングブロック“WHERE”が導入される決定ポジション７０を用いることによって、現在の要素の後に従い、かつ、ＲＴＮビルディングブロック“セット要素の制限”の処理出力セットにある要素が、ＲＴＮビルディングブロック“セット要素の制限”によって渡され得る。従って、これは全てのＲＴＮビルディングブロックに対してあてはまる。例えば、ＲＴＮビルディングブロック“MAX”を使用することにより、ＲＴＮビルディングブロック“MAX”の決定ポジション７０において挙げられた最も大きい値を有する正確に後に続く要素（exactly the subsequent element）を、現在の要素から始めて、検索することができる。
【０２６３】
以下の抽象化された例がこれを説明するのに役に立つ。
【０２６４】
例３０
ORDERBY Ａ
NEXT (WHERE Ｂ=Ｃ # 100)
NEXT (MAX Ｄ # 20)
【０２６５】
ここでは、セットが値Ａによってソートされた後、比較Ｂ=Ｃがあてはまる正確に１００個の要素が、該セットの各要素のために渡される。次いで、このセットから、値Ｄが現在の要素から始めて最も大きい２０個に入るものである後続する２０個の要素のセットが渡される。
【０２６６】
例３１
テスト株式（test share）と名付けられた２００６年１月１日時による株式の位置が見つけられ、さらなる計算のために受け取られて、その日以来、株式が２０％だけ上昇するまでに経過した日数が表示される。
WHERE (株式.名=“テスト株式”)
ORDERBY 株式.日付
FIND WHERE (株式.日付=01.01.2006) AS 位置010106
SELECT NEXT (WHERE (株式.位置>=位置010106*1.2 # 1).日付-株式.日付
【０２６７】
例３１におけるステートメントの記述：
“テスト株式”と名付けられた株式を検索する。
これらの株式を日付によってソートする。
【０２６８】
日付が２００６年１月１日である要素を正確に検索し、この要素を変数 位置01012006に格納する。
“FIND”によって現在の要素として印をされた要素に基づいて、その位置が、現在の要素から始めて、変数 位置010106に格納された値よりも２０％だけ大きい株式が検索される。
#1はWHEREによって見つかった要素を１つ目の要素に制限し、それゆえ、NEXTもまたWHEREが要求する１つ目の要素の値のみを渡す。
見つかった要素の値の、現在の要素の値との比較を可能とするために、NEXTを使用しなければならず、経過した日数は、この例では、このようにして計算される。
結果の表示はキーワードSELECTによる。
【０２６９】
これと関連して、例えば以下の印が使用される：
［ ］において与えられた決定ポジションは任意選択でのみ実行され、期待されるキーワードは“”で示しており、(“キーワード１” 1/2 “キーワード２”)は“キーワード１” ＯＲ “キーワード２”を表しており、*は決定ポジション７０を表しており、(x)および(*x)のそれぞれは、ある位置（*x）から別の位置(x)への、各印の飛び越し位置であり、そしてＶ：変数名およびＶ：数字のそれぞれは、自由に選択可能なそれぞれ変数および数字のそれぞれを表している。
ＲＴＮビルディングブロックは、これらのＲＴＮビルディングブロックがステートメント中で使用される頻度とおおよそ一致する順序で並べられるため、頻出するＲＴＮビルディングブロックはより早く見つけることができ、可能な限り少ない比較が必要とされる。
【０２７０】
ＲＴＮビルディングブロックを、２つの包括的グループへの変換ステップの前（表１）および変換ステップ後（表２）の両方で示している。
このリストは、さらなるＲＴＮビルディングブロックによっていつでも、簡便に拡張することができ、従って網羅的なものではないことに留意すべきである。
【０２７１】
最適化されたアクセスプランに到達するために、ステートメントにおける順序に従って、および、重みに従ってネストされ、かつ、特定のＲＴＮビルディングブロックグループを割り当てられたＲＴＮビルディングブロックは、エンジンインターフェースの要素においてそれぞれ変換されなければならず、ここで、一つのエンジンインターフェースの要素は、処理ステップに従って設定され得る、独立した構成要素の記録を有するものである。
【０２７２】
本発明の方法は、また、関係データベースシステムをプログラム的に組み立てるために好適であり、該システムは、少なくともコンピュータシステムを有し、該コンピュータシステムは、少なくとも関係データベース、少なくともデータ処理ユニット、および、少なくともメモリを持っており、通常、例えば、コンピュータプログラムとして、当該方法を実施するために設定された各々の命令（インストラクション）を持っている。
そのようなコンピュータプログラムは、任意の形態をとってよい。具体的には、それは、フロッピーディスク、ＣＤ、または、ＤＶＤといったコンピュータが読み取り可能な媒体上のコンピュータプログラム製品であってよく、コンピュータプログラムコード手段を有しており、それによって、コンピュータは、本発明のデータキャリアまたは電子キャリア信号を生成するために、該コンピュータプログラムを読み込んだ後、毎回、当該方法を実行するよう該プログラムによって指示される。しかしながら、それは、例えば、コンピュータプログラム製品であって、該コンピュータプログラム製品は、電子的なキャリア信号上のコンピュータプログラムを有する、当該コンピュータプログラム製品であってもよく、該コンピュータプログラムの読み込んだ後、毎回、コンピュータは、該プログラムによって本発明の方法を実行するよう指示されるものである。
【０２７３】
【表１−１】
2009539151.tif 000007
【０２７４】
【表１−２】
2009539151.tif 000008
【０２７５】
【表２−１】
2009539151.tif 000009
【０２７６】
【表２−２】
2009539151.tif 000010
【０２７７】
【表２−３】
2009539151.tif 000011
【図１】
2009539151.tif 000012
【図２】
2009539151.tif 000013
【図３】
2009539151.tif 000014
【図４】
2009539151.tif 000015
【図５】
2009539151.tif 000016
【図６】
2009539151.tif 000017
【図７】
2009539151.tif 000018
【図８】
2009539151.tif 000019
【図９】
2009539151.tif 000020
【図１０】
2009539151.tif 000021
【図１１】
2009539151.tif 000022
【図１２】
2009539151.tif 000023
【図１３】
2009539151.tif 000024
【図１４】
2009539151.tif 000025
【図１５】
2009539151.tif 000026
【図１６】
2009539151.tif 000027
【図１７】
2009539151.tif 000028
【国際調査報告】
2009539151.tif 000029
2009539151.tif 000030
2009539151.tif 000031
2009539151.tif 000032
2009539151.tif 000033
2009539151.tif 000034