QBE(Query by Example)は、リレーショナルデータベースのためのデータベース問い合わせ言語である。これは最初のグラフィカルな問い合わせ言語であり、ユーザーがコマンド、例要素、条件を入力する視覚的なテーブルを使用する。QBEの背後にある動機は、パーサーがユーザーの操作をSQLなどのデータベース操作言語で表現されたステートメントに変換できることである。舞台裏では、実際に実行されるのはこのステートメントである。適切に包括的なフロントエンドは、ユーザーがSQLの細部を覚える負担を最小限に抑えることができ、エンドユーザー(およびプログラマー)にとって、テーブルや列を名前を入力するのではなく選択することで選ぶ方が簡単で生産的である。
QBEはエンドユーザー開発における先駆的な研究を表しており、このトピックの初期の例として研究論文で頻繁に引用されている。この用語はまた、Zloofの研究に影響を受けた一般的な技法を指し、検索値を持つ項目のみが結果を「フィルタリング」するために使用される。これは、ソフトウェアユーザーが問い合わせ言語(SQLなど)を知らなくても問い合わせを実行する方法を提供する。ソフトウェアはユーザーに代わって問い合わせを自動生成できる(通常は舞台裏で)。
歴史
Query by Exampleは、1970年代半ばにIBM ResearchのMoshé M. Zloofによって考案され、SQLの開発と並行して、Edgar Coddのリレーショナルデータベースに関する研究に影響を受けた。当初はデータの取得のみを目的としていたが、QBEは後に挿入、削除、更新、および一時テーブルの作成などの他の操作を可能にするように拡張された。
現在、QBEはいくつかのリレーショナルデータベースのフロントエンドでサポートされており、特にMicrosoft Access(「Visual Query by Example」を実装)やMicrosoft SQL Server Enterprise Managerがある。また、いくつかのオブジェクト指向データベース(例:db4o)でも実装されている。QBEはtableau queryと呼ばれる論理的形式主義に基づいているが、SQLがリレーショナル代数に基づいているのと同様に、QBEはそれにいくつかの拡張を追加している。
例
Suppliers and Partsデータベースを使用した例をここに示し、QBEの動作を説明する。ユーザーは視覚的なテーブルに例値と条件を入力して、一致する行を取得する。
一般的な技法として
より高度なバージョンのQBEには、プルダウンメニューを介して、「含む」、「含まない」、「で始まる」、「より大きい」などの他の比較演算子のオプションがある。テキスト比較の別のアプローチは、1つ以上のワイルドカード文字を許可することである。例えば、特定のシステムでアスタリスクがワイルドカード文字として指定されている場合、「Rob*」を使用して姓を検索すると、「Rob」、「Robert」、「Robertson」、「Roberto」などの姓が(一致して)返される。
標準SQLでは、パーセント記号はLIKE句でワイルドカードのように機能する。この場合、query-by-exampleフォーム処理ソフトウェアはアスタリスクをパーセント記号に変換する。(アスタリスクはSQL以外ではより一般的なワイルドカードの慣例であるため、ここではフォームはよりユーザーフレンドリーにしようとしている。)
Query-by-exampleソフトウェアは、SQLインジェクションを避けるために注意する必要がある。そうしないと、悪意のあるユーザーが問い合わせフォームの作成者が意図したよりも深くデータベースに侵入する可能性がある。
情報検索において
情報検索の文脈では、QBEはやや異なる意味を持つ。ユーザーは1つまたは複数のドキュメントを送信し、ドキュメントデータベースから「類似した」ドキュメントを取得するよう要求できる(複数例による検索を参照)。類似性検索は、ドキュメントベクトルの比較に基づいている(ベクトル空間モデルを参照)。このアプローチは、類似性ベースの検索が一般的である現代の人工知能システム、特に機械学習と深層学習に影響を与えた。
遺産と影響
QBEのグラフィカルなアプローチは、多くのデータベースフロントエンドやエンドユーザー開発ツールに影響を与えた。その原則は、現代のビジュアル問い合わせビルダーや、複雑なシステムのユーザーフレンドリーなインターフェースの設計に見られる。例を問い合わせとして使用する概念は、生成AIや大規模言語モデルに類似点があり、プロンプトや例が出力生成を導く。Xerox PARCやMIT CSAILでの人間とコンピューターの相互作用に関する研究は、技術を非専門家にアクセス可能にするという同様のアイデアに基づいていた。
関連項目
- CRUD
- Microsoft Query by Example
- GraphQL、JSONフロントエンド用のQBE
- QBIC