Языки запросов QUEL - QUEL query languages
Эта статья нужны дополнительные цитаты для проверка.Ноябрь 2013) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Семья | Язык запроса |
---|---|
Разработано | Майкл Стоунбрейкер |
Впервые появился | 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)) в качестве компиз наемный рабочий в качестве екуда е.имя = 'Джонс'
Вот пример простого сеанса, который создает таблицу, вставляет в нее строку, затем извлекает и изменяет данные внутри нее и, наконец, удаляет добавленную строку (при условии, что имя является уникальным полем).
QUEL | SQL |
---|---|
Создайте ученик(имя = 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 использует =
только для точных совпадений, а подобно
используется, когда требуется сопоставление с образцом.
Смотрите также
- D (спецификация языка данных)
- D4 (язык программирования) (реализация D)
- Реляционная алгебра
- Реляционное исчисление
Рекомендации
- ^ Стоунбрейкер, М.; Роу, штат Луизиана (май 1986 г.). Дизайн ПОСТГРЭС (PDF). Proc. 1986 г. Конференция ACM SIGMOD по управлению данными. Вашингтон, округ Колумбия.
- ^ Стоунбрейкер, Майкл; Вонг, Юджин; Крепс, Питер; Хелд, Джеральд (1976). «Дизайн и реализация ИНГРЭС». Транзакции ACM в системах баз данных. 1 (3): 191. CiteSeerX 10.1.1.109.957. Дои:10.1145/320473.320476.
дальнейшее чтение
- C. J. Дата: Критика языка баз данных SQL. Запись SIGMOD 14 (3): 8-54, 1984.