JP2001005828A - 関係データベースシステムにおける問合せ方法および問合せ処理方法 - Google Patents

関係データベースシステムにおける問合せ方法および問合せ処理方法

Info

Publication number
JP2001005828A
JP2001005828A JP11176287A JP17628799A JP2001005828A JP 2001005828 A JP2001005828 A JP 2001005828A JP 11176287 A JP11176287 A JP 11176287A JP 17628799 A JP17628799 A JP 17628799A JP 2001005828 A JP2001005828 A JP 2001005828A
Authority
JP
Japan
Prior art keywords
content
column
row
query
set function
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP11176287A
Other languages
English (en)
Inventor
Tomoyuki Morinaga
智之 森永
Shinji Fujiwara
真二 藤原
Kazutomo Ushijima
一智 牛嶋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP11176287A priority Critical patent/JP2001005828A/ja
Publication of JP2001005828A publication Critical patent/JP2001005828A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

(57)【要約】 【課題】 関係データベースシステムにおける集計処理
の簡潔な記述を可能とし、その実行を高速化する。 【解決手段】 表のある列に対して集合関数を適用した
ときに、その結果と等しい値を持つ行を求めることがで
きるような指定方法を、問合せ言語に対して拡張する。
さらに、表をスキャンしながら、フェッチした行が格納
される一時バッファ113と、結果格納用バッファ11
1の内容に対して集合関数に応じた比較を行い、その結
果に応じて結果格納用バッファ111の内容を一時バッ
ファ113で置き換える処理を実装することによって、
処理を1回のスキャンで完了できる。 【効果】 関係データベースにおける集計処理の簡潔な
記述、実行の高速化が可能となる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は関係データベースに
おける問合せと、集計処理などの問合せ処理の高速化方
法に関する。
【0002】
【従来の技術】データを行と列から構成される表として
表現し、表の演算によって検索や集計といったデータ処
理を行う関係データベース(以下、単に、データベース
と表記する)は、銀行のオンラインシステムや企業の意
思決定システムなど幅広い分野で利用されている。
【0003】データベースでは、データは問合せ言語を
用いて操作される。代表的な問合せ言語であるSQLに
は、データの検索を行うためのSELECT文がある。
【0004】SELECT文は、予約語「SELEC
T」、検索対象となる表を指定する「FROM」句を含
んでおり、必要に応じて、検索条件を指定する「WHE
RE」句、表をある列の値でグループ化する「GROU
P BY」句などを含むことができる。
【0005】SELECT文には、入れ子状にSELE
CT文を記述することができる。以下では、予約語SE
LECTを1つだけ含むSELECT文を「単純SEL
ECT文」と表記する。
【0006】また、SELECT文の中に記述されたS
ELECT文を「副問合せ」と表記する。
【0007】データベースにおける重要な処理の1つと
して、表のある列に対する集合演算(たとえばある列の
最大値や最小値を求めるなど)がある。この処理は、た
とえば最高売上額を求めるなど、実用上不可欠な処理で
ある。また、最高売上額だけを求めるのではなく、最高
売上額を記録した商品や、その色を求めるといった処理
のように、集合演算の結果だけでなく、集合関数の適用
結果と等しい値を持つ行を求める処理はさらに重要であ
る。
【0008】SQLでは、表のある列に対して集合演算
を行う集合関数を提供している。この集合関数の代表的
なものとしては、「MAX」と「MIN」がある。MA
Xは、引数で指定された列の最大値を求める関数、MI
Nは引数で指定された列の最小値を求める関数である。
【0009】図2を用いて、集合関数を用いた問合せ処
理をSQLで行う場合を説明する。なお、図2の点線は
データの流れを示す。
【0010】図2において、第1のコンピュータ201
と第2のコンピュータ203がネットワーク204で接
続されており、第1のコンピュータ201には、電源断
後もデータを保持することが可能な装置である二次記憶
装置205が接続されている。二次記憶装置205に
は、表(T)206が格納されている。
【0011】第2のコンピュータ203からは、問合せ
207がネットワーク204を経由して第1のコンピュ
ータ201に送られる。第1のコンピュータ201上に
はデータベースシステム202があり、データベースシ
ステム202は、第2のコンピュータ203から送られ
てきた問合せ207を受け取って実行し、その結果であ
る結果209を第1のコンピュータ203へと返す。
【0012】表(T)206は、ある商品(id)とそ
の色(color)、売上げ(sales)のデータを
格納しているものとする。
【0013】問合せ207は、売上げの最高を記録した
商品とその色、および売上額を検索する。
【0014】問合せ207のWHERE句には、副問合
せ208が指定されている。このWHERE句は、「表
(T)の売上げの最大値と等しい値を持つ、表(T)の
行を出力する」という検索条件を指定している。表
(T)206の売上げの最大値は副問合せ208によっ
て求められる。問合せ207は、この値と売上げが等し
い行を表(T)206から検索し、結果209を得る。
【0015】次に、図3を用いて、それぞれの商品ごと
に、もっとも売上げが多かった商品の色、およびその売
上額を検索する場合を説明する。なお、図3の点線はデ
ータの流れを示す。
【0016】図3において、第1のコンピュータ301
と第2のコンピュータ303がネットワーク304で接
続されており、第1のコンピュータ301には電源断後
もデータを保持することが可能な装置である二次記憶装
置305が接続されている。また、二次記憶装置305
には、表(T)306が格納されている。
【0017】第2のコンピュータ303からは、問合せ
307がネットワーク304を経由して第1のコンピュ
ータ301に送られる。第1のコンピュータ301上に
はデータベースシステム302があり、データベースシ
ステム302は、第2のコンピュータ303から送られ
てきた問合せ307を受け取って実行し、その結果であ
る結果309を第1のコンピュータ303へと返す。
【0018】表(T)306は図1における表(T)2
06と同様に、ある商品(id)とその色(colo
r)、売上げ(sales)のデータを格納しているも
のとする。
【0019】問合せ307は、それぞれの商品ごとに、
最高の売上げを記録した商品とその色、および売上額を
検索する。
【0020】問合せ307のFROM句には、副問合せ
308が指定されている。副問合せ308は、表(T)
306の行を商品(id)でグループ化した上で、各グ
ループに対して集合関数MAXを適用して売上げの最大
値を求める。問合せ307は、副問合せ308の結果と
表(T)306を比較し、商品と売上げが等しい行を求
め、結果309を得る。
【0021】データベースシステム302は、この結果
309を第2のコンピュータ303に返す。
【0022】次に、今まで行われてきたSQLの拡張に
ついて説明する。
【0023】ORACLE(ORACLEは、米国Or
acle Corporationの登録商標である)
では、表を検索した結果に対して1から行番号を付加す
る、「ROWNUM」という機能を提供している。この
機能を用いることによって、表のある列の値に対して集
合関数を適用し、その結果と等しい値を持つ行を求める
ことができる場合がある。
【0024】図4を用いて、ORACLEのROWNU
Mを用いた場合の問合せ処理について説明する。なお、
図4の点線はデータの流れを示す。
【0025】図4において、第1のコンピュータ401
と第2のコンピュータ403はネットワーク404で接
続されており、第1のコンピュータ401には電源断後
もデータを保持可能な二次記憶装置405が接続されて
いる。また、二次記憶装置405上には、表406
(T)が格納されている。
【0026】第1のコンピュータ401上のデータベー
スシステム402は第2のコンピュータ403からの問
合せ407を受け取る。データベースシステム402は
二次記憶装置405上に格納された表(T)406をア
クセスする。
【0027】問合せ407は、売上げの多かった上位3
位までの商品の行を検索する問合せである。
【0028】問合せ407において、表(T)406は
ORDER BY句によって売上げ順にソートされる。
さらに、WHERE句「ROWNUM<=3」によっ
て、ROWNUM(行番号)が1から3までの行が出力
される。これによって、問合せの結果408は、売上げ
の多かった上位3位の商品の行から構成されることにな
る。
【0029】ただし、ORACLEは行を取り出す順に
ROWNUMを割り当てていくので、図4において正し
い結果が得られるのは、表(T)406のsalesに
対してインデックスが設定されている場合に限られる。
【0030】Sybase(Sybaseは、Syba
se Incの登録商標である)には、表をある列の値
でグループ化して集合関数を適用した場合、グループ化
された行の集合と、グループに対して集合関数を適用し
た結果の両方を出力する「COMPUTE」句が提供さ
れている。このCOMPUTE句を用いて、集合関数が
適用された結果と、グループ化された行の一覧を照らし
合わせることで、集合関数を適用した結果と等しい値を
持つ行を知ることができる。
【0031】図5を用いて、SybaseのSQLを用
いた場合の問合せ処理について説明する。なお、図5の
点線はデータの流れを示す。
【0032】図5において、第1のコンピュータ501
と第2のコンピュータ503はネットワーク504で接
続されており、第1のコンピュータ501には電源断後
もデータを保持可能な二次記憶装置505が接続されて
いる。
【0033】第1のコンピュータ501上のデータベー
スシステム502は第2のコンピュータ503からの問
合せ507を受け取る。データベースシステム502は
二次記憶装置505上に格納された表(T)506をア
クセスする。
【0034】問合せ507は、売上げの最高を記録した
商品の行を、商品のグループごとに検索する問合せであ
る。
【0035】問合せ507は、ORDER BY句によ
り表(T)505が商品と売上げでソートされ、COM
PUTE句によりそれぞれの商品に対するその売上げの
最大値が計算される。
【0036】問合せの結果508は、商品でソートされ
た表509、510、511と、COMPUTE句の計
算結果である特殊な表512、513、514となる。
【0037】この結果、商品idが17の中で最高の売
上げを記録した商品の色や売上額は、表512と表50
9を照らし合わせ、表512に格納されている最大値と
等しい表509の行を探すことによって知ることができ
る。ほかの商品についても同様である。
【0038】
【発明が解決しようとする課題】SQLでは、ある列に
関して集合関数を適用したとき、その結果等しい値を持
つ行を求めることができないという制限がある。つま
り、図2における副問合せ209のように、売上げ(s
ales)の最大値を求めることはできても、売上げの
最大値をとる行を知ることができない。したがって、売
上げの最大値となっている行の商品(id)と色(co
lor)は求めることができない。
【0039】このSQLの制限のため、問合せの記述性
の問題と、処理オーバヘッドの問題がある。
【0040】図2の問合せでは、最大の売上げを記録し
た商品と色を求めるために、「まず売上げの最大値を求
め、次にその最大値を持つ行を求める」という2つの問
合せを記述しなければならず、単純SELECT文で記
述できない。図3の場合にも「商品でグループ化し、各
グループにおける売上げの最大値を求め、次にこの結果
と合致する行を表(T)306から求める」という2つ
の問合せを記述する必要があり、単純SELECT文で
記述できず、記述性が悪い。
【0041】また、図2の問合せ207の実行には、副
問合せ208で集合関数を計算するために1回の表のス
キャンが必要であり、この結果と等しい行を検索するた
めにさらに1回の表のスキャンが必要となる。したがっ
て、最低でも2回の表のスキャンが必要となり、問合せ
の処理オーバヘッドが増加する。図3のように表をグル
ープ化し、それぞれのグループに対して集合関数を適用
するような問合せ処理を行う場合、副問合せ308の実
行で表のスキャンが1回、この結果と表(T)306か
ら結果309を求めるために表のスキャンが2回とジョ
イン演算が1回必要であるので、問合せの処理オーバヘ
ッドはさらに増加する。
【0042】これらの問題は、既存のデータベースで解
決されているとはいえない。
【0043】図4に示したように、ORACLEではR
OWNUMを用いて、上位x位の売上げを持つ行を検索
することは可能であるが、これはインデックスが設定さ
れている場合に限られるので、実用的でない。また、グ
ループ化を行う場合には適用できないという問題があ
る。
【0044】図5に示したように、SybaseではC
OMPUTE句を用いて、グループ化された一覧表と、
そのグループに対する集合関数の結果を求めることがで
きるものの、集合関数の結果と等しい値を持つ行を求め
ているわけではない。集合関数の結果とグループ化され
た表は別の表である。 COMPUTE句を用いて求め
た集合関数の結果は特殊な扱いとなっており、埋込みS
QLにおいてプログラミング言語の変数に結果を格納で
きない。
【0045】このように、ある列に関して集合関数を適
用し、その結果と等しい値を持つ行を求める問合せは、
実応用において有効であるにもかかわらず、その記述が
困難であり、実行オーバヘッドが大きい。
【0046】本発明の目的は、この課題を解決すること
によって、データベースシステムにおける問合せ処理の
記述性を高め、高速な実行を可能とすることである。
【0047】具体的には、次の(A)から(D)を目的
とする。
【0048】(A)ある列に対して集合関数を適用し、
その結果と等しい値を持つ行を求めるような問合せを簡
潔に記述する問合せ方法を提供する。
【0049】(B)ある列の値に対してグループ化を行
い、各グループに対して集合関数を適用した結果と等し
い値を持つ行を求めるような問合せを簡潔に記述する問
合せ方法を提供する。
【0050】(C)ある列に対して集合関数を適用し、
その結果と等しい値を持つ行を求めるような問合せを高
速に実行する問合せ処理方法を提供する。
【0051】(D)ある列の値に対してグループ化を行
い、各グループに対して集合関数を適用した結果と等し
い値を持つ行を求める問合せを高速に実行する問合せ処
理方法を提供する。
【0052】
【課題を解決するための手段】上記の目的を達成するた
め、次の(a)から(d)の手段をとる。
【0053】(a)集合関数を適用した結果と等しい値
を持つ行を出力させるための予約語を新規にSQLに追
加する。
【0054】(b)グループ化を行い、各グループに対
して集合関数を適用した結果と等しい値を持つ行を出力
させるための予約語を新規にSQLに追加する。
【0055】(c)集合関数の適用結果と等しい値を持
つ行を保持するための結果格納用バッファを用意し、表
をスキャンしながら、フェッチした行と結果格納用バッ
ファの内容に対して集合関数に応じた比較を行い、その
結果に応じて結果格納用バッファの内容をフェッチした
行で置き換えたり、結果格納用バッファにフェッチした
行を加えたりする処理を問合せ実行部に実装する。
【0056】(d)集合関数の適用結果と等しい値を持
つ行を保持するための結果格納用バッファをグループご
とに用意し、表をスキャンしながら、フェッチした行と
結果格納用バッファの内容に対して集合関数に応じた比
較を行い、その結果に応じて結果格納用バッファの内容
をフェッチした行で置き換えたり、結果格納用バッファ
にフェッチした行を加えたりする処理を問合せ実行部に
実装する。
【0057】手段(a)、(b)をとることによって、
ある列に対して集合演算を適用したときに、その結果と
等しい値を持つ行を求める問合せを、単純SELECT
文で記述可能とし、記述性を高める。また、手段
(c)、(d)をとることによって、処理を1回のスキ
ャンで完了できるようにし、問合せの高速な実行を可能
とする。
【0058】なお、新しい予約語は、ユーザの便宜のた
めに導入するものであって、既存の予約語または既存の
予約語の組み合わせで、上述の処理を指定しても差し支
えない。
【0059】
【発明の実施の形態】本発明の実施の一形態について述
べる。
【0060】図1を用いて、本発明の実施の一形態につ
いて説明する。なお、図1の点線はデータの流れを示
す。
【0061】図1において、第1のコンピュータ101
は、第2のコンピュータ103とネットワーク104で
接続されている。また、第1のコンピュータ101は、
電源断後もデータを保持することが可能な二次記憶装置
106と接続されている。
【0062】第1のコンピュータ101上にはデータベ
ースシステム102が存在し、第2のコンピュータから
発行される問合せ105を受け取って、問合せ処理を実
行し、結果115を第2のコンピュータ103に返す。
第1のコンピュータ101に接続された二次記憶装置1
06上には、表(T)107が格納されており、データ
ベースシステム102はこの表(T)107を参照する
ことで問合せを実行する。
【0063】第1のコンピュータ101および第2のコ
ンピュータ103はパーソナルコンピュータ、ワークス
テーション、並列計算機、大型計算機など任意のコンピ
ュータでよい。また、第1のコンピュータ101が、相
互に接続された複数のコンピュータであってもよい。
【0064】第1のコンピュータ101と第2のコンピ
ュータ103は同一であっても差し支えない。また、第
2のコンピュータ103の数はいくつであってもよく、
第1のコンピュータ101との接続形態は問わない。
【0065】二次記憶装置106は、複数の表を格納し
ていても、表の一部を保持している複数の二次記憶装置
の集合であってもよい。また、第1のコンピュータ10
1と二次記憶装置106との接続形態は問わない。
【0066】データベースシステム102には、構文解
析部108とコード生成部109、および問い合せ実行
部110が存在する。
【0067】構文解析部108では、第2のコンピュー
タ103から発行された問合せ105の構文を解析し、
その正当性を検証する。コード生成部109では、問合
せ105を、問合せ実行部110が解釈実行できる形式
に変換する処理を行う。
【0068】問合わせ実行部110には、スキャン処理
部114と、比較判定部112が存在する。
【0069】また、スキャンされた行を一時的に格納す
る一時バッファ113と、問合せの結果を格納しておく
結果格納用バッファ111が存在する。
【0070】スキャン処理部114は、二次記憶装置1
06に格納されている表(T)107から行をフェッチ
する処理を行い、その結果は一時バッファ113へ格納
される。また、比較判定部112は、一時バッファ11
3に格納された行と結果格納用バッファ111に格納さ
れた行を比較する処理を行う。
【0071】第2のコンピュータ103から第1のコン
ピュータ101へ発行された問合せ105は、構文解析
部108における構文解析処理や、コード生成部109
におけるコード生成処理が行われた後、問合せ実行部1
10で実行される。
【0072】問合せ実行部では問合せ105の実行に先
立ち、結果格納用バッファ111、一時バッファ113
を確保する。一時バッファ113のサイズは1行分であ
り、結果格納用バッファ111の容量は集合関数やGR
OUP BY指定の有無によって異なる。
【0073】問合せ105の実行によって、スキャン処
理部114が二次記憶装置106上にある表(T)10
7から、行を1行づつフェッチし、一時バッファ113
に格納する。このとき、行をフェッチする順番や、イン
デックスが作成されているかどうかは問わない。
【0074】一時バッファ113に格納された行は、結
果格納用バッファ111に格納されている行と、比較判
定部112によって比較される。すべての行がスキャン
された時点で、データベースシステム102は、結果格
納用バッファ111の内容を、結果115として第2の
コンピュータ103に返す。
【0075】問合せ105における「AT」は、ある列
に関して部分集合を求める演算を適用した場合に、その
結果と等しい値を持つ行を選択するような問合せを可能
とする予約語である。
【0076】この予約語は説明のためのもので、どのよ
うな予約語でも差し支えない。また、この例では集合関
数としてMAXを用いているが、これもある列に対して
部分集合を求める演算(MINや上位x位までなど)で
あればなんでもよい。
【0077】問合せ105には、「AT MAX(sa
les)」が指定されており、表(T)107の中で、
列salesが最大となるような行を求めることを意味
している。
【0078】問合せ105の結果として求められる行は
1つとは限らず、最大値を持つ行が複数あれば、それら
が出力される。
【0079】次に、代表的な集合関数を適用した問合せ
について説明する。
【0080】図6および図7を用いて、集合関数がMA
Xの場合の処理について説明する。なお、図6における
点線はデータの流れを示し、実線は制御の流れを示す。
【0081】図6において問合せ実行部601は、解釈
実行が可能な形式に変換された問合せ602を受け取
り、二次記憶装置603に格納されている表(T)60
4をアクセスする。
【0082】問合せ602には「AT MAX(sal
es)」が含まれている。この場合、問合せ実行部60
1では、問合せの実行に先立ち、一時バッファ606を
1行分確保する、また、結果格納用バッファ608の容
量は可変長とする(ステップ701)。
【0083】一時バッファ606は二次記憶装置603
から読み出された行を保持するため、結果格納用バッフ
ァ608は、salesが最大である行を格納するため
に用いられる。
【0084】この初期化処理が終了した後、問合せ実行
部601は、表(T)604のすべての行を読み終える
まで次の処理を繰り返す。
【0085】スキャン処理部605は、二次記憶装置6
03に格納されている表(T)604を1行づつ読み出
し、その結果を一時バッファ606に格納する(ステッ
プ702)。次に、比較判定部607によって、一時バ
ッファ606に格納された行のsalesと、結果格納
用バッファ608のsalesとが比較される(ステッ
プ703)。もしも一時バッファ606のsalesの
ほうが大きいかまたは等しければ、それは最大値なの
で、一時バッファ606の内容を結果格納用バッファ6
08に移動する(ステップ704)。
【0086】表(T)604のすべての行に対してスキ
ャンが終了したとき、結果バッファ608には、sal
esの最大値を持つ行が格納されている。問合せ実行部
601は、結果バッファの内容である609を結果とし
て返す(ステップ705)。
【0087】図8および図9を用いて、集合関数がTO
P3(上位3位を求める)の場合の処理について説明す
る。なお、図8における点線はデータの流れを示し、実
線は制御の流れを示す。
【0088】図8において、問合せ実行部801は問合
せ802を受け取り、二次記憶装置803に格納されて
いる表(T)804をアクセスする。
【0089】問合せ802には「AT TOP3」が含
まれている。この場合、問合せ実行部801では実行に
先立ち、一時バッファ806を1行分確保する、また、
結果格納用バッファ808の容量は3行分確保する(ス
テップ901)。
【0090】一時バッファ806は二次記憶装置803
から読み出された行を保持するため、結果格納用バッフ
ァ808は、salesが最大である行を格納するため
に用いられる。
【0091】この初期化処理が終了した後、問合せ実行
部801は、表(T)804のすべての行を読み終える
まで次の処理を繰り返す。
【0092】スキャン処理部805は、二次記憶装置8
03に格納されている表(T)804を1行づつ読み出
し、その結果を一時バッファ806に格納する(ステッ
プ902)。次に、比較判定部807によって、一時バ
ッファ806に格納された行のsalesと、結果格納
用バッファ808に格納されているすべての行のsal
esとが比較される(ステップ903)。もしも結果格
納用バッファ808のいずれかの行に対して、一時バッ
ファ806のsalesのほうが大きいかまたは等しけ
れば、それは上位3位の値であるので、結果格納用バッ
ファに一時バッファ806の行を追加する(ステップ9
04)。
【0093】表(T)804のすべての行に対してスキ
ャンが終了したとき、結果バッファ808には、sal
esの多い上位3位の商品を持つ行が格納されている。
問合せ実行部801は、結果バッファの内容である80
9を結果として返す(ステップ905)。
【0094】図10および図11を用いて、表をグルー
プ化し、各グループに対して集合関数MAXを適用する
場合の処理について説明する。なお、図10における点
線はデータの流れを示し、実線は制御の流れを示す。
【0095】図10において、問合せ実行部1001は
問合せ1002を受け取り、二次記憶装置1003に格
納されている表1004をアクセスする。
【0096】問合せ1002にはGROUP BYが指
定されており、かつAT MAXが含まれているので、
問合せ実行部1001では実行に先立ち、一時バッファ
1006を1行分確保する、また、結果格納用バッファ
1008は、商品のidを添え字とする可変長の連想配
列とし、さらにそれぞれの配列要素も可変長とする(ス
テップ1101)。
【0097】ある商品のidでアクセスされる結果格納
用バッファには、その商品の中でsalesが最大であ
る行が格納される。
【0098】この初期化処理が終了した後、問合せ実行
部1001は、表1004のすべての行を読み終えるま
で次の処理を繰り返す。
【0099】スキャン処理部1005は、二次記憶装置
1003に格納されている表1004を1行づつ読み出
し、その結果を一時バッファ1006に格納する(ステ
ップ1102)。次に、 比較判定部1007
は、一時バッファ1006に格納されているidに対応
する結果格納用連想配列のエントリが存在するか否かを
確かめる(ステップ1103)。存在すれば、一時バッ
ファ1006に格納された行のsalesと、結果格納
用バッファ1008の配列添え字idのバッファに格納
されている行のsalesとが比較される(ステップ1
104)。もしも結果格納用バッファ1008の行に対
して、一時バッファ1006のsalesのほうが大き
いかまたは等しければ、それは最大値である。このとき
比較判定部1007は、一時バッファ1006の内容を
結果格納用バッファ1008に移動する(ステップ11
06)。もし、このときidと一致する結果格納用バッ
ファ1008が存在しなければ新たな連想配列のエント
リを作成し(ステップ1105)、そこに一時バッファ
1006の内容を移動する(ステップ1106)。
【0100】表1004のすべての行に対してスキャン
が終了したとき、結果バッファ1008には、idごと
にグループ化されたsalesの最大値を持つ行が格納
されている。問合せ実行部1001は、結果バッファの
内容1009を結果として返す(ステップ1107)。
【0101】比較判定部1007は、集合演算の種類に
応じた比較を行った上で、一時バッファ1006から結
果格納用バッファ1008へ行の内容を移動したり追加
したりする。図12に、集合演算と比較処理の例をGR
OUP BY指定ありの場合となしの場合に分けて示
す。
【0102】図12において、bufは結果格納用バッ
ファ、tmpは一時バッファをあらわす。また、col
は集合関数によって指定された列をあらわすものとす
る。グループ化指定ありの場合、グループ化列の値はg
rpであるとする。
【0103】図12において、集合演算がMINの場合
には、結果格納用バッファと一時バッファの比較列が等
しいか一時バッファの内容のほうが小さい場合に、一時
バッファの内容が結果バッファにコピーされる。
【0104】また、集合演算が上位n位までを求める
「TOPn」演算の場合には、結果格納用バッファの大
きさをn行分に制限する。一時バッファの内容が、結果
格納用バッファのいずれかと等しいかまたは大きけれ
ば、一時バッファの内容が結果格納用バッファに格納さ
れる。
【0105】下位n位までを求める「WORSTn」演
算の場合には、結果格納用バッファの大きさをn行分に
制限する。一時バッファの内容が、結果格納用バッファ
のいずれかと等しいかまたは小さければ、一時バッファ
の内容が結果格納用バッファに格納される。
【0106】GROUP BY指定がある場合には、結
果格納用バッファはグループ化列grpを添え字とする
可変長の連想配列として確保されるものとする。この場
合、それぞれの比較処理では、一時バッファのグループ
化列の値を添え字として結果格納用バッファをアクセス
し、GROUP BY指定なしの場合と同様の比較を行
う。
【0107】
【発明の効果】本発明によれば、ある列に対して集合演
算を適用したときに、その結果の値と等しい行を求める
問合せを単純SELECT文で記述できるようにし、記
述性が高められる。また、この処理を1回のスキャンで
完了できるようにし、問合せが高速に実行できる。
【図面の簡単な説明】
【図1】本実施例の全体構成図。
【図2】ある列の最大値を持つ行を検索する例を示す
図。
【図3】グループごとに最大値を持つ行を検索する例を
示す図。
【図4】ORACLEのSQLを用いて表のある列の最
大値を持つ行を検索する例を示す図。
【図5】SybaseのSQLを用いて表のある列をグ
ループ化し最大値を持つ行を検索する例を示す図。
【図6】本実施例において最大値を持つ行を検索する例
を示す図。
【図7】本実施例において最大値を持つ行を検索する手
順を示すフローチャート。
【図8】本実施例において上位3位の行を検索する例を
示す図。
【図9】本実施例において上位3位の行を検索する手順
を示すフローチャート。
【図10】本実施例においてグループごとの最大値を持
つ行を検索する例を示す図。
【図11】本実施例においてグループごとの最大値を持
つ行を検索する手順を示すフローチャート。
【図12】本実施例における比較判定部の処理例を示す
図。
【符号の説明】
101:第1のコンピュータ、102:データベースシ
ステム、103:第2のコンピュータ、104:ネット
ワーク、105:問合せ、106:二次記憶装置、10
7:表(T)、108:構文解析部、109:コード生
成部、110:問合せ実行部、111:結果格納用バッ
ファ、112:比較判定部、113:一時バッファ、1
14:スキャン処理部、115:問合せ結果。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 牛嶋 一智 東京都国分寺市東恋ケ窪一丁目280番地 株式会社日立製作所中央研究所内 Fターム(参考) 5B075 KK02 KK40 ND03 ND40 NK32 PP26 UU40 5B082 GA08

