Jump to content

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

(Перенаправлено с PostQUEL )
ЧТО
Семья Язык запросов
Разработано Майкл Стоунбрейкер
Впервые появился 1976 год ; 48 лет назад ( 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 используется, когда требуется сопоставление с образцом.

См. также

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

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

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 60251bb03251ef6932460b1bedf19c0a__1722729900
URL1:https://arc.ask3.ru/arc/aa/60/0a/60251bb03251ef6932460b1bedf19c0a.html
Заголовок, (Title) документа по адресу, URL1:
QUEL query languages - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)