QUEL
|
QUEL is a relational database access language, similar in most ways to SQL, but somewhat better arranged and easier to use. It was created as a part of the groundbreaking Ingres effort at University of California, Berkeley, based on Codd's earlier suggested but not implemented Data Sub-Language ALPHA. QUEL was used for a short time in most products based on the freely-available Ingres source code, most notably Informix. As Oracle and DB2 started taking over the market in the early 1980s, most companies then supporting QUEL moved to SQL instead.
In many ways QUEL is similar to SQL. One difference is that QUEL statements are always defined by tuple variables, which can be used to limit queries or return result sets. Consider this example, taken from the original Ingres paper:
range of e is employee
retrieve (comp = e.salary/ (e.age - 18))
where e.name = "Jones"
e is a tuple, defining a set of data, in this case all the rows in the employee table that have the first name "Jones". In SQL the statement is very similar, and arguably cleaner:
select (e.salary/ (e.age - 18)) as comp
from employee as e
where e.name = "Jones"
QUEL is generally more "normalized" than SQL. Whereas every major SQL command has a format that is at least somewhat different than the others, in QUEL a single syntax is used for all commands.
For instance, here is a sample of simple session that creates a table, inserts a row into it, and then retrieves and modifies the data inside it.
create student(name = c10, age = i4, sex = c1, state = c2)
append to student(name = "philip", age = 17, sex = "m", state = "FL")
range of s is student retrieve (s.all) where s.state = "FL"
print s
range of s is student replace s(age=s.age+1)
print s
Here is a similar set of SQL statements:
create table student(name char(10), age int, sex char(1), state char(2))
insert student (name, age, sex, state) values ("philip", 17, "m", "FL")
select * from student where state = "FL"
update student set age=age+1
Note that every command uses a unique syntax, and that even similar commands like INSERT
and UPDATE
use completely different styles.
Another advantage of QUEL was a built-in system for moving records en-masse into and out of the system. Consider this command:
copy student(name=c0, comma=d1, age=c0, comma=d1, sex=c0, comma=d1, address=c0, nl=d1)
into "/student.txt"
which creates a comma-delimited file of all the records in the student table. The d1 indicates a delimiter, as opposed to a data type. Changing the into
to a from
reverses the process. Similar commands are available in many SQL systems, but almost always as external tools, as opposed to being internal to the SQL language. This makes them unavailable to stored procedures.
With these differences, however, the two languages are largely the same.