Claims (23)

    【特許請求の範囲】
  1. 【請求項1】第1のコンピュータ上に存在し、行と列か
    ら構成される表として表現されたデータの処理を行う関
    係データベースシステムに対して第2のコンピュータか
    ら問合せを発生する問い合せ方法であって、第1の表に
    ある第1及び第2の列のうち第1の列に集合関数Fを適
    用した結果の値Vを格納しておき、第1の表から、第1
    の列が値Vと等しい1個以上の行を選択するために、該
    データベースシステムで、ユーザが発行する第1の表か
    ら行を選択するSELECT文を受け付け、予約語「S
    ELECT」を1個含む単純SELECT文と、該予約
    語を2個以上含む副問合せありSELECT文のうち、
    単純SELECT文として該問合せを指定する、関係デ
    ータベースシステムにおける問合せ方法。
  2. 【請求項2】前記行列の第2の列に適用する集合関数
    が、最大値を求める集合関数である請求項1記載の関係
    データベースシステムにおける問合せ方法。
  3. 【請求項3】前記行列の第2の列に適用する集合関数
    が、最小値を求める集合関数である請求項1記載の関係
    データベースシステムにおける問合せ方法。
  4. 【請求項4】前記行列の第2の列に適用する集合関数
    が、上位x位(x:任意の整数)を求める集合関数であ
    る請求項1記載の関係データベースシステムにおける問
    合せ方法。
  5. 【請求項5】前記行列の第2の列に適用する集合関数
    が、下位x位(x:任意の整数)を求める集合関数であ
    る請求項1に記載の関係データベースシステムにおける
    問合せ方法。
  6. 【請求項6】第1のコンピュータ上に存在し、行と列か
    ら構成される表として表現されたデータの処理を行う関
    係データベースシステムに対して第2のコンピュータか
    ら問合せを発生する問合せ方法であって、第1の表にあ
    る第1の列と第2の列のうち、第1の列で第1の表をグ
    ループ化し、各グループの第2の列に集合関数Fを適用
    した結果の値Vを格納し、第1の表の各グループから、
    第2の列が値Vと等しい1個以上の行を選択するため
    に、該データベースシステムで、ユーザが発行する第1
    の表から行を選択するSELECT文を受け付け、予約
    語「SELECT」を1個含む単純SELECT文と、
    該予約語を2個以上含む副問合せありSELECT文の
    うち、単純SELECT文として該問合せを指定する、
    関係データベースシステムにおける問合せ方法。
  7. 【請求項7】前記行列の第2の列に適用する集合関数
    が、最大値を求める集合関数である請求項6記載の関係
    データベースシステムにおける問合せ方法。
  8. 【請求項8】前記行列の第2の列に適用する集合関数
    が、最小値を求める集合関数である請求項6記載の関係
    データベースシステムにおける問合せ方法。
  9. 【請求項9】前記行列の第2の列に適用する集合関数
    が、上位x位(x:任意の整数)を求める集合関数であ
    る請求項6記載の関係データベースシステムにおける問
    合せ方法。
  10. 【請求項10】前記行列の第2の列に適用する集合関数
    が、下位x位(x:任意の整数)を求める集合関数であ
    る請求項6記載の関係データベースシステムにおける問
    合せ方法。
  11. 【請求項11】第1のコンピュータ上に存在し、行と列
    から構成される表として表現されたデータの処理を行う
    関係データベースシステムに対して第2のコンピュータ
    から発生された問合せを処理する問合せ処理方法であっ
    て、第1の表にある第1の列に集合関数Fを適用した結
    果の値Vを格納しておき、第1の表から、第1の列が値
    Vと等しい1個以上の行を選択するために、該表の1回
    のスキャンで該問合せを処理する、関係データベースシ
    ステムにおける問合せ処理方法。
  12. 【請求項12】前記スキャンは、問合せ処理の結果を保
    持する結果格納用バッファの内容とフェッチした行の内
    容とを比較する際に、前記表をスキャンしながら、集合
    関数に応じた比較を行い、その結果に応じてフェッチし
    た行の内容を結果格納用バッファの内容へ反映させる処
    理を有する請求項11記載の関係データベースシステム
    における問合せ処理方法。
  13. 【請求項13】前記反映させる処理は、最大を求める集
    合関数に応じた比較を行い、フェッチした行の第1の列
    の内容が、複数の行を格納できる結果格納用バッファに
    格納されているいずれかの行の第1の列の内容よりも大
    きい場合に、フェッチした行の内容を結果バッファへ移
    動し、小さい場合に、フェッチした行の内容を結果バッ
    ファへ追加する処理を有する請求項12記載の関係デー
    タベースシステムにおける問合せ処理方法。
  14. 【請求項14】前記反映させる処理は、最小を求める集
    合関数に応じた比較を行い、フェッチした行の第1の列
    の内容が、複数の行を格納できる結果格納用バッファに
    格納されているいずれかの行の第1の列の内容よりも小
    さい場合に、フェッチした行の内容を結果バッファへ移
    動し、大きい場合に、フェッチした行の内容を結果バッ
    ファへ追加する処理を有する請求項13記載の関係デー
    タベースシステムにおける問合せ処理方法。
  15. 【請求項15】前記反映させる処理は、上位x位(x:
    任意の整数)を求める集合関数に応じた比較を行い、フ
    ェッチした行の第1の列の内容が、x行を格納できる結
    果格納用バッファに格納されているいずれかの行の第1
    の列の内容よりも大きい場合に、フェッチした行の内容
    を結果バッファへ移動し、小さい場合に、フェッチした
    行の内容を結果バッファへ追加する処理を有する請求項
    12記載の関係データベースシステムにおける問合せ処
    理方法。
  16. 【請求項16】前記反映させる処理は、下位x位(x:
    任意の整数)を求める集合関数に応じた比較を行い、フ
    ェッチした行の第1の列の内容が、x行を格納できる結
    果格納用バッファに格納されているいずれかの行の第1
    の列の内容よりも小さい場合に、フェッチした行の内容
    を結果バッファへ移動し、大きい場合に、フェッチした
    行の内容を結果バッファへ追加する処理を有する請求項
    12記載の関係データベースシステムにおける問合せ処
    理方法。
  17. 【請求項17】第1のコンピュータ上に存在し、行と列
    から構成される表として表現されたデータの処理を行う
    データベースシステムに対して第2のコンピュータから
    問合せを発生する問合せ処理方法であって、第1の表に
    ある第1の列と第2の列のうち、第1の列で第1の表を
    グループ化し、各グループの第2の列に集合関数Fを適
    用した結果の値Vを格納しておき、第1の表の各グルー
    プから、第2の列が値Vと等しい1個以上の行を選択す
    るために、該表の1回のスキャンで該問合せを処理す
    る、関係データベースシステムにおける問合せ方法。
  18. 【請求項18】前記スキャンは、問合わせ処理の結果を
    グループごとに保持する結果格納用バッファの内容とフ
    ェッチした行の内容とを比較する際に、前記表をスキャ
    ンしながら、集合関数に応じた比較を行い、その結果に
    応じてフェッチした行の内容をグループごとの結果格納
    用バッファの内容へ反映させる処理を有する請求項17
    記載の関係データベースシステムにおける問合せ処理方
    法。
  19. 【請求項19】前記反映させる処理は、最大を求める集
    合関数に応じた比較を行い、フェッチした行の第2の列
    の内容が、前記結果格納用バッファに格納されているい
    ずれかの行の第2の列の内容よりも大きい場合に、フェ
    ッチした行の内容を該結果格納用バッファへ移動し、小
    さい場合に、フェッチした行の内容を該結果格納用バッ
    ファへ追加する処理を有する請求項18記載の関係デー
    タベースシステムにおける問合せ処理方法。
  20. 【請求項20】前記反映させる処理は、最小を求める集
    合関数に応じた比較を行い、フェッチした行の第2の列
    の内容が、前記結果格納用バッファに格納されているい
    ずれかの行の第2の列の内容よりも小さい場合に、フェ
    ッチした行の内容を該結果格納用バッファへ移動し、大
    きい場合に、フェッチした行の内容を該結果格納用バッ
    ファへ追加する処理を有する請求項18記載の関係デー
    タベースシステムにおける問合せ処理方法。
  21. 【請求項21】前記反映させる処理は、上位x位(x:
    任意の整数)を求める集合関数に応じた比較を行い、フ
    ェッチした行の第2の列の内容が、グループごとにx行
    を格納できる結果格納用バッファに格納されているいず
    れかの行の第2の列の内容よりも大きい場合に、フェッ
    チした行の内容を該結果格納用バッファへ移動し、小さ
    い場合に、フェッチした行の内容を該結果格納用バッフ
    ァへ追加する処理を有する請求項18記載の関係データ
    ベースシステムにおける問合せ処理方法。
  22. 【請求項22】前記反映させる処理は、下位x位(x:
    任意の整数)を求める集合関数に応じた比較を行い、フ
    ェッチした行の第2の列の内容が、グループごとにx行
    を格納できる結果格納用バッファに格納されているいず
    れかの行の第2の列の内容よりも小さい場合に、フェッ
    チした行の内容を該結果格納用バッファへ移動し、大き
    い場合に、フェッチした行の内容を該結果格納用バッフ
    ァへ追加する処理を有する請求項18記載の関係データ
    ベースシステムにおける問合せ処理方法。
  23. 【請求項23】請求項1〜22項いずれか1項記載の方
    法をコンピュータ上で実行するためのコンピュータプロ
    グラムを記録した記録媒体。
