(57)【要約】【課題】  大規模ＲＤＢにおける表において、キー項目の値でグルーピングされるデータ毎に、キー項目以外のデータ項目値の最大・最小値を効率よく検索する。【解決手段】  少なくとも、複数のレコードで同じ値を保持したキー項目Ｘと該キー項目Ｘにおける同じ値の各レコードに対して付与された通番を保持した通番項目Ｙを有する操作対象の表Ｔから、表Ｔａと表Ｔｂを別名定義する手段（００４ａ）と、表Ｔａのキー項目Ｘにおける値と表Ｔｂのキー項目Ｘにおける値とが一致すると共に、表Ｔａの通番項目Ｙにおける値が表Ｔｂの通番項目Ｙにおける値＋１と一致し、かつ、表Ｔｂの通番項目Ｙにおける値がＮＵＬＬ値であるとの条件で、表Ｔａに表Ｔｂを外部結合して、操作対象の表Ｔにおけるキー項目Ｘの値が同じ複数のレコードから、通番項目Ｙの値が最小となるレコードを抽出する手段（００４ｂ）とを設ける。【選択図】        図１７
2006227687.tif 000002
【特許請求の範囲】
【請求項１】
入力されたＳＱＬのＳＥＬＥＣＴ文を実行して、リレーショナルデータベースで登録された表の操作を行うデータベース操作システムであって、
操作対象の表Ｔは、少なくとも、複数のレコードで同じ値を保持したキー項目Ｘと該キー項目Ｘにおける同じ値の各レコードに対して付与された通番を保持した通番項目Ｙとからなり、
該操作対象の表Ｔから、該表Ｔと同じ内容の表を、表Ｔａと表Ｔｂとしてそれぞれ別名で生成して記憶装置に記憶する第１の手段と、
上記記憶装置から上記表Ｔａと上記表Ｔｂを読み出し、該表Ｔａのキー項目Ｘにおける値と上記表Ｔｂのキー項目Ｘにおける値とが一致すると共に、上記表Ｔａの通番項目Ｙにおける値が上記表Ｔｂの通番項目Ｙにおける値＋１と一致し、かつ、上記表Ｔｂの通番項目Ｙにおける値がＮＵＬＬ値であるとの条件で、上記表Ｔａに上記表Ｔｂを外部結合して、上記操作対象の表Ｔにおけるキー項目Ｘの値が同じ複数のレコードから、上記通番項目Ｙの値が最小となるレコードを抽出する第２の手段と
を有することを特徴とするデータベース操作システム。
【請求項２】
下記ＳＥＬＥＣＴ文に相当するオブジェクトコードを含み、コンピュータを、請求項１に記載のデータベース検索システムにおける各手段として機能させるためのプログラム。
「ＳＥＬＥＣＴ  Ｔａ．＊  ＦＲＯＭ  Ｔ  Ｔａ，Ｔ  Ｔｂ
ＷＨＥＲＥ
Ｔａ．Ｘ  ＝  Ｔｂ．Ｘ（＋）  ＡＮＤ
Ｔａ．Ｙ  ＝  Ｔｂ．Ｙ  ＋  １（＋）  ＡＮＤ
Ｔｂ．Ｙ  ＩＳ  ＮＵＬＬ；」
【請求項３】
入力されたＳＱＬのＳＥＬＥＣＴ文を実行して、リレーショナルデータベースで登録された表の操作を行うデータベース操作システムであって、
操作対象の表Ｔは、少なくとも、複数のレコードで同じ値を保持したキー項目Ｘと該キー項目Ｘにおける同じ値の各レコードに対して付与された通番を保持した通番項目Ｙとからなり、
該操作対象の表Ｔから、該表Ｔと同じ内容の表を、表Ｔａと表Ｔｂとしてそれぞれ別名で生成して記憶装置に記憶する第１の手段と、
上記記憶装置から上記表Ｔａと上記表Ｔｂを読み出し、該表Ｔａのキー項目Ｘにおける値と上記表Ｔｂのキー項目Ｘにおける値とが一致すると共に、上記表Ｔａの通番項目Ｙにおける値が上記表Ｔｂの通番項目Ｙにおける値−１と一致し、かつ、上記表Ｔｂの通番項目Ｙにおける値がＮＵＬＬ値であるとの条件で、上記表Ｔａに上記表Ｔｂを外部結合して、上記操作対象の表Ｔにおけるキー項目Ｘの値が同じ複数のレコードから、上記通番項目Ｙの値が最大となるレコードを抽出する第２の手段と
を有することを特徴とするデータベース操作システム。
【請求項４】
下記ＳＥＬＥＣＴ文に相当するオブジェクトコードを含み、コンピュータを、請求項３に記載のデータベース検索システムにおける各手段として機能させるためのプログラム。
「ＳＥＬＥＣＴ  Ｔａ．＊  ＦＲＯＭ  Ｔ  Ｔａ，Ｔ  Ｔｂ
ＷＨＥＲＥ
Ｔａ．Ｘ  ＝  Ｔｂ．Ｘ（＋）  ＡＮＤ
Ｔａ．Ｙ  ＝  Ｔｂ．Ｙ  −  １（＋）  ＡＮＤ
Ｔｂ．Ｙ  ＩＳ  ＮＵＬＬ；」
【請求項５】
入力されたＳＱＬのＳＥＬＥＣＴ文を実行して、リレーショナルデータベースで登録された表の操作を行うデータベース操作システムであって、
操作対象の表Ｔは、少なくとも、複数のレコードで同じ値を保持したキー項目Ａと該キー項目Ａにおける各データに対応付けられた値を保持した項目Ｃとからなり、
該操作対象の表Ｔから、該表Ｔと同じ内容の表を、表Ｔａと表Ｔｂとしてそれぞれ別名で生成して記憶装置に記憶する第１の手段と、
上記記憶装置から上記表Ｔａと上記表Ｔｂを読み出し、該表Ｔａのキー項目Ａにおける値と上記表Ｔｂのキー項目Ａにおける値とが一致すると共に、上記表Ｔａの項目Ｃにおける値が上記表Ｔｂの項目Ｃにおける値より大きく、かつ、上記表Ｔｂの項目Ｃにおける値がＮＵＬＬ値であるとの条件で、上記表Ｔａに上記表Ｔｂを外部結合して、上記操作対象の表Ｔにおけるキー項目Ａの値が同じ複数のレコードから、上記項目Ｃの値が最小となるレコードを抽出する第２の手段と
を有することを特徴とするデータベース操作システム。
【請求項６】
下記ＳＥＬＥＣＴ文に相当するオブジェクトコードを含み、コンピュータを、請求項５に記載のデータベース検索システムにおける各手段として機能させるためのプログラム。
「ＳＥＬＥＣＴ  Ｔａ．＊  ＦＲＯＭ  Ｔ  Ｔａ，Ｔ  Ｔｂ
ＷＨＥＲＥ
Ｔａ．Ａ  ＝  Ｔｂ．Ａ（＋）  ＡＮＤ
Ｔａ．Ｃ  ＞  Ｔｂ．Ｃ（＋）  ＡＮＤ
Ｔｂ．Ｃ  ＩＳ  ＮＵＬＬ；」
【請求項７】
入力されたＳＱＬのＳＥＬＥＣＴ文を実行して、リレーショナルデータベースで登録された表の操作を行うデータベース操作システムであって、
操作対象の表Ｔは、少なくとも、複数のレコードで同じ値を保持したキー項目Ａと該キー項目Ａにおける各データに対応付けられた値を保持した項目Ｃとからなり、
該操作対象の表Ｔから、該表Ｔと同じ内容の表を、表Ｔａと表Ｔｂとしてそれぞれ別名で生成して記憶装置に記憶する第１の手段と、
上記記憶装置から上記表Ｔａと上記表Ｔｂを読み出し、該表Ｔａのキー項目Ａにおける値と上記表Ｔｂのキー項目Ａにおける値とが一致すると共に、上記表Ｔａの項目Ｃにおける値が上記表Ｔｂの項目Ｃにおける値より小さく、かつ、上記表Ｔｂの項目Ｃにおける値がＮＵＬＬ値であるとの条件で、上記表Ｔａに上記表Ｔｂを外部結合して、上記操作対象の表Ｔにおけるキー項目Ａの値が同じ複数のレコードから、上記項目Ｃの値が最大となるレコードを抽出する第２の手段と
を有することを特徴とするデータベース操作システム。
【請求項８】
下記ＳＥＬＥＣＴ文に相当するオブジェクトコードを含み、コンピュータを、請求項７に記載のデータベース検索システムにおける各手段として機能させるためのプログラム。
「ＳＥＬＥＣＴ  Ｔａ．＊  ＦＲＯＭ  Ｔ  Ｔａ，Ｔ  Ｔｂ
ＷＨＥＲＥ
Ｔａ．Ａ  ＝  Ｔｂ．Ａ（＋）  ＡＮＤ
Ｔａ．Ｃ  ＜  Ｔｂ．Ｃ（＋）  ＡＮＤ
Ｔｂ．Ｃ  ＩＳ  ＮＵＬＬ；」
【請求項９】
リレーショナルデータベースで登録された表の操作を行うデータベース操作システムであって、
操作対象の表Ｔは、少なくとも、複数のレコードで同じ値を保持したキー項目Ｘと該キー項目Ｘにおける同じ値の各レコードに対して付与された通番を保持した通番項目Ｙとからなり、
該操作対象の表Ｔから、該表Ｔと同じ内容の表を、表Ｔａと表Ｔｂとしてそれぞれ別名で生成して記憶装置に記憶する第１の手段と、
上記記憶装置から上記表Ｔｂを読み出して、該表Ｔｂの通番項目Ｙにおける各値を１加算した表Ｔｂ’を生成する第２の手段と、
上記記憶装置から上記表Ｔａを読み出して、該表Ｔａと上記表Ｔｂ’とを比較して、該表Ｔｂ’に存在しない通番項目Ｙの値を保持する上記表Ｔａにおけるレコードを抽出する第３の手段と
を有し、上記操作対象の表Ｔにおける上記キー項目Ｘの値が同じ複数のレコードから、上記通番項目Ｙの値が最小となるレコードを選択することを特徴とするデータベース操作システム。
【請求項１０】
リレーショナルデータベースで登録された表の操作を行うデータベース操作システムであって、
操作対象の表Ｔは、少なくとも、複数のレコードで同じ値を保持したキー項目Ｘと該キー項目Ｘにおける同じ値の各レコードに対して付与された通番を保持した通番項目Ｙとからなり、
該操作対象の表Ｔから、該表Ｔと同じ内容の表を、表Ｔａと表Ｔｂとしてそれぞれ別名で生成して記憶装置に記憶する第１の手段と、
上記記憶装置から上記表Ｔｂを読み出して、該表Ｔｂの通番項目Ｙにおける各値を１減算した表Ｔｂ’を生成する第２の手段と、
上記記憶装置から上記表Ｔａを読み出して、該表Ｔａと上記表Ｔｂ’とを比較して、該表Ｔｂ’に存在しない通番項目Ｙの値を保持する上記表Ｔａにおけるレコードを抽出する第３の手段と
を有し、上記操作対象の表Ｔにおける上記キー項目Ｘの値が同じ複数のレコードから、上記通番項目Ｙの値が最大となるレコードを選択することを特徴とするデータベース操作システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータによるリレーショナルデータベース（ＲＤＢ：Relational DataBase）の操作技術に係わり、特に、特定データ項目の値が同一であるデータ群毎に、他のデータ項目における最大値もしくは最小値を効率良く求めるのに好適な技術に関するものである。
【背景技術】
【０００２】
行（レコード）と列（データ項目）からなる二次元の表（テーブル）形式で構成されるＲＤＢシステムに対する操作言語として代表的なものにＳＱＬ（Structured Query Language）がある。
【０００３】
このＳＱＬを用いて、例えば、図１５に示す表Ｔｃ１５００に対して処理を実行し、図１６に示す実行結果テーブル１６００、つまり各「顧客ＩＤ」毎の「伝票発行通番」の最大値を求めたい場合は、通常、プログラムされたコンピュータが、次の記述内容のＳＥＬＥＣＴ文を実行することによって実現される。
【０００４】
ＳＥＬＥＣＴ  顧客ＩＤ、伝票発行通番
ＦＲＯＭ  表Ｔｃ
ＷＨＥＲＥ  伝票発行通番  ＝（ＳＥＬＥＣＴ  ＭＡＸ（伝票発行通番））
ＧＲＯＵＰ  ＢＹ  顧客ＩＤ
【０００５】
上記に示すＳＥＬＥＣＴ文では、ＷＨＥＲＥ句の中において、最大値を求める関数ＭＡＸを実行するＳＥＬＥＣＴ文（ＳＥＬＥＣＴ  ＭＡＸ）が使用されている。このように１つのＳＥＬＥＣＴ文中に、別のＳＥＬＥＣＴ文を入れ子の状態で記述することを「副問合せ」と呼ぶ。
【０００６】
データベース操作において「副問合せ」を使用する場合、操作プログラム（コーディング）はシンプルとなるが、操作対象データベースの行（レコード数）が数万件〜数十万件にわたるような大容量のデータベースの場合には、ＳＥＬＥＣＴ文の実行回数が多くなり、その結果、操作結果が出力されるまでの処理時間が増大してしまうという問題がある。
【０００７】
このような問題に対処するために、例えば、特許文献１には、「副問合せ」を効率よく処理することができるデータベース検索技術が開示されている。
【０００８】
このデータベース検索技術では、ユーザアプリケーションから外部参照列を含む副問合せを使用した場合に、この副問合せ部分を実行する処理において、外部参照列の値と、その値に対応する副問合せの実行結果とを格納する記憶手段を用意し、外部参照列の値が、記憶手段に格納されている値に一致しているか否かを判定し、一致していなときは、当該外部参照列の値を用いて副問合せを実行し、当該外部参照列の値と副問合せの実行結果とを対応させて記憶手段に記憶し、また、一致しているときは、当該外部参照列の値に対応する副問合せの実行結果を、記憶手段から直接取得する。
【０００９】
【特許文献１】特開２００１−２１６３０５号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
大規模、大容量のＲＤＢに対して、ある特定のデータ項目の値でグループ分け（グルーピング）されるデータ毎に、そのグルーピング・キー・データ項目以外のデータ項目に関して、そのデータ項目の値の最大値、または最小値を求める必要が生じる場合ある。
【００１１】
このようなニーズは、通常、ある特定の業務処理システムにおいて更新・参照されているデータベースシステムに対して、その業務処理システムとは別個のシステムから当該データベースのデータ内容を分析・調査するような場合である。
【００１２】
このような場合、分析対象のデータベースを更新・参照している既存の業務処理システムとは別の独立したデータベース検索プログラムを必要とする。
【００１３】
既存のデータベースシステムを分析・調査するために、前記の「背景技術」欄で例示したＳＥＬＥＣＴ文によるデータ問合せを行う場合、つまり、あるキー項目が同じ値であるレコード毎に、別データ項目の最大値・最小値を求める場合、求める範囲内での最大値・最小値の検索が必要となるため、キー項目にｎ種類のデータが存在する場合、ｎ回の副問合せを実行することになる。この場合、処理時間の増大と高負荷を招くことになる。
【００１４】
また、上記特許文献１に記載のデータベース検索技術では、副問合せ部分を実行する処理の効率を上げてデータベース検索の高速化を図るが、全体の処理時間に締める副問合わせの割合は高く、副問合せの実行結果等を格納する作業表（記憶手段）を設けている点で、大容量データベースを検索対象とした場合には最適な検索技術とは言えない。
【００１５】
解決しようとする問題点は、従来の技術では、ＳＥＬＥＣＴ文によるデータ問合せとして、キー項目における値が同じであるレコード毎に、別データ項目の最大値・最小値を求める場合、求める範囲内での最大値・最小値の検索が必要となるため、キー項目にｎ種類のデータが存在する場合、ｎ回の副問合せを実行することになり、処理時間の増大と高負荷を招くことを回避できない点である。
【００１６】
本発明の目的は、これら従来技術の課題を解決し、大規模、大容量のＲＤＢに対して、ある特定のデータ項目の値でグルーピングされるデータ毎に、そのグルーピング・キー・データ項目以外のデータ項目値の最大値、または最小値を、効率よく検索することを可能とすることである。
【課題を解決するための手段】
【００１７】
上記目的を達成するため、本発明では、ＲＤＢ（リレーショナルデータベース）の操作言語ＳＱＬで提供される、「別名定義（ＡＬＩＡＳ）」と「外部結合（ＯＵＴＥＲ−ＪＯＩＮ）」とを用いて、ある特定のデータ項目（キー項目）の値でグループ分け（グルーピング）されるデータ毎に、そのグルーピング・キー・データ項目（キー項目）以外のデータ項目（例えば通番項目）に関して、そのデータ項目（例えば通番項目）の値の最大値、または最小値を求める。詳細には、まず、検索対象のＲＤＢの表Ｔについて、表Ｔａと表Ｔｂに、それぞれ別名定義し、次に、例えば下記第１から第３の条件で、表Ｔａに表Ｔｂを外部結合する。表Ｔａのキー項目（Ｘ，Ａ）の値と表Ｔｂのキー項目（Ｘ，Ａ）の値が一致する（第１の条件）と共に、最小値・最大値を求める表Ｔａの通し番号データ項目（Ｙ，Ｃ）の値が、表Ｔｂの同じ通し番号データ項目（Ｙ，Ｃ）の値＋１・−１であり（第２の条件）、かつ、表Ｔｂのデータ項目（通し番号）値がＮＵＬＬ値である（第３の条件）。尚、第２の条件として、最小値・最大値を求める表Ｔａの任意のデータ項目の値が、同じく最小値・最大値を求める表Ｔｂの当該データ項目の値より大きい・小さいこととしても良い。
【発明の効果】
【００１８】
本発明によれば、ＲＤＢに対して、所定のＳＥＬＥＣＴ文を実行することにより、ある特定のデータ項目の値でグルーピングされるデータ毎に、そのグルーピング・キー・データ項目以外のデータ項目値の最大値、または最小値を効率よく検索することができる。また、本発明では、副問合せを使わないので、ＳＥＬＥＣＴ文の発行回数が必要最小限となり、検索処理時間が、副問合せを使用する検索よりも短く、高速検索が可能となる。特に、大規模、大容量のデータベースを検索対象とした場合に、その効果が顕著となる。また、本発明を利用して最大値または最小値を含むレコードを特定する場合、キー項目以外の項目についても同時出力が可能となり、１回の検索で取得可能である。例えば、特許文献１の技術では、最大値（最小値）特定の検索（副問合せ）の結果を取得し、その結果を条件に指定した検索を行わなければならないため２回以上の検索が必要であった。具体例として、検索対象１００レコードについて１レコード当たり１０回の副問合わせを行う場合、１００１回の検索処理（本処理１回＋副問合わせ１０００回）が発生するが、本発明では１回の検索処理で検索を完了することができる。また、本発明では、検索処理中に検索結果データの一時記憶領域を設ける必要もなく、大きな記憶領域を必要としない検索ができる。また、本発明では、既存のデータベースシステムから必要なデータを抜き出したデータ集合としての所謂データマートの作成を必要としないため、データベースの環境変更を行う必要がなく、資源の節約になる。
【発明を実施するための最良の形態】
【００１９】
以下、図を用いて本発明を実施するための最良の実施形態例を説明する。図１７は、本発明に係わるデータベース検索システムの構成例を示すブロック図であり、図１は、図１７におけるデータベース検索システムが実行するＳＥＬＥＣＴ文の第１の例を示す説明図、図２は、図１７におけるデータベース検索システムが保持するリレーショナルデータベースの第１のデータ構成例を示す説明図、図３は、図１７におけるデータベース検索システムの第１の処理動作例を示す説明図、図４は、図３における処理動作の結果表示例を示す説明図である。
【００２０】
図１７におけるデータベース検索システムは、リレーショナルデータベース（ＲＤＢ）００１と、コンピュータ処理装置００２、表示装置００５からなり、コンピュータ処理装置００２は、ＣＰＵ（Central Processing Unit）や主記憶装置（主メモリ）、表示装置、入力装置、外部記憶装置、周辺装置等を具備し、周辺装置としての光ディスク駆動装置等を介してＣＤ−ＲＯＭ等の記憶媒体に記録されたプログラムやデータを外部記憶装置内にインストールした後、この外部記憶装置から主メモリに読み込みＣＰＵで処理することにより、データベース管理システム（図中「ＤＢＭＳ」と記載）００３と本発明に係わるデータベース検索処理部００４の各処理機能（別名定義処理部００４ａ、外部結合処理部００４ｂ、表生成出力処理部００４ｃ）を構成する。
【００２１】
リレーショナルデータベース００１には例えば図２に示す表を含む大量データが記録されており、データベース検索処理部００４は、ＤＢＭＳ（データベース管理システム）００２を介してリレーショナルデータベース００１に記録されたデータの読み書き操作を行う。
【００２２】
本例においては、ＳＱＬのＳＥＬＥＣＴ文を用いて、リレーショナルデータベース００１に記録されたデータの操作を行う。このリレーショナルデータベースの操作言語ＳＱＬでは、上述した「副問合せ」の他にも、例えば次の（１）、（２）の２つの機能が提供されており、本例では、この２つの機能を用いている。
【００２３】
（１） 表（テーブル）の「ＡＬＩＡＳ」（以下、「別名定義」と記載）を利用して、１つの表を２つの表として取り扱うことが可能である。この別名定義を使うと、同一の表（Ｔ）に異なる表名称（Ｔａ，Ｔｂ）をつけて、あたかも異なる表Ｔａ，Ｔｂであるかのように扱うことができ、１つの表Ｔの中の異なる行（レコード）の間で比較したり、計算するのに有効である。
【００２４】
（２） 複数の表に分散しているデータを１回の検索で取得するために「表の結合（ＪＯＩＮ）」がある。この表の結合には、「内部結合（ＩＮＮＥＲ−ＪＯＩＮ）」と「外部結合（ＯＵＴＥＲ−ＪＯＩＮ）」とがある。
【００２５】
内部結合は、両方の表（Ｔ１，Ｔ２）の同じ列名の値が一致したデータだけを出力する結合技術であるのに対し、外部結合は、片方の表（Ｔａ，Ｔｂのいずれか）にしかデータが存在しない場合でも結果を出力する結合技術であり、その際、データが存在しない部分はＮＵＬＬ値が出力される。つまり、表Ｔａに表ＴｂをＯＵＴＥＲ−ＪＯＩＮ（以下、「外部結合」と記載）することで、表Ｔｂにおいて対応するレコードが存在しない表Ｔａのレコードを検索の対象とすることが可能である。
【００２６】
図１に示すＳＥＬＥＣＴ文０１００は、図２に示す表Ｔ０２００について、キー項目Ｘにおける値が同じグループ毎に通し番号が格納された通番項目Ｙの値が「最小値」である行（レコード）を特定するためのものであり、このＳＥＬＥＣＴ文０１００を、データベース検索処理部００４が実行することにより、図４に示す実行結果テーブル０４００が表示装置００５に表示される。
【００２７】
図１に示すＳＥＬＥＣＴ文０１００では、１行目の「ＳＥＬＥＣＴ  Ｔａ．＊  ＦＲＯＭ  Ｔ  Ｔａ，Ｔ  Ｔｂ」の「ＦＲＯＭ  Ｔ  Ｔａ，Ｔ  Ｔｂ」において、上記（１）の機能（「別名定義」）により、表Ｔを別名ＴａとＴｂとして別名定義する。
【００２８】
２行目のＷＨＥＲＥ句においては、３行目から５行目の各条件をＡＮＤ結合して検索条件としている。その３行目の「Ｔａ．Ｘ＝Ｔｂ．Ｘ（＋）  ＡＮＤ」では、表Ｔａの項目Ｘの値と表Ｔｂの項目Ｘの値が等しいという条件で、記号（＋）を使い、上記（２）の機能（「外部結合」）により、左辺外部結合を指示している。
【００２９】
また、４行目の「Ｔａ．Ｙ＝Ｔｂ．Ｙ＋１（＋）  ＡＮＤ」では、表Ｔａの項目Ｙの値と、表Ｔｂの項目Ｙの値に１を加算した値が等しいという条件で記号（＋）を使い左辺外部結合を指示し、さらに、５行目の「Ｔｂ．Ｙ  ＩＳ  ＮＵＬＬ」では、表Ｔｂの項目ＹがＮＵＬＬ値であることを条件として指示している。
【００３０】
本例では、このようなＳＥＬＥＣＴ文０１００をデータベース検索処理部００４により実行することで、リレーショナルデータベース００１で登録された図２に示す表Ｔ（テーブル）０２００に対して、キー項目Ｘにおける値でグループ分けされたデータ毎に、通番項目Ｙにおける値の最小値を求める操作を行う。
【００３１】
すなわち、図２に示すように操作対象の表Ｔ０２００は、少なくとも、複数のレコードで同じ値（００１Ａ，００１Ｂ，００１Ｃ，…）を保持したキー項目Ｘと、このキー項目Ｘにおける同じ値の各レコードに対して付与された通番（１，２，３，…）を保持した通番項目Ｙとからなり、データベース検索処理部００４は、まず、別名定義処理部００４ａにおいて、図１のＳＥＬＥＣＴ文０１００における１行目のプログラムコードを実行し、操作対象の表Ｔ０２００から、この表Ｔ０２００と同じ内容の表を、図３に示す表Ｔａ０３０１と表Ｔｂ０３０２としてそれぞれ別名で生成して主メモリに記憶する。
【００３２】
次にデータベース検索処理部００４は、外部結合処理部００４ｂにおいて、図１の３〜５行目のプログラムコードを実行して、主メモリから表Ｔａ０３０１と表Ｔｂ０３０２を読み出し、この表Ｔａのキー項目Ｘにおける値と表Ｔｂのキー項目Ｘにおける値とが一致すると共に、表Ｔａの通番項目Ｙにおける値が表Ｔｂの通番項目Ｙにおける値＋１と一致し、かつ、表Ｔｂの通番項目Ｙにおける値がＮＵＬＬ値であるとの条件で、表Ｔａに表Ｔｂを外部結合（左辺外部結合）して、操作対象の表Ｔにおけるキー項目Ｘの値が同じ複数のレコードから、通番項目Ｙの値が最小となるレコードを抽出する。
【００３３】
そして、データベース検索処理部００４は、表生成出力処理部００４ｃにおいて、図１の１行目における「ＳＥＬＥＣＴ  Ｔａ．＊」のプログラムコードを実行して、図４に示す内容で、キー項目Ｘにおける各グループ毎に、通番項目Ｙが最小となるレコードのみからなる表（実行結果テーブル０４００）を表示装置００５の画面上に表示出力する。
【００３４】
このように、図１に示すＳＥＬＥＣＴ文０１００を、データベース検索処理部００４により、図２に示す表０２００に対して実行した場合のデータベース管理システム００３内でのデータ検索状態を示したものが図３である。
【００３５】
図３において示すように、図２の表Ｔ０２００から、表Ｔａ０３０１と表Ｔｂ０３０２のそれぞれ別名の同じ内容の表が生成されている。そして、左辺外部結合時には、左辺（Ｔａ）から右辺（Ｔｂ）への参照０３０３が行われ、また、最小値を特定する参照０３０４が行われる。その結果、図４の実行結果テーブル０４００に示すように、キー項目Ｘにおける「００１Ａ」、「００１Ｂ」、「００１Ｃ」のそれぞれに関して、通番項目Ｙにおける「最小値」である「１」のレコードが抽出されている。
【００３６】
尚、図１に示すＳＥＬＥＣＴ文０１００における３，４行目のプログラムコードを、データベース検索処理部００４において実行した際には、図３と図４との中間としての下記内容の表（１）が生成され主メモリに記憶される。
【００３７】
「表（１）」
｜      （表Ｔａ）      ｜      （表Ｔｂ）      ｜
｜キー項目Ｘ｜通番項目Ｙ｜キー項目Ｘ｜通番項目Ｙ｜
｜００１Ａ  ｜    １    ｜００１Ａ  ｜ＮＵＬＬ  ｜
｜００１Ａ  ｜    ２    ｜００１Ａ  ｜１        ｜
｜００１Ａ  ｜    ３    ｜００１Ａ  ｜２        ｜
｜００１Ａ  ｜    ４    ｜００１Ａ  ｜３        ｜
｜００１Ｂ  ｜    １    ｜００１Ｂ  ｜ＮＵＬＬ  ｜
｜００１Ｂ  ｜    ２    ｜００１Ｂ  ｜１        ｜
【００３８】
さらに、データベース検索処理部００４において、上記中間の「表（１）」から、図１の５行目の条件（Ｔｂ．Ｙ  ＩＳ  ＮＵＬＬ）に一致する、１行目と５行目を選択し、下記の表（２）を主メモリ上に生成する。
【００３９】
「表（２）」
｜      （表Ｔａ）      ｜      （表Ｔｂ）      ｜
｜キー項目Ｘ｜通番項目Ｙ｜キー項目Ｘ｜通番項目Ｙ｜
｜００１Ａ  ｜    １    ｜００１Ａ  ｜ＮＵＬＬ  ｜
｜００１Ｂ  ｜    １    ｜００１Ｂ  ｜ＮＵＬＬ  ｜
【００４０】
そして、データベース検索処理部００４において、図１の１行目の「ＳＥＬＥＣＴ  Ｔａ．＊」に対応するプログラムコードを実行することで、上記「表（２）」から、最終的に、図４の「表（実行結果テーブル０４００）」を生成して出力する。
【００４１】
次に、図５〜図７を用いて、図２に示す表Ｔ０２００から、キー項目Ｘにおける同一グループでの、通番項目Ｙが「最大値」となるレコードを抽出する処理について説明する。
【００４２】
図５は、図１７におけるデータベース検索システムが実行するＳＥＬＥＣＴ文の第２の例を示す説明図であり、図６は、図１７におけるデータベース検索システムの第２の処理動作例を示す説明図、図７は、図６における処理動作の結果表示例を示す説明図である。
【００４３】
図５に示すＳＥＬＥＣＴ文０５００は、図２に示す表０２００について、キー項目Ｘにおける同じ値のグループ毎に通し番号が格納された通番項目Ｙの値が「最大値」である行（レコード）を特定するためのものであり、このＳＥＬＥＣＴ文０５００を、データベース検索処理部００４が実行することにより、図７に示す実行結果テーブル０７００が表示装置００５に表示される。
【００４４】
図５に示すＳＥＬＥＣＴ文０５００では、１行目の「ＳＥＬＥＣＴ  Ｔａ．＊  ＦＲＯＭ  Ｔ  Ｔａ，Ｔ  Ｔｂ」の「ＦＲＯＭ  Ｔ  Ｔａ，Ｔ  Ｔｂ」において、上記（１）の機能（「別名定義」）により、表Ｔを別名ＴａとＴｂとして別名定義する。
【００４５】
２行目のＷＨＥＲＥ句においては、３行目から５行目の各条件をＡＮＤ結合して検索条件としている。その３行目の「Ｔａ．Ｘ＝Ｔｂ．Ｘ（＋）  ＡＮＤ」では、表Ｔａの項目Ｘの値と表Ｔｂの項目Ｘの値が等しいという条件で、記号（＋）を使い、上記（２）の機能（「外部結合」）により、左辺外部結合を指示している。
【００４６】
また、４行目の「Ｔａ．Ｙ＝Ｔｂ．Ｙ−１（＋）  ＡＮＤ」では、表Ｔａの項目Ｙの値と、表Ｔｂの項目Ｙの値に１を減算した値とが等しいという条件で記号（＋）を使い左辺外部結合を指示し、さらに、５行目の「Ｔｂ．Ｙ  ＩＳ  ＮＵＬＬ」では、表Ｔｂの項目ＹがＮＵＬＬ値であることを条件として指示している。
【００４７】
本例では、このようなＳＥＬＥＣＴ文０５００をデータベース検索処理部００４により実行することで、リレーショナルデータベース００１で登録された図２に示す表Ｔ０２００（テーブル）に対して、キー項目Ｘにおける値でグループ分けされたデータ毎に、通番項目Ｙにおける値の最大値を求める操作を行う。
【００４８】
すなわち、図２に示すように操作対象の表Ｔ０２００は、少なくとも、複数のレコードで同じ値（００１Ａ，００１Ｂ，００１Ｃ，…）を保持したキー項目Ｘと、このキー項目Ｘにおける同じ値の各レコードに対して付与された通番（１，２，３，…）を保持した通番項目Ｙとからなり、データベース検索処理部００４は、まず、別名定義処理部００４ａにおいて、図５の１行目のプログラムコードを実行し、操作対象の表Ｔ０２００から、この表Ｔと同じ内容の表を、図６に示すように、表Ｔａ０６０１と表Ｔｂ０６０２としてそれぞれ別名で生成して主メモリに記憶する。
【００４９】
次にデータベース検索処理部００４は、外部結合処理部００４ｂにおいて、図５の３〜５行目のプログラムコードを実行して、主メモリから表Ｔａ０６０１と表Ｔｂ０６０２を読み出し、この表Ｔａのキー項目Ｘにおける値と表Ｔｂのキー項目Ｘにおける値とが一致すると共に、表Ｔａの通番項目Ｙにおける値が表Ｔｂの通番項目Ｙにおける値−１と一致し、かつ、表Ｔｂの通番項目Ｙにおける値がＮＵＬＬ値であるとの条件で、表Ｔａに表Ｔｂを外部結合（左辺外部結合）して、操作対象の表Ｔにおけるキー項目Ｘの値が同じ複数のレコードから、通番項目Ｙの値が最小となるレコードを抽出する。
【００５０】
そして、データベース検索処理部００４は、表生成出力処理部００４ｃにおいて、図５の１行目における「ＳＥＬＥＣＴ  Ｔａ．＊」のプログラムコードを実行して、図７に示す内容で、キー項目Ｘにおける各グループ毎に、通番項目Ｙが最大となるレコードのみからなる表（実行結果テーブル０７００）を表示装置００５の画面上に表示出力する。
【００５１】
このように、図５に示すＳＥＬＥＣＴ文０５００を、データベース検索処理部００４により、図２に示す表Ｔ０２００に対して実行した場合のデータベース管理システム００３内でのデータ検索状態を示したものが図６である。
【００５２】
図６において示すように、図２の表Ｔ０２００から、表Ｔａ０６０１と表Ｔｂ０６０２のそれぞれ別名の同じ内容の表が生成されている。そして、左辺外部結合時には、左辺（Ｔａ）から左辺（Ｔｂ）への参照０６０３が行われ、また、最大値を特定する参照０６０４が行われる。その結果、図７の実行結果レコード０７００に示すように、キー項目Ｘにおける「００１Ａ」、「００１Ｂ」、…のそれぞれに関して、通番項目Ｙにおける「最大値」である「４，２，…」のレコードが抽出される。
【００５３】
尚、図５に示すＳＥＬＥＣＴ文０５００における３，４行目のプログラムコードを、データベース検索処理部００４において実行した際には、図１〜図４で説明した例と同様に、図６と図７との中間としての下記内容の表（３）が生成され主メモリに記憶される。
【００５４】
「表（３）」
｜      （表Ｔａ）      ｜      （表Ｔｂ）      ｜
｜キー項目Ｘ｜通番項目Ｙ｜キー項目Ｘ｜通番項目Ｙ｜
｜００１Ａ  ｜    １    ｜００１Ａ  ｜２        ｜
｜００１Ａ  ｜    ２    ｜００１Ａ  ｜３        ｜
｜００１Ａ  ｜    ３    ｜００１Ａ  ｜４        ｜
｜００１Ａ  ｜    ４    ｜００１Ａ  ｜ＮＵＬＬ  ｜
｜００１Ｂ  ｜    １    ｜００１Ｂ  ｜２        ｜
｜００１Ｂ  ｜    ２    ｜００１Ｂ  ｜ＮＵＬＬ  ｜
【００５５】
さらに、データベース検索処理部００４において、上記中間の「表（３）」から、図５の５行目の条件（Ｔｂ．Ｙ  ＩＳ  ＮＵＬＬ）に一致する、４行目と６行目を選択し、下記の表（４）を主メモリ上に生成する。
【００５６】
「表（４）」
｜      （表Ｔａ）      ｜      （表Ｔｂ）      ｜
｜キー項目Ｘ｜通番項目Ｙ｜キー項目Ｘ｜通番項目Ｙ｜
｜００１Ａ  ｜    ４    ｜００１Ａ  ｜ＮＵＬＬ  ｜
｜００１Ｂ  ｜    ２    ｜００１Ｂ  ｜ＮＵＬＬ  ｜
【００５７】
そして、データベース検索処理部００４において、図５の１行目の「ＳＥＬＥＣＴ  Ｔａ．＊」に対応するプログラムコードを実行することで、上記「表（４）」から、最終的に、図７の「表（実行結果レコード０７００）」を生成して出力する。
【００５８】
上記図１〜図７で示した例では、図２における表Ｔ０２００を、「Ｔａ」と「Ｔｂ」の別名定義した２つの表を、図１，５に示すＳＥＬＥＣＴ文０１００，０５００のＷＨＥＲＥ句の中で外部結合して検索を行い、外部結合にはキー項目Ｘと通し番号の項目Ｙを利用している。そして、外部結合の対象となる表（Ｔｂ）の項目Ｙの値を「＋１（１を加算）」、もしくは「−１（１を減算）」することで、外部結合の対象表（Ｔｂ）に含まれる項目がＮＵＬＬ値となるとき、もう一方の表（Ｔａ）において項目Ｙの値が最小、もしくは最大である行（レコード）を求めている。
【００５９】
次の図８〜図１４においては、図１，５で示したＳＥＬＥＣＴ文０１００，０５００とは異なる内容のＳＥＬＥＣＴ文で、かつ、図２で示した表Ｔ０２００とは異なる内容の表において、ある項目の値が最小もしくは最大となる行（レコード）抽出する処理について説明する。
【００６０】
まず、図８〜図１１を用いて、ある項目の値が最小となる行（レコード）抽出する処理について説明する。
【００６１】
図８は、図１７におけるデータベース検索システムが実行するＳＥＬＥＣＴ文の第３の例を示す説明図であり、図９は、図１７におけるデータベース検索システムが保持するリレーショナルデータベースの第２のデータ構成例を示す説明図、図１０は、図１７におけるデータベース検索システムの第３の処理動作例を示す説明図、図１１は、図１０における処理動作の結果表示例を示す説明図である。
【００６２】
図８に示すＳＥＬＥＣＴ文０８００は、図９に示す表Ｔ０９００について、キー項目Ａにおける同じ値のグループ（レコード）毎に、項目Ｃの値が「最小値」である行（レコード）を特定するためのものであり、このＳＥＬＥＣＴ文０８００を、図１７のデータベース検索処理部００４が実行することにより、図１１に示す実行結果レコード１１００が表示装置００５に表示される。
【００６３】
図８に示すＳＥＬＥＣＴ文０８００では、１行目の「ＳＥＬＥＣＴ  Ｔａ．＊  ＦＲＯＭ  Ｔ  Ｔａ，Ｔ  Ｔｂ」の「ＦＲＯＭ  Ｔ  Ｔａ，Ｔ  Ｔｂ」において、「別名定義」機能により、表Ｔを別名ＴａとＴｂとして別名定義する。
【００６４】
２行目のＷＨＥＲＥ句においては、３行目から５行目の各条件をＡＮＤ結合して検索条件としている。その３行目の「Ｔａ．Ａ＝Ｔｂ．Ａ（＋）  ＡＮＤ」では、表Ｔａのキー項目Ａの値と表Ｔｂのキー項目Ａの値が等しいという条件で、記号（＋）を使い、「外部結合」機能により、左辺外部結合を指示している。
【００６５】
また、４行目の「Ｔａ．Ｃ  ＞  Ｔｂ．Ｃ（＋）  ＡＮＤ」では、「表Ｔａの項目Ｃの値が、表Ｔｂの項目Ｃの値よりも大きい」という条件で記号（＋）を使い左辺外部結合を指示し、さらに、５行目の「Ｔｂ．Ｃ  ＩＳ  ＮＵＬＬ」では、表Ｔｂの項目ＣがＮＵＬＬ値であることを条件として指示している。
【００６６】
本例では、このようなＳＥＬＥＣＴ文０８００をデータベース検索処理部００４により実行することで、リレーショナルデータベース００１で登録された図９に示す表Ｔ（テーブル）０９００に対して、キー項目Ａにおける値でグループ分けされたデータ毎に、項目Ｃにおける値の最小値を求める操作を行う。
【００６７】
すなわち、図９に示すように操作対象の表Ｔ０９００は、少なくとも、複数のレコードで同じ値（００１ａ，００１ｂ，００１ｃ，…）を保持したキー項目Ａと、このキー項目Ａにおける各データに対応付けられた値（２５００，２０００，１５００，３０００，…）を保持した項目Ｃとからなり、データベース検索処理部００４は、まず、別名定義処理部００４ａにおいて、図８におけるＳＥＬＥＣＴ文０８００の１行目のプログラムコードを実行し、操作対象の表Ｔ０９００から、この表Ｔと同じ内容の表を、図１０に示す表Ｔａ１００１と表Ｔｂ１００２としてそれぞれ別名で生成して主メモリに記憶する。
【００６８】
次にデータベース検索処理部００４は、外部結合処理部００４ｂにおいて、図８のＳＥＬＥＣＴ文０８００における３〜５行目のプログラムコードを実行して、主メモリから表Ｔａ（１００１）と表Ｔｂ（１００２）を読み出し、この表Ｔａのキー項目Ａにおける値と表Ｔｂのキー項目Ａにおける値とが一致すると共に、表Ｔａの項目Ｃにおける値が表Ｔｂの項目Ｃにおける値より大きく、かつ、表Ｔｂの項目Ｃにおける値がＮＵＬＬ値であるとの条件で、表Ｔａに表Ｔｂを外部結合（左辺外部結合）して、操作対象の表Ｔ０９００におけるキー項目Ａの値が同じ複数のレコードから、項目Ｃの値が最小となるレコードを抽出する。
【００６９】
そして、データベース検索処理部００４は、表生成出力処理部００４ｃにおいて、図８のＳＥＬＥＣＴ文０８００の１行目における「ＳＥＬＥＣＴ  Ｔａ．＊」のプログラムコードを実行して、図１１に示す内容で、キー項目Ａにおける各グループ毎に、項目Ｃが最小となるレコードのみからなる表（実行結果テーブル１１００）を表示装置００５の画面上に表示出力する。
【００７０】
このように、図８に示すＳＥＬＥＣＴ文０８００を、データベース検索処理部００４により、図９に示す表Ｔ０９００に対して実行した場合のデータベース管理システム００３内でのデータ検索状態を示したものが図１０である。
【００７１】
図１０において示すように、図９の表Ｔ０９００から、表Ｔａ１００１と表Ｔｂ１００２のそれぞれ別名の同じ内容の表が生成されている。そして、左辺外部結合時には、左辺（Ｔａ）から左辺（Ｔｂ）への参照１００３が行われ、また、最小値を特定する参照１００４が行われる。その結果、図１１に示すように、キー項目Ａにおける「００１ａ」、「００１ｂ」、…のそれぞれに関して、項目Ｃにおける「最小値」である「１５００，２０００，…」の実行結果レコード１１００が抽出されている。
【００７２】
尚、図８に示すＳＥＬＥＣＴ文０８００における３，４行目のプログラムコードを、データベース検索処理部００４において実行した際には、図１〜図７で説明した例と同様、図１０と図１１との中間としての下記内容の表（５）が生成され主メモリに記憶される。
【００７３】
「表（５）」
｜      （表Ｔａ）      ｜      （表Ｔｂ）                          ｜
｜キー項目Ａ｜  項目Ｃ  ｜キー項目Ａ｜  項目Ｃ                      ｜
｜００１ａ  ｜２５００  ｜００１ａ  ｜２０００，１５００            ｜
｜００１ａ  ｜２０００  ｜００１ａ  ｜１５００                      ｜
｜００１ａ  ｜１５００  ｜００１ａ  ｜ＮＵＬＬ                      ｜
｜００１ａ  ｜３０００  ｜００１ａ  ｜２５００，２０００，１５００  ｜
｜００１ｂ  ｜２０００  ｜００１ｂ  ｜ＮＵＬＬ                      ｜
｜００１ｂ  ｜２５００  ｜００１ｂ  ｜２０００                      ｜
【００７４】
さらに、データベース検索処理部００４において、上記中間の「表（５）」から、図８の５行目の条件（Ｔｂ．Ｃ  ＩＳ  ＮＵＬＬ）に一致する、３行目と５行目を選択し、下記の表（６）を主メモリ上に生成する。
【００７５】
「表（６）」
｜      （表Ｔａ）      ｜      （表Ｔｂ）      ｜
｜キー項目Ａ｜  項目Ｃ  ｜キー項目Ａ｜  項目Ｃ  ｜
｜００１ａ  ｜１５００  ｜００１ａ  ｜ＮＵＬＬ  ｜
｜００１ｂ  ｜２０００  ｜００１ｂ  ｜ＮＵＬＬ  ｜
【００７６】
そして、データベース検索処理部００４において、図８のＳＥＬＥＣＴ文０８００における１行目の「ＳＥＬＥＣＴ  Ｔａ．＊」に対応するプログラムコードを実行することで、上記「表（６）」から、最終的に、図１１の「表（実行結果レコード１１００）」を生成して出力する。
【００７７】
次に、図１２〜図１４を用いて、図９に示す表Ｔ０９００から、キー項目Ａにおける同一項目の、項目Ｃが「最大値」となるレコードを抽出する処理について説明する。
【００７８】
図１２は、図１７におけるデータベース検索システムが実行するＳＥＬＥＣＴ文の第４の例を示す説明図であり、図１３は、図１７におけるデータベース検索システムの第４の処理動作例を示す説明図、図１４は、図１３における処理動作の結果表示例を示す説明図である。
【００７９】
図１２に示すＳＥＬＥＣＴ文１２００は、図９に示す表Ｔ０９００について、キー項目Ａにおける同じ値のグループ（レコード）毎に、項目Ｃの値が「最大値」である行（レコード）を特定するためのものであり、このＳＥＬＥＣＴ文を、図１７のデータベース検索処理部００４が実行することにより、図１４に示す実行結果レコード１４００が表示装置００５に表示される。
【００８０】
図１２に示すＳＥＬＥＣＴ文１２００では、１行目の「ＳＥＬＥＣＴ  Ｔａ．＊  ＦＲＯＭ  Ｔ  Ｔａ，Ｔ  Ｔｂ」の「ＦＲＯＭ  Ｔ  Ｔａ，Ｔ  Ｔｂ」において、「別名定義」機能により、表Ｔ０９００を別名ＴａとＴｂとして別名定義する。
【００８１】
２行目のＷＨＥＲＥ句においては、３行目から５行目の各条件をＡＮＤ結合して検索条件としている。その３行目の「Ｔａ．Ａ＝Ｔｂ．Ａ（＋）  ＡＮＤ」では、表Ｔａのキー項目Ａの値と表Ｔｂのキー項目Ａの値が等しいという条件で、記号（＋）を使い、「外部結合」機能により、左辺外部結合を指示している。
【００８２】
また、４行目の「Ｔａ．Ｃ  ＜  Ｔｂ．Ｃ（＋）  ＡＮＤ」では、「表Ｔａの項目Ｃの値が、表Ｔｂの項目Ｃの値よりも小さい」という条件で記号（＋）を使い左辺外部結合を指示し、さらに、５行目の「Ｔｂ．Ｃ  ＩＳ  ＮＵＬＬ」では、表Ｔｂの項目ＣがＮＵＬＬ値であることを条件として指示している。
【００８３】
本例では、このようなＳＥＬＥＣＴ文１２００をデータベース検索処理部００４により実行することで、リレーショナルデータベース００１で登録された図９に示す表（テーブル）０９００に対して、キー項目Ａにおける値でグループ分けされたデータ毎に、項目Ｃにおける値の最大値を求める操作を行う。
【００８４】
すなわち、データベース検索処理部００４は、まず、別名定義処理部００４ａにおいて、図１２のＳＥＬＥＣＴ文１２００における１行目のプログラムコードを実行し、操作対象の表Ｔ０９００から、この表Ｔ０９００と同じ内容の表を、図１３に示す表Ｔａ１３０１と表Ｔｂ１３０２としてそれぞれ別名で生成して主メモリに記憶する。
【００８５】
次にデータベース検索処理部００４は、外部結合処理部００４ｂにおいて、図１２のＳＥＬＥＣＴ文１２００における３〜５行目のプログラムコードを実行して、主メモリから表Ｔａ（１３０１）と表Ｔｂ（１３０２）を読み出し、この表Ｔａのキー項目Ａにおける値と表Ｔｂのキー項目Ａにおける値とが一致すると共に、表Ｔａの項目Ｃにおける値が表Ｔｂの項目Ｃにおける値よりも小さく、かつ、表Ｔｂの項目Ｃにおける値がＮＵＬＬ値であるとの条件で、表Ｔａに表Ｔｂを外部結合（左辺外部結合）して、操作対象の表Ｔにおけるキー項目Ａの値が同じ複数のレコードから、項目Ｃの値が最大となるレコードを抽出する。
【００８６】
そして、データベース検索処理部００４は、表生成出力処理部００４ｃにおいて、図１２のＳＥＬＥＣＴ文１２００の１行目における「ＳＥＬＥＣＴ  Ｔａ．＊」のプログラムコードを実行して、図１４に示す内容で、キー項目Ａにおける各グループ毎に、項目Ｃが最大となるレコードのみからなる表（実行結果テーブル１４００）を表示装置００５の画面上に表示出力する。
【００８７】
このように、図１２に示すＳＥＬＥＣＴ文１２００を、データベース検索処理部００４により、図９に示す表Ｔ０９００に対して実行した場合のデータベース管理システム００３内でのデータ検索状態を示したものが図１３である。
【００８８】
図１３において示すように、図９の表Ｔ０９００から、表Ｔａ１３０１と表Ｔｂ１３０２のそれぞれ別名の同じ内容の表が生成されている。そして、左辺外部結合時には、左辺（Ｔａ）から左辺（Ｔｂ）への参照１３０３が行われ、また、最小値を特定する参照１３０４が行われる。その結果、図１４に示すように、キー項目Ａにおける「００１ａ」、「００１ｂ」、…のそれぞれに関して、項目Ｃにおける「最大値」である「３０００，２５００，…」のレコードが抽出されている。
【００８９】
尚、図１２に示すＳＥＬＥＣＴ文０１２００における３，４行目のプログラムコードを、データベース検索処理部００４において実行した際には、図１〜図１１で説明した例と同様に、図１３と図１４との中間としての下記内容の表（７）が生成され主メモリに記憶される。
【００９０】
「表（７）」
｜      （表Ｔａ）      ｜      （表Ｔｂ）                          ｜
｜キー項目Ａ｜  項目Ｃ  ｜キー項目Ａ｜  項目Ｃ                      ｜
｜００１ａ  ｜２５００  ｜００１ａ  ｜３０００                      ｜
｜００１ａ  ｜２０００  ｜００１ａ  ｜２５００，３０００            ｜
｜００１ａ  ｜１５００  ｜００１ａ  ｜２５００，２０００，３０００  ｜
｜００１ａ  ｜３０００  ｜００１ａ  ｜ＮＵＬＬ                      ｜
｜００１ｂ  ｜２０００  ｜００１ｂ  ｜２５００                      ｜
｜００１ｂ  ｜２５００  ｜００１ｂ  ｜ＮＵＬＬ                      ｜
【００９１】
さらに、データベース検索処理部００４において、上記中間の「表（７）」から、図１２のＳＥＬＥＣＴ文１２００における５行目の条件（Ｔｂ．Ｃ  ＩＳ  ＮＵＬＬ）に一致する、４行目と６行目を選択し、下記の表（８）を主メモリ上に生成する。
【００９２】
「表（８）」
｜      （表Ｔａ）      ｜      （表Ｔｂ）      ｜
｜キー項目Ａ｜  項目Ｃ  ｜キー項目Ａ｜  項目Ｃ  ｜
｜００１ａ  ｜３０００  ｜００１ａ  ｜ＮＵＬＬ  ｜
｜００１ｂ  ｜２５００  ｜００１ｂ  ｜ＮＵＬＬ  ｜
【００９３】
そして、データベース検索処理部００４において、図１２のＳＥＬＥＣＴ文１２００における１行目の「ＳＥＬＥＣＴ  Ｔａ．＊」に対応するプログラムコードを実行することで、上記「表（８）」から、最終的に、図１４の「表（実行結果レコード１４００）」を生成して出力する。
【００９４】
上記図８〜図１４で示した例では、図９における表Ｔ０９００を、「Ｔａ」と「Ｔｂ」の別名定義した２つの表（１３０１．１３０２）を、図８，１２に示すＳＥＬＥＣＴ文０８００，１２００のＷＨＥＲＥ句の中で外部結合して検索を行い、外部結合にはキー項目Ａと項目Ｃを利用している。そして、外部結合の対象となる表（Ｔｂ）の項目Ｃの値を、表（Ｔａ）の項目Ｃの値よりも「小さく」もしくは「大きく」することで、外部結合の対象表（Ｔｂ）に含まれる項目がＮＵＬＬ値となるとき、もう一方の表（Ｔａ）において項目Ｃの値が最小、もしくは最大である行（レコード）を求めることができる。
【００９５】
以上、図１〜図１４および図１７を用いて説明したように、本例では、ＲＤＢ（リレーショナルデータベース）の操作言語ＳＱＬで提供される、「別名定義（ＡＬＩＡＳ）」と「外部結合（ＯＵＴＥＲ−ＪＯＩＮ）」とを用いて、ある特定のデータ項目（キー項目）の値でグループ分け（グルーピング）されるデータ毎に、そのグルーピング・キー・データ項目（キー項目）以外のデータ項目（例えば通番項目）に関して、そのデータ項目（例えば通番項目）の値の最大値、または最小値を求める。
【００９６】
詳細には、まず、検索対象のＲＤＢの表Ｔについて、表Ｔａと表Ｔｂに、それぞれ別名定義し、次に、例えば、表Ｔａのキー項目（Ｘ，Ａ）の値と表Ｔｂのキー項目（Ｘ，Ａ）の値が一致すると共に、最小値・最大値を求める表Ｔａの通し番号データ項目（Ｙ，Ｃ）の値が、表Ｔｂの同じ通し番号データ項目（Ｙ，Ｃ）の値＋１・−１と一致し、かつ、表Ｔｂのデータ項目（通し番号）値がＮＵＬＬ値であるとの条件で、表Ｔａに表Ｔｂを外部結合する。
【００９７】
尚、第２の条件として、最小値・最大値を求める表Ｔａの任意のデータ項目の値が、同じく最小値・最大値を求める表Ｔｂの当該データ項目の値より大きい・小さいこととすることにより、最小値・最大値を求める表Ｔａの項目を、通し番号項目ではなく、任意の値を保持するデータ項目（Ｃ）とすることができる。
【００９８】
本例によれば、ＲＤＢに対して、ある特定のデータ項目の値でグルーピングされるデータ毎に、そのグルーピング・キー・データ項目以外のデータ項目値の最大値、または最小値を効率よく検索することができる。
【００９９】
また、本例では、副問合せを使わないので、ＳＥＬＥＣＴ文の発行回数が必要最小限となり、検索処理時間が、副問合せを使用する検索よりも短く、高速検索が可能である。特に、大規模、大容量のデータベースを検索対象とした場合に、その効果が顕著となる。
【０１００】
また、本例の技術を利用して最大値または最小値を含むレコードを特定する場合、キー項目以外の項目についても同時出力が可能となり、１回の検索で取得可能である。例えば、特許文献１の技術では、最大値（最小値）特定の検索（副問合せ）の結果を取得し、その結果を条件に指定した検索を行わなければならないため２回以上の検索が必要であった。具体例として、検索対象１００レコードについて１レコード当たり１０回の副問合わせを行う場合、１００１回の検索処理（本処理１回＋副問合わせ１０００回）が発生するが、本例の技術では１回の検索処理で検索を完了することができる。
【０１０１】
また、本例の技術では、検索処理中に検索結果データの一時記憶領域を設ける必要もなく、大きな記憶領域を必要としない検索ができる。また、本例の技術では、既存のデータベースシステムから必要なデータを抜き出したデータ集合としての所謂データマートの作成を必要としないため、データベースの環境変更を行う必要がなく、資源の節約になる。
【０１０２】
特に、顧客情報を蓄積するテーブルＴにおいて、顧客番号（キー項目ａ）毎にシーケンシャルな通番である作成履歴番号（通番項目ｂ）が存在する場合、ある顧客Ｘについての最新の作成履歴番号を高速に取得したい場合に利用することが有効である。
【０１０３】
また、既に運用されているデータベースシステムにおいて、データベース内のテーブルＴから、あるキー項目ａの値毎に、シーケンシャルな通番項目ｂの最小もしくは最大の値を高速に取得したい場合に利用することが有効である。
【０１０４】
尚、本発明は、図１〜図１４および図１７を用いて説明した例に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能である。例えば、データベース操作処理部００４のプログラムを実行して実現される機能として、操作対象の表Ｔから表Ｔａと表Ｔｂを別名定義した後、表Ｔｂの通番項目Ｙにおける各値を１加算（＋１）した表Ｔｂ’を生成し、表Ｔａと表Ｔｂ’とを比較して、表Ｔｂ’に存在しない通番項目Ｙの値を保持する表Ｔａにおけるレコードを抽出する機能を設けることにより、操作対象の表Ｔにおけるキー項目Ｘの値が同じ複数のレコードから、通番項目Ｙの値が最小となるレコードを選択することができる。
【０１０５】
あるいは、データベース操作処理部００４のプログラムを実行して実現される機能として、操作対象の表Ｔから表Ｔａと表Ｔｂを別名定義した後、表Ｔｂの通番項目Ｙにおける各値を１減算（−１）した表Ｔｂ’を生成し、表Ｔａと表Ｔｂ’とを比較して、表Ｔｂ’に存在しない通番項目Ｙの値を保持する表Ｔａにおけるレコードを抽出する機能を設けることにより、操作対象の表Ｔにおけるキー項目Ｘの値が同じ複数のレコードから、通番項目Ｙの値が最大となるレコードを選択することができる。
【０１０６】
また、ＳＱＬの実行環境に応じて、本例で示したＳＥＬＥＣＴ文（０１００，０５００，０８００，１２００）とは異なる表現のＳＥＬＥＣＴ文を用いることでも良い。例えば、図１のＳＥＬＥＣＴ文０１００の代わりに、下記の記述内容のＳＥＬＥＣＴ文であっても、そのソースプログラムから生成されるオブジェクトコードにより実質的には同じ機能を実現することができる。
【０１０７】
ＳＥＬＥＣＴ  Ｔａ．＊  ＦＲＯＭ  Ｔ  ＡＳ  Ｔａ，Ｔ  ＡＳ  Ｔｂ
ＷＨＥＲＥ
Ｔａ．Ｘ＝Ｔｂ．Ｘ（＋）  ＡＮＤ
Ｔａ．Ｙ＝Ｔｂ．Ｙ＋１（＋）  ＡＮＤ
Ｔｂ．Ｙ  ＩＳ  ＮＵＬＬ；
【０１０８】
ＳＥＬＥＣＴ  Ｔａ．＊  ＦＲＯＭ  Ｔ  Ｔａ，Ｔ  Ｔｂ
ＷＨＥＲＥ
Ｔａ．Ｘ＊＝Ｔｂ．Ｘ  ＡＮＤ
Ｔａ．Ｙ＊＝Ｔｂ．Ｙ＋１  ＡＮＤ
Ｔｂ．Ｙ  ＩＳ  ＮＵＬＬ；
【０１０９】
ＳＥＬＥＣＴ  Ｔａ．＊  ＦＲＯＭ  Ｔ  Ｔａ，Ｔ  Ｔｂ
ＷＨＥＲＥ
Ｔａ．Ｘ  ＬＥＦＴ  ＪＯＩＮ  Ｔｂ．Ｘ  ＡＮＤ
Ｔａ．Ｙ  ＬＥＦＴ  ＪＯＩＮ  Ｔｂ．Ｙ＋１  ＡＮＤ
Ｔｂ．Ｙ  ＩＳ  ＮＵＬＬ；
【０１１０】
また、本例のコンピュータ構成としても、キーボードや光ディスクの駆動装置の無いコンピュータ構成としても良い。また、本例では、光ディスクを記録媒体として用いているが、ＦＤ（Flexible Disk）等を記録媒体として用いることでも良い。また、プログラムのインストールに関しても、通信装置を介してネットワーク経由でプログラムをダウンロードしてインストールすることでも良い。
【図面の簡単な説明】
【０１１１】
【図１】図１７におけるデータベース検索システムが実行するＳＥＬＥＣＴ文の第１の例を示す説明図である。
【図２】図１７におけるデータベース検索システムが保持するリレーショナルデータベースの第１のデータ構成例を示す説明図である。
【図３】図１７におけるデータベース検索システムの第１の処理動作例を示す説明図である。
【図４】図３における処理動作の結果表示例を示す説明図である。
【図５】図１７におけるデータベース検索システムが実行するＳＥＬＥＣＴ文の第２の例を示す説明図である。
【図６】図１７におけるデータベース検索システムの第２の処理動作例を示す説明図である。
【図７】図６における処理動作の結果表示例を示す説明図である。
【図８】図１７におけるデータベース検索システムが実行するＳＥＬＥＣＴ文の第３の例を示す説明図である。
【図９】図１７におけるデータベース検索システムが保持するリレーショナルデータベースの第２のデータ構成例を示す説明図である。
【図１０】図１７におけるデータベース検索システムの第３の処理動作例を示す説明図である。
【図１１】図１０における処理動作の結果表示例を示す説明図である。
【図１２】図１７におけるデータベース検索システムが実行するＳＥＬＥＣＴ文の第４の例を示す説明図である。
【図１３】図１３は、図１７におけるデータベース検索システムの第４の処理動作例を示す説明図である。
【図１４】図１３における処理動作の結果表示例を示す説明図である。
【図１５】従来のデータベース操作の対象となる表の内容例を示す説明図である。
【図１６】図１５における表に対するデータベース操作で生成された実行結果テーブルの内容例を示す説明図である。
【図１７】本発明に係わるデータベース検索システムの構成例を示すブロック図である。
【符号の説明】
【０１１２】
００１：リレーショナルデータベース（ＲＤＢ）、００２：コンピュータ処理装置、００３：データベース管理システム（ＤＢＭＳ）、００４：データベース操作処理部、００４ａ：別名定義処理部、００４ｂ：外部結合処理部、００４ｃ：表生成出力処理部、００５：表示装置、０１００，０５００，０８００，１２００：ＳＥＬＥＣＴ文、０２００，０９００：表Ｔ、０３０１，０６０１，１００１，１３０１：表Ｔａ、０３０２，０６０２，１００２，１３０２：表Ｔｂ、０３０３，０３０４，０６０３，０６０４，１００３，１００４，１３０３，１３０４：参照、０４００，０７００，１１００，１４００：実行結果テーブル、１５００：表Ｔｃ、１６００：実行結果レコード。
【図１】
2006227687.tif 000003
【図２】
2006227687.tif 000004
【図３】
2006227687.tif 000005
【図４】
2006227687.tif 000006
【図５】
2006227687.tif 000007
【図６】
2006227687.tif 000008
【図７】
2006227687.tif 000009
【図８】
2006227687.tif 000010
【図９】
2006227687.tif 000011
【図１０】
2006227687.tif 000012
【図１１】
2006227687.tif 000013
【図１２】
2006227687.tif 000014
【図１３】
2006227687.tif 000015
【図１４】
2006227687.tif 000016
【図１５】
2006227687.tif 000017
【図１６】
2006227687.tif 000018
【図１７】
2006227687.tif 000019