Языки запросов QUEL
Эта статья нуждается в дополнительных цитатах для проверки . ( ноябрь 2013 г. ) |
Семья | Язык запросов |
---|---|
Разработано | Майкл Стоунбрейкер |
Впервые появился | 1976 год |
Основные реализации | |
Войдите , ПОСЛЕ ЭТОГО | |
Под влиянием | |
Альфа |
QUEL — это к реляционным базам данных язык запросов , основанный на кортежном реляционном исчислении и имеющий некоторое сходство с SQL . Он был создан в рамках Ingres разработки СУБД в Калифорнийском университете в Беркли на основе ранее предложенного Коддом , но не реализованного подязыка данных ALPHA . QUEL некоторое время использовался в большинстве продуктов, основанных на свободно доступном исходном коде Ingres, особенно в реализации под названием POSTQUEL, поддерживаемой POSTGRES . [ 1 ] Когда в начале 1980-х годов Oracle и DB2 завоевали долю рынка, большинство компаний, поддерживавших тогда QUEL, вместо этого перешли на SQL. [ нужна ссылка ] QUEL по-прежнему доступен как часть СУБД Ingres, хотя в течение многих лет не добавлялось никаких специфичных для QUEL языковых усовершенствований. [ когда? ]
Использование
[ редактировать ]Операторы QUEL всегда определяются переменными-кортежами , которые можно использовать для ограничения запросов или возврата наборов результатов. Рассмотрим этот пример, взятый из одной из первых оригинальных статей Ingres: [ 2 ]
range of E is EMPLOYEE
retrieve into W
(COMP = E.Salary / (E.Age - 18))
where E.Name = "Jones"
Здесь E — это переменная-кортеж, которая находится в пределах отношения EMPLOYEE, и в этом отношении находятся все кортежи, которые удовлетворяют квалификации `E.Name = "Jones"`. Результатом запроса является новое отношение W, имеющее один домен COMP, рассчитанный для каждого подходящего кортежа. Затем можно выполнить дополнительные запросы к отношению W.
Эквивалентный оператор SQL:
create table W as
select (E.salary / (E.age - 18)) as COMP
from employee as E
where E.name = 'Jones'
В этом примере отношение сохраняется в новой таблице W. Это не прямой аналог версии QUEL; отношения в QUEL больше похожи на временные таблицы, встречающиеся в большинстве современных реализаций SQL.
Вот пример простого сеанса, который создает таблицу, вставляет в нее строку, затем извлекает и изменяет данные внутри нее и, наконец, удаляет добавленную строку (при условии, что имя является уникальным полем).
ЧТО | SQL |
---|---|
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"
|
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 from student where name='philip';
|
Еще одной особенностью QUEL была встроенная система массового перемещения записей в систему и из нее. Рассмотрим эту команду:
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 обладает чрезвычайно мощными возможностями агрегирования. Агрегаты могут быть вложенными, а разные агрегаты могут иметь независимые списки и/или ограничения. Например:
retrieve (a=count(y.i by y.d where y.str = "ii*" or y.str = "foo"), b=max(count(y.i by y.d)))
Этот пример иллюстрирует одну из, возможно, менее желательных особенностей QUEL, а именно то, что все сравнения строк потенциально являются совпадениями с образцом. y.str = "ii*"
соответствует всем y.str
значения, начинающиеся с ii
. Напротив, SQL использует =
только для точных совпадений, в то время как like
используется, когда требуется сопоставление с образцом.
См. также
[ редактировать ]- D4 (язык программирования) (реализация D)
- Реляционная алгебра
- Реляционное исчисление
Ссылки
[ редактировать ]- ^ Стоунбрейкер, М ; Роу, Луизиана (май 1986 г.). Дизайн POSTGRES (PDF) . Учеб. 1986 Конференция ACM SIGMOD по управлению данными. Вашингтон, округ Колумбия.
- ^ Стоунбрейкер, Майкл ; Вонг, Юджин; Крепс, Питер; Хелд, Джеральд (1976). «Проектирование и реализация INGRES». Транзакции ACM в системах баз данных . 1 (3): 191. CiteSeerX 10.1.1.109.957 . дои : 10.1145/320473.320476 .
Дальнейшее чтение
[ редактировать ]- CJ Date: Критика языка баз данных SQL . SIGMOD Record 14 (3): 8-54, 1984.