Языки запросов QUEL - QUEL query languages

QUEL
СемьяЯзык запроса
РазработаноМайкл Стоунбрейкер
Впервые появился1976; 44 года назад (1976)
Основной реализации
Ingres, ПОСТКВЕЛ
Под влиянием
Альфа

QUEL это реляционная база данных язык запросов, на основе кортежное реляционное исчисление, с некоторым сходством с SQL. Он был создан как часть Ingres СУБД усилия в Калифорнийский университет в Беркли, на основе Кодд ранее предлагалось, но не реализовано Подъязык данных АЛЬФА. В течение короткого времени QUEL использовался в большинстве продуктов на основе свободно доступного исходного кода Ingres, особенно в реализации под названием POSTQUEL, поддерживаемой ПОСТГРЭС.[1] В качестве Oracle и DB2 завоевала долю рынка в начале 1980-х, большинство компаний, которые тогда поддерживали QUEL, перешли на SQL.[нужна цитата ] QUEL по-прежнему доступен как часть СУБД Ingres, хотя в течение многих лет не было добавлено никаких специальных языковых улучшений для QUEL.[когда? ]

использование

Операторы QUEL всегда определяются переменные кортежа, который можно использовать для ограничения запросов или возврата наборов результатов. Рассмотрим этот пример, взятый из одной из первых оригинальных статей Ingres:[2]

Пример 1.1. Вычислите зарплату, разделенную на возраст 18 для сотрудника Джонса.

классифицировать из E является НАЕМНЫЙ РАБОЧИЙзабрать в W(КОМП = E.Зарплата / (E.Возраст - 18))куда E.Имя = "Джонс"

Здесь E - кортежная переменная, которая охватывает отношение EMPLOYEE, и в этом отношении обнаруживаются все кортежи, которые удовлетворяют квалификации E.Name = «Jones». Результатом запроса является новое отношение W, которое имеет один домен COMP, вычисленный для каждого подходящего кортежа.

Эквивалентный оператор SQL:

Создайте стол ш в качествеВыбрать (е.зарплата / (е.возраст - 18)) в качестве компиз наемный рабочий в качестве екуда е.имя = 'Джонс'

Вот пример простого сеанса, который создает таблицу, вставляет в нее строку, затем извлекает и изменяет данные внутри нее и, наконец, удаляет добавленную строку (при условии, что имя является уникальным полем).

QUELSQL
Создайте ученик(имя = c10, возраст = i4, секс = c1, государственный = c2)классифицировать из s является ученикдобавить к s (имя = "Филип", возраст = 17, секс = "м", государственный = "FL")забрать (s.все) куда s.государственный = "FL"заменять s (возраст=s.возраст+1)забрать (s.все)Удалить s куда s.имя="Филип"
Создайте стол ученик(имя char(10), возраст int, секс char(1), государственный char(2));вставлять в ученик (имя, возраст, секс, государственный) значения ('Филип', 17, 'м', 'FL');Выбрать * из ученик куда государственный = 'FL';Обновить ученик набор возраст=возраст+1;Выбрать * из ученик;Удалить из ученик куда имя='Филип';


Еще одна особенность QUEL - это встроенная система для массового перемещения записей в систему и из нее. Рассмотрим эту команду:

копировать ученик(имя = c0, запятая = d1, возраст = c0, запятая = d1, пол = c0, запятая = d1, адрес = c0, nl = d1)в "/student.txt"

который создает файл с разделителями-запятыми, содержащий все записи в таблице студентов. D1 указывает на разделитель, а не на тип данных. Изменение в к из обращает процесс вспять. Подобные команды доступны во многих системах SQL, но обычно как внешние инструменты, а не внутренние по отношению к языку SQL. Это делает их недоступными для хранимых процедур.

QUEL обладает чрезвычайно мощными возможностями агрегирования. Агрегаты могут быть вложенными, и разные агрегаты могут иметь независимые дополнительные списки и / или ограничительные предложения. Например:

забрать (а=считать(у.я к у.d куда у.ул = "ii *" или же у.ул = "фу"), б=Максимум(считать(у.я к у.d)))

Этот пример иллюстрирует одну из, возможно, менее желательных причуд QUEL, а именно то, что все сравнения строк потенциально являются сопоставлением с образцом. y.str = "ii *" соответствует всем y.str значения, начинающиеся с ii. Напротив, SQL использует = только для точных совпадений, а подобно используется, когда требуется сопоставление с образцом.

Смотрите также

Рекомендации

  1. ^ Стоунбрейкер, М.; Роу, штат Луизиана (май 1986 г.). Дизайн ПОСТГРЭС (PDF). Proc. 1986 г. Конференция ACM SIGMOD по управлению данными. Вашингтон, округ Колумбия.
  2. ^ Стоунбрейкер, Майкл; Вонг, Юджин; Крепс, Питер; Хелд, Джеральд (1976). «Дизайн и реализация ИНГРЭС». Транзакции ACM в системах баз данных. 1 (3): 191. CiteSeerX  10.1.1.109.957. Дои:10.1145/320473.320476.

дальнейшее чтение