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.