8.4. Общая характеристика языка QUEL. Язык программирования EQUEL
Манипуляционная часть языка QUEL
является чистой реализацией
реляционного исчисления кортежей.
Это означает, что в операторах
указываются условия, накладываемые
на кортежи, с которыми необходимо
произвести соответствующие
действия.
Основной набор операторов
манипулирования данными включает
операторы RETRIVE (выбрать), APPEND
(добавить), REPLACE (заменить) и DELETE
(удалить). Перед выполнением любого
из этих операторов необходимо
определить используемые в них
переменные кортежей, связав их с
соответствующими отношениями
путем выполнения оператора RANGE:
RANGE OF variable-list IS relation-name
Продемонстрируем основные
свойства операторов QUEL на примерах.
Будем использовать базу данных
СТУДЕНТЫ и ГРУППЫ:
RANGE OF S IS СТУДЕНТЫ
RANGE OF G IS ГРУППЫ
Пример 1. Выбрать имена студентов,
куратором которых является Иванов.
RETRIEVE (S.СТУД_ИМЯ)
WHERE (S.ГРУП_НОМЕР = G.ГРУП_НОМЕР AND
G.КУРАТ_ИМЯ = "ИВАНОВ")
Пример 2. Занести в отношение
НЕУСПЕВАЮЩИЕ номера студенческих
билетов и имена неуспевающих
студентов.
RETRIEVE INTO НЕУСПЕВАЮЩИЕ (S.СТУД_НОМЕР, S.СТУД_ИМЯ)
WHERE (S.СТУД_УСП = "NO")
Пример 3. Вывести фамилии
студентов, получающих стипендию
ниже средней.
RETRIEVE (S.СТУД_ИМЯ)
WHERE (S.СТУД_СТИП < AVG (S.СТУД_СТИП))
Как и в SQL, поддерживаются
агрегатные функции COUNT, SUM, MAX, MIN и AVG.
Пример 4. Включить в группу 310
студента Петрова.
APPEND TO СТУДЕНТЫ (СТУД_ИМЯ = "ПЕТРОВ", ....)
Пример 5. Увеличить стипендию в 1,5
раза всем успевающим студентам.
REPLACE S(СТУД_СТИП BY СТУД_СТИП * 1,5)
WHERE (S.CТУД_УСП = "YES")
Пример 6. Удалить из списка групп
все группы, в которых не учится ни
один студент.
DELETE G
WHERE (G.ГРУП_РАЗМЕР = 0)
Кроме операторов манипулирования
данными, язык QUEL содержит операторы
для создания и уничтожения
отношений:
CREATE имя_отношения (имя_атрибута IS тип_атрибута, ...)
DESTROY имя_отношения
а также два оператора изменения
структур хранимых данных:
MODIFY имя_отношения TO структура_памяти
ON (ключ1, ключ2, ...) и
INDEX ON имя_отношения IS имя_индекса (ключ1, ключ2, ...)
Оператор MODIFY изменяет структуру
хранимого отношения в соответствии
с параметром структура_памяти и
заданным набором ключевых
атрибутов. Оператор INDEX создает
отдельную индексную структуру для
заданных полей данного отношения.
Созданные индексы используются
системой для оптимизации
выполнения операторов
манипулирования данными.
Согласованность содержимого
отношений и индексов
поддерживается системой
автоматически.
Язык QUEL содержит также операторы
определения ограничений
целостности, представлений и
ограничений доступа. На них мы
остановимся немного позже.
В том виде, в каком мы его кратко
описали, язык QUEL предназначен для
интерактивной работы с базами
данных Ingres. Для программирования
прикладных информационных систем,
которые должны взаимодействовать с
базами данных, был разработан язык
программирования EQUEL, являющийся,
по существу, расширением языка
программирования Си путем
встраивания в него операторов
языка QUEL. Язык EQUEL определяется
следующим образом:
- Любой оператор языка Си
является оператором языка EQUEL.
- Любой оператор языка QUEL,
которому предшествуют два
знака '#', является допустимым
оператором языка EQUEL.
- Переменные Си-программы могут
использоваться в операторах
QUEL, заменяя имена отношений,
имена атрибутов, элементы
списка выборки или константы.
Те переменные Си-программы,
которые используются таким
образом, должны при своем
объявлении быть помечены
двойным знаком '#'.
- Оператор RETRIEVE (без INTO)
сопровождается составным
оператором языка Си, который
выполняется по одному разу для
каждого выбранного кортежа.
Пример программы на языке EQUEL,
выдающей номер группы по имени
студента:
main()
{
## char stud_name[20];
## int group_number;
while (READ(stud_name_)
{
## RANGE OF S IS STUDENTS
## RETRIEVE (group_number = G.GROUP.NUMBER)
## WHERE (S.STUD_NAME = stud_name)
{
PRINT ("The group number of 'stud_name' is 'group_number');
}
}
}
Программа на языке EQUEL
обрабатывается специальным
препроцессором, который превращает
ее в обычную Си-программу,
содержащую вызовы Ingres с передачей в
качестве параметров текстов
операторов языка QUEL. Дальнейшую
схему мы уже обсуждали.
Предыдущая
глава || Оглавление
|| Следующая глава
|