QUELクエリ言語

クエル
家族クエリ言語
デザイン:マイケル・ストーンブレーカー
初登場1976 (1976年
主要な実装
イングレス、ポストクエル
影響を受けた
アルファ

QUELは、タプル関係計算に基づくリレーショナルデータベースクエリ言語であり、 SQLとの類似点がいくつかあります。カリフォルニア大学バークレー校におけるIngres DBMS開発の一環として、Coddが以前に提案したものの実装されなかったデータサブ言語ALPHAをベースに開発されました。QUELは、無料で入手可能なIngresのソースコードに基づくほとんどの製品で短期間使用されており、特にPOSTGRESでサポートされているPOSTQUELと呼ばれる実装で顕著でした。[ 1 ]

QUELの開発者はIngresのEugene Wong氏です。 [ 2 ] OracleIBM DB2が1980年代初頭に市場シェアを拡大​​するにつれ、IngresとQUELをサポートする他の企業はSQLに移行しました。 [ 3 ] [ 2 ] QUELはIngres DBMSの一部として引き続き利用可能ですが、QUEL固有の言語拡張機能は長年にわたって追加されていません。

使用法

QUEL文は常にタプル変数によって定義され、クエリを制限したり結果セットを返したりするために使用できます。Ingresの最初の論文の一つから引用した以下の例を考えてみましょう。[ 4 ]

Eの範囲は従業員です Wに取り出す (COMP = 推定給与 / (推定年齢 - 18)) E.Name = "Jones" 

ここで、EはEMPLOYEEリレーションを範囲とするタプル変数であり、そのリレーション内の条件 COMP を満たすすべてのタプルが検索されます。クエリの結果は、条件を満たす各タプルに対して計算された単一のドメインCOMPを持つ新しいリレーションWです。その後、リレーションWに対して追加のクエリを実行できます。 E.Name = "Jones"

同等の SQL ステートメントは次のようになります。

テーブルWを次のように作成しますCOMPとして( E.給与/ ( E .年齢-18 ) )選択従業Eからここで、E . name = 'Jones'

この例では、リレーションは新しいテーブル W に格納されています。これは、QUEL バージョンの直接の類似ではありません。QUEL のリレーションは、ほとんどの最新の SQL 実装で見られる一時テーブルに似ています。

以下は、テーブルを作成し、そこに行を挿入し、その中のデータを取得して変更し、最後に追加された行を削除する (名前が一意のフィールドであると仮定) という単純なセッションのサンプルです。

クエルSQL
学生を作成します(名前 = c10、年齢 = i4、性別 = c1、州 = c2) sの範囲は学生です s に追加 (名前 = "philip", 年齢 = 17, 性別 = "m", 州 = "FL") s.state = "FL" の場合、(s.all) を取得します。 sを置き換える (age=s.age+1) 取得 (s.all) s.name="philip" の s を削除します。 
テーブルstudent ( name char ( 10 ), age int , sex char ( 1 ), state char ( 2 ))を作成します。学生(名前年齢性別)( 'philip' 17 'm' 'FL' ) を挿入しますstate = 'FL'の場合、studentから*を選択します学生を更新します。年齢を age + 1設定ます学生から*を選択;name = 'philip'学生から削除します

QUELのもう一つの特徴は、レコードを一括してシステム内外に移動するための組み込みシステムです。次のコマンドを考えてみましょう。

学生名前= c0 カンマ= d1 年齢= c0 カンマ= d1 性別= c0 カンマ= d1 住所= c0 nl = d1 )を「/student.txt」コピーします。

これは、studentテーブルのすべてのレコードをカンマ区切りのファイルとして作成します。d1はデータ型ではなく区切り文字を示します。intoをfromに変更すると、処理逆になります。同様のコマンドは多くのSQLシステムで利用可能ですが、通常はSQL言語の内部ツールではなく、外部ツールとして提供されています。そのため、ストアドプロシージャでは使用できません。

QUELは非常に強力な集計機能を備えています。集計はネストすることができ、各集計には独立したby-listや制限句を含めることができます。例えば、

取得( a = count ( y . i by y . dここでy . str = "ii*"またはy . str = "foo" )、b = max ( count ( y . i by y . d )))

この例は、QUELのあまり好ましくない特性の一つ、つまりすべての文字列比較がパターンマッチになる可能性があることを示しています。 iiy.str = "ii*"で始まるすべてのy.str値に一致します。一方、SQLでは完全一致の場合のみ を使用し、パターンマッチが必要な場合 にはlikeを使用します。=

参照

参考文献

  1. ^ Stonebraker, M ; Rowe, LA (1986年5月). POSTGRESの設計(PDF) . Proc. 1986 ACM SIGMOD Conference on Management of Data. ワシントンD.C.
  2. ^ a b「RDBMS Plenary 1: Early Years」(PDF)(インタビュー)。Burton Gradによるインタビュー。コンピュータ歴史博物館。2007年6月12日。p. 26。2025年5月30日閲覧
  3. ^ Morgenthaler, Gary (2005年12月8日). 「Gary Morgenthalerのオーラル・ヒストリー」(PDF) (インタビュー). ルアン・ジョンソンによるインタビュー. コンピュータ歴史博物館. p. 18. 2025年5月30日閲覧
  4. ^ストーンブレーカー, マイケル; ウォン, ユージン; クレプス, ピーター; ヘルド, ジェラルド (1976). 「INGRESの設計と実装」. ACM Transactions on Database Systems . 1 (3): 191. CiteSeerX 10.1.1.109.957 . doi : 10.1145/320473.320476 . 

さらに読む