Эта статья требует дополнительных ссылок для проверки . ( ноябрь 2013 г. ) ( Узнайте, как и когда удалить это сообщение-шаблон ) |
Семья | Язык запроса |
---|---|
Разработано | Майкл Стоунбрейкер |
Впервые появился | 1976 |
Основные реализации | |
Энгр , ПОСТКВЕЛ | |
Под влиянием | |
Альфа |
QUEL - это язык запросов к реляционным базам данных , основанный на реляционном исчислении кортежей , имеющий некоторое сходство с SQL . Он был создан в рамках проекта СУБД Ingres в Калифорнийском университете в Беркли на основе ранее предложенного Коддом, но не реализованного подязыка данных ALPHA . В течение короткого времени QUEL использовался в большинстве продуктов, основанных на свободно доступном исходном коде Ingres, особенно в реализации под названием POSTQUEL, поддерживаемой POSTGRES . [1] Как Oracle и DB2 завоевала долю рынка в начале 1980-х, большинство компаний, которые тогда поддерживали QUEL, перешли на SQL. [ необходима цитата ] QUEL по-прежнему доступен как часть СУБД Ingres, хотя в течение многих лет не было добавлено никаких специальных языковых улучшений для QUEL. [ когда? ]
Использование [ править ]
Операторы QUEL всегда определяются кортежными переменными , которые можно использовать для ограничения запросов или возврата наборов результатов. Рассмотрим этот пример, взятый из одной из первых оригинальных статей Энгра: [2]
Пример 1.1. Вычислите зарплату, разделенную на возраст 18 для сотрудника Джонса.
Диапазон из Й является СЛУЖАЩИМ получить в W ( COMP = Е . Зарплата / ( E . Возраст - 18 )) где E . Name = "Джонс"Здесь E - кортежная переменная, которая охватывает отношение EMPLOYEE, и в этом отношении обнаруживаются все кортежи, удовлетворяющие квалификации E.Name = «Jones». Результатом запроса является новое отношение W, которое имеет один домен COMP, вычисленный для каждого подходящего кортежа.
Эквивалентный оператор SQL:
создать таблицу ж , как выберите ( е . зарплата / ( е . возраст - 18 )) как комп от работника как е , где е . name = 'Джонс'
Вот пример простого сеанса, который создает таблицу, вставляет в нее строку, затем извлекает и изменяет данные внутри нее и, наконец, удаляет добавленную строку (при условии, что это имя является уникальным полем).
QUEL | SQL |
---|---|
создать учащегося ( имя = c10 , возраст = i4 , пол = c1 , состояние = c2 )диапазон от й является студент Append к с ( имя = «Филип» , возраст = 17 , пол = «м» , состояние = «FL» )получить ( s . all ), где s . state = "FL"заменить s ( age = s . age + 1 )получить ( s . all )удалить s, где s . name = "philip" | создать таблицу student ( имя char ( 10 ), age int , sex char ( 1 ), state char ( 2 ));вставить в студент ( имя , возраст , пол , состояние ) значения ( 'Филипа' , 17 , 'м' , 'FL' );выберите * от студента, где состояние = 'FL' ;обновить набор учеников age = age + 1 ; выберите * от студента ;удалить из студента, где name = 'philip' ; |
Еще одной особенностью QUEL была встроенная система для массового перемещения записей в систему и из нее. Рассмотрим эту команду:
скопируйте ученика ( имя = c0, запятая = d1, возраст = c0, запятая = d1, пол = c0, запятая = d1, адрес = c0, nl = d1 ) в "/student.txt"
который создает файл с разделителями-запятыми, содержащий все записи в таблице студентов. D1 указывает на разделитель, а не на тип данных. Изменение на into
a from
отменяет процесс. Подобные команды доступны во многих системах SQL, но обычно как внешние инструменты, а не внутренние по отношению к языку SQL. Это делает их недоступными для хранимых процедур.
QUEL обладает чрезвычайно мощными возможностями агрегирования. Агрегаты могут быть вложенными, и разные агрегаты могут иметь независимые дополнительные списки и / или ограничительные предложения. Например:
получить ( a = count ( y . i by y . d, где y . str = "ii *" или y . str = "foo" ), b = max ( count ( y . i by y . d )))
Этот пример иллюстрирует одну из, возможно, менее желательных причуд QUEL, а именно то, что все сравнения строк потенциально являются сопоставлением с образцом. y.str = "ii*"
соответствует всем y.str
значениям, начинающимся с ii
. Напротив, SQL используется =
только для точных совпадений, тогда like
как используется, когда требуется сопоставление с образцом.
См. Также [ править ]
- D (спецификация языка данных)
- D4 (язык программирования) (реализация D)
- Реляционная алгебра
- Реляционное исчисление
Ссылки [ править ]
- ^ Stonebraker, M ; Роу, штат Луизиана (май 1986 г.). Дизайн ПОСТГРЭС (PDF) . Proc. 1986 Конференция ACM SIGMOD по управлению данными. Вашингтон, округ Колумбия.
- ^ Stonebraker, Майкл ; Вонг, Юджин; Крепс, Питер; Хелд, Джеральд (1976). «Дизайн и реализация ИНГРЭС». ACM-транзакции в системах баз данных . 1 (3): 191. CiteSeerX 10.1.1.109.957 . DOI : 10.1145 / 320473.320476 .
Дальнейшее чтение [ править ]
- CJ Date: Критика языка баз данных SQL . Запись SIGMOD 14 (3): 8-54, 1984.