- •4. Реляционные языки запросов
- •Isbl -язык реляционной алгебры
- •Язык sql
- •Типы данных.
- •Создание, удаление или изменение таблиц или индексов с помощью управляющих запросов sql.
- •Инструкция create table
- •Предложение constraint (sql)
- •Инструкция alter table
- •Инструкция drop
- •Drop {table таблица | index индекс on таблица}
- •Инструкция create index
- •Запросы на выборку. Инструкция select
- •Предикаты all, distinct, distinctrow, top (sql)
- •Select [all | distinct | distinctrow | [top n [percent]]]
- •Предложение from
- •Синтаксис
- •Предложение where
- •Синтаксис
- •Предложение order by
- •Синтаксис
- •Группировка записей. Предложение group by
- •Синтаксис
- •Where условие_отбора
- •Предложение having
- •Синтаксис
- •From таблица
- •Запросы с соединением таблиц. Операция inner join
- •On таблица1.Поле2 оператор_сравнения таблица2.Поле2) or
- •Операции left join, right join
- •From таблица1 [ left | right ] join таблица2
- •Объединение результатов нескольких запросов. Операция union
- •Подчиненный запрос.
- •Запросы на изменение. Инструкция select...Into
- •From источник
- •Предложение in
- •Синтаксис
- •Инструкция insert into
- •Инструкция update
- •Инструкция delete
- •Delete [таблица.*]
- •Перекрестные запросы
- •Синтаксис
- •Запросы с параметрами Описание parameters
- •Синтаксис parameters имя тип_данных [, имя тип_данных [, ...]]
- •Статистические функции sql .
- •Функция Avg
- •Функция Count
- •Функции Min, Max
- •Функции StDev, StDevP
- •Функция Sum
- •Функции Var, VarP
- •Var(выражение)
- •VarP(выражение)
- •Quel:язык реляционного исчисления с переменными-кортежами
- •Query-by-example: язык исчисления с переменными – доменами
- •Формы запросов
- •Зарезервированные слова:
- •Конструирование операторов запроса.
- •Выбор записей
- •Запросы к нескольким таблицам
- •Вычисления
- •Операции
- •Группы записей
- •Работа с наборами записей
- •Развитые операторы запросов.
4. Реляционные языки запросов
Isbl -язык реляционной алгебры
ISBL (Information System Base Language) -это язык запросов, разработанный в исследовательском центре фирмыIBMв Питерли (Англия) для использования в экспериментальной системе PRTV (Peterlee Relational Test Vehicle).Он весьма близок к реляционной алгебре,поэтому полнота ISBLможет быть легко доказана. Синтаксическое соответствие этого языка и реляционной алгебры показано в табл. 1.
Таблица 1
Реляционная алгебра |
ISBL |
Объединение |
R+S |
Разность |
R-S |
Пересечение |
R. S |
Селекция |
R:F |
Проецирование |
R%A1,…,An |
Естественное соединение |
R* S |
Rи Sмогут быть любыми реляционными выражениями, a F -булевской формулой.
Если множества имен атрибутов отношений-операндов не пересекаются, R*S – декартово произведение.
Чтобы напечатать значение некоторого выражения, перед ним записывается LIST.Для присваивания значения выражения отношению, имя которого R,служит операторR =Е. Можно отложить связывание отношения с именами, входящими в выражение, до тех пор, пока имя этого отношения не будет использовано слева от знака присваивания. Чтобы отложить вычисление некоторого отношения, поместим перед его именем в выражении оператор N!.
Предположим, что требуется иногда использовать композицию бинарных отношений R(А, В) и S(С, D).Если записать
RCS= R*S :В =С%А, D.
то будет вычислена композиция текущих значений отношений Rи Sи присвоена имени отношения RCS.Отметим, что Rи Sимеют атрибуты с различными именами. Поэтому оператор *(естественное соединение) является здесь декартовым произведением.
Допустим, что мы хотели бы обозначить через RCSне композицию текущих значений R(А, В) и S(С, D),а формулу композиционирования Rи S.Тогда следовало бы записать
RCS = N!R*N!S :В =С%А, D.
Этот оператор ISBLне вызывает вычисления отношений. Он определяетRCSкак обозначение формулы R*S :В =С%А, D.Если мы когда-либо используемRCSв операторе, который требует вычисления этого отношения, например, в операторе
LIST RCS или Т = RCS + U,
то текущие значения Rи Sдля этого момента времени подставляются в формулу RCS, и вычисляется значение RCS.
Оператор отложенного вычисления N!служит двум важным целям. Во-первых, большие реляционные выражения трудно записать корректно с первого раза. Отложенное вычисление позволяет программисту упростить конструирование выражений благодаря назначению временных имен важным их частям. Однако более существенно то, что отложенное вычисление предоставляет элементарную возможность для определения представлений базы данных. Благодаря определению имен отношений как выражений с отложенным вычислением программист может использовать эти имена так, как будто определяемые отношения действительно существуют.
Определения чисто теоретико-множественных операторов - объединения, пересечения и разности - модифицируются в ISBL по отношению к их стандартным определениям в реляционной алгебре с тем, чтобы удовлетворить требованию совместимости отношений по этим операциям. Оператор разности R - S является обычной теоретико-множественной разностью, если R и S имеют одно и то же множество имен атрибутов. Однако в том случае, когда некоторые из атрибутов R и S различны, R - S обозначает множество принадлежащих R кортежей t, таких, что t не совпадает ни с одним кортежем в S по тем атрибутам, которые являются общими для R и S.
Для создания возможности использования нужным образом этих операторов предусматривается специальный вид проекции, обеспечивающий переименование атрибутов. В списке атрибутов, следующих за оператором проекции (%),элемент А ->В означает, что компонент, соответствующий атрибуту Л, включается в проекцию, но переименовывается в В. Например, чтобы получить объединение R(А, В) с S(A, С), запишем
(R%A, B->C)+S.
Результирующее отношение имеет атрибуты Aи С. Мы можем также применить переименование для получения декартова произведения отношений, множества атрибутов которых пересекаются. Заметим, что естественное соединение R (A, B)*S(С, D)является в действительности декартовым произведением, а R(A, B)*S(В, С)-естественным соединением, в которомB-компоненты Rи Sравны. Если требуется получить декартово произведение R(А, В) и S(В, С), мы можем записать
(R%А, В -> D)*S.
Так как левый операнд оператора *имеет атрибутыAи D, a S -атрибуты В и С, результат является декартовым произведением.
Благодаря переименованию атрибутов существует возможность моделирования любой из пяти основных операций реляционной алгебры в ISBL. Таким образом, очевидно, что ISBLявляется полным языком.
Для примеров запросов на ISBLиспользуем базу данных, содержащую следующие отношения:
S(S#,Sname,Status, City) – Поставщики с атрибутами Номер поставщика, Имя, Статус и Адрес;
P(P#,Pname,Color,Weight,City) – Деталь с атрибутами Номер детали, Наименование, Цвет, Вес, Место хранения;
SP(S#,P#,QTY) – Поставки с атрибутами Номер поставщика, Номер детали и Количество.
Определить номера поставщиков, поставляющих деталь с номером Р2:
LIST SP:P# = ’P2’ % S#
Определить номера поставщиков, поставляющих по крайней мере одну деталь красного цвета:
LIST P:Color = ‘Красный’ * SP % S#
Определить города, из которых поставлялись детали поставщиком с именем База1:
LIST S:Sname = ‘База1’ * SP % P# * P % City
Проецирование на P# в данном случае обязательно потому, что в отношенияхSиPимеется одноименный атрибутCity.Это используется в следующем запросе.
Определить имена поставщиков, поставляющих детали, хранящиеся в их городе:
LIST S * SP * P % Sname
Определить номера и названия деталей весом более 5 кг, поставляемых поставщиком с именем База1:
LIST S:Sname = ‘База1’ * SP % P# * P:Weight > 5 % P#,Pname
Определить номера поставщиков,поставляющих все детали:
P1 = N! P % P# - множество номеров деталей;
S1 = N! S % S# - множество номеров поставщиков;
SP1 = N! SP % S#,P# - множество пар поставщик – поставляемая деталь;
A = N! S1 * N! P1 – N! SP1 - множество пар поставщик – деталь, не поставляемая этим поставщиком;
LIST S1 – (A % S#)