JP11176287A 1999-06-23 1999-06-23 関係データベースシステムにおける問合せ方法および問合せ処理方法 Pending JP2001005828A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP11176287A JP2001005828A (ja) 1999-06-23 1999-06-23 関係データベースシステムにおける問合せ方法および問合せ処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP11176287A JP2001005828A (ja) 1999-06-23 1999-06-23 関係データベースシステムにおける問合せ方法および問合せ処理方法

Publications (1)

Publication Number Publication Date
JP2001005828A true JP2001005828A (ja) 2001-01-12

Family

ID=16010958

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11176287A Pending JP2001005828A (ja) 1999-06-23 1999-06-23 関係データベースシステムにおける問合せ方法および問合せ処理方法

Country Status (1)

Country Link
JP (1) JP2001005828A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100473058B1 (ko) * 2001-12-27 2005-03-08 삼성에스디에스 주식회사 관계형 데이타베이스 서버에서의 분석적 처리방법
JP2008310634A (ja) * 2007-06-15 2008-12-25 Mitsubishi Electric Corp データベース検索装置及びデータベース検索プログラム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100473058B1 (ko) * 2001-12-27 2005-03-08 삼성에스디에스 주식회사 관계형 데이타베이스 서버에서의 분석적 처리방법
JP2008310634A (ja) * 2007-06-15 2008-12-25 Mitsubishi Electric Corp データベース検索装置及びデータベース検索プログラム

