Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
31
Добавлен:
02.05.2014
Размер:
6.12 Кб
Скачать

8.4. Общая характеристика языка QUEL. Язык программирования EQUEL Сервер Информационных Технологий

содержит море(!) аналитической информации Сервер поддерживается

Центром Информационных Технологий

(095) 932-9212, 932-9213, 939-0783

E-mail: info@citforum.ru

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. Дальнейшую схему мы уже обсуждали. Предыдущая глава || Оглавление || Следующая глава Copyright © CIT

Соседние файлы в папке INF-1