QUEL

QUELは、関係データベース(リレーショナルデータベース)を操作するためのデータベース言語(問い合わせ言語)です。SQLと多くの面で類似性が見られますが、いくつかの重要な違いもあります。

QUELは、カリフォルニア大学バークレー校(UCB)で開発されたIngresプロジェクトの一部として誕生しました。このプロジェクトは、関係モデルソフトウェアとして実装することを目的としており、QUELはその中心的な役割を担っていました。QUELの設計は、エドガー・F・コッドが考案したデータサブ言語ALPHAに大きく影響を受けています。ALPHA自体は実装されることはありませんでしたが、その概念はQUELに引き継がれました。

QUELは、Ingresのソースコードを基盤とする多くの関係データベース管理システム(RDBMS)で採用され、短い期間ながらも広く利用されました。しかし、1980年代初頭にOracleやDB2といったデータベースが市場を席巻するようになると、QUELをサポートしていたデータベース企業の多くは、データベース言語をSQLへと移行しました。

QUELの大きな特徴の一つは、文法が「組変数」(タプル変数)を基盤としている点です。組変数は、問い合わせの対象となるデータ集合を定義したり、結果集合を操作するために利用されます。例えば、従業員(employee)テーブルから名前が「Jones」である従業員の給与(salary)を年齢(age)から計算した値を求めるクエリは、QUELでは以下のようになります。


range of e is employee
retrieve (comp = e.salary/ (e.age - 18)) where e.name = "Jones"


この例では、`e`が組変数であり、employeeテーブルの各行を表します。SQLで同等のクエリを記述すると、以下のようになります。

sql
select (e.salary/ (e.age - 18)) as comp from employee as e where e.name = "Jones"


QUELは、SQLと比較して、より「形式に即している」と考える人もいます。SQLでは、命令ごとに異なる構文を用いるのに対し、QUELではすべての命令が統一された形式で記述されるため、一貫性が高いと感じられるようです。

例えば、学生(student)テーブルを作成し、データの追加、検索、更新、削除を行う一連の操作を考えてみましょう。QUELでは、以下のようになります。


create student(name = c10, age = i4, sex = c1, state = c2)
range of s is student
append to s (name = "philip", age = 17, sex = "m", state = "FL")
retrieve (s.all) where s.state = "FL"
replace s (age=s.age+1)
retrieve (s.all)
delete s where s.name="philip"


一方、SQLでは以下のように記述されます。

sql
create table student(name char(10), age int, sex char(1), state char(2))
insert into student (name, age, sex, state) values ("philip", 17, "m", "FL")
select from student where state = "FL"
update student set age=age+1
select
from student
delete student where name="philip"


SQLでは、INSERTとUPDATEのように機能が似た命令であっても、構文が大きく異なることに注意が必要です。QUELでは、命令の種類によらず統一された形式で記述できるため、よりシンプルに感じられるかもしれません。

また、QUELには、データの入出力のための組み込み機構があります。例えば、以下の命令は、studentテーブルの内容をコンマ区切りファイルとして出力します。


copy student(name=c0, comma=d1, age=c0, comma=d1, sex=c0, comma=d1, address=c0, nl=d1) into "/student.txt"


`d1`は区切り文字を表します。`into`を`from`に変更すると、データの読み込みを行うことができます。SQLでも同様の機能を持つシステムもありますが、多くの場合、外部ツールとして提供されるか、SQL言語の拡張として実装されることが一般的です。QUELのように、言語自体に組み込まれているわけではありません。

QUELは、その形式的な構文と統一された命令形式により、SQLとは異なるアプローチを提供するデータベース言語でした。現在はSQLに取って代わられましたが、その設計思想は、後のデータベース言語に影響を与えたと言えるでしょう。

関連項目
関係代数
関係論理
Tutorial D
D (データベース言語仕様)

外部リンク
Non SQL Query Languages - Antoni Kokot と David West
C. J. Date: A Critique of the SQL Database Language. SIGMOD Record 14(3): 8-54, 1984.

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。