Similar Documents

Publication Publication Date Title
US7158996B2 (en) Method, system, and program for managing database operations with respect to a database table
US5241648A (en) Hybrid technique for joining tables
US6185557B1 (en) Merge join process
US6374232B1 (en) Method and mechanism for retrieving values from a database
US7613701B2 (en) Matching of complex nested objects by multilevel hashing
US7111025B2 (en) Information retrieval system and method using index ANDing for improving performance
US5257365A (en) Database system with multi-dimensional summary search tree nodes for reducing the necessity to access records
US7680821B2 (en) Method and system for index sampled tablescan
Cheng et al. An efficient hybrid join algorithm: A DB2 prototype
US6343286B1 (en) Efficient technique to defer large object access with intermediate results
US11176105B2 (en) System and methods for providing a schema-less columnar data store
US6366902B1 (en) Using an epoch number to optimize access with rowid columns and direct row access
US5819256A (en) Method and apparatus for processing count statements in a database system
US6081799A (en) Executing complex SQL queries using index screening for conjunct or disjunct index operations
KR20010083096A (ko) 가치-사례-연결을 통한 컴퓨터에 의해 구현되는데이터베이스
JPH09212528A (ja) データベースを記憶する方法、データベースからレコードを検索する方法、および、データベース記憶/検索システム
US7542962B2 (en) Information retrieval method for optimizing queries having maximum or minimum function aggregation predicates
US6285994B1 (en) Method and system for efficiently searching an encoded vector index
US6697794B1 (en) Providing database system native operations for user defined data types
US20040054683A1 (en) System and method for join operations of a star schema database
US7814094B2 (en) Optimizing access to a database by utilizing a star join
Cui et al. Indexing high-dimensional data for efficient in-memory similarity search
JP2001331509A (ja) リレーショナルデータベース処理装置、リレーショナルデータベースの処理方法及びリレーショナルデータベースの処理プログラムを記録したコンピュータ読み取り可能な記録媒体
US6260037B1 (en) Method and computer program product for implementing skip key processing for database grouping queries involving aggregate operations by using one or more indices
JP2001005828A (ja) 関係データベースシステムにおける問合せ方法および問合せ処理方法