Реляционное исчисление на кортежах
В реляционном исчислении на кортежах областями определения переменных являются таблицы базы данных, т.е. допустимым значением каждой переменной является кортеж – строка некоторой таблицы.
Пример реляционной модели “Поставка деталей” (подчеркнуты ключевые поля):
ДЕТАЛЬ (ДИмя, ДНомер, ДМодель, ДЦена)
ПОСТАВЩИК (ПИмя, ПНомер, Город)
КЛИЕНТ (КИмя, КНомер, Город)
ПОСТАВКА (ДНомер, ПНомер, КНомер, Дата, Колво)
Операция GET
Строки выбираются во временную таблицу, назовем ее W.
Найти все названия поставщиков и города, в которых они находятся.
GET W(ПОСТАВЩИК.ПНомер,
ПОСТАВЩИК.Город)
proj
Формирование условий
В условиях используются операции сравнения =,!=, >,<,>=,<=.
Для формирования сложных условий используются логические связки AND, OR, NOT.
Строки-константы задаются в кавычках.
Найти все детали модели МС550
GET W(Деталь) : ДМодель=”МС550”
sel
Выборка из нескольких таблиц
Напечатать, какие детали и когда поставлялись – названия деталей и даты поставок.
GET W(Деталь.ДИмя, Поставка.Дата): Деталь.ДНомер=Поставка.ДНомер
join
Переменные и квантор
Если таблица используется только в условиях запроса, следует объявить переменную на основе этой таблицы.
Напечатать, какие детали и куда поставлялись – названия деталей и города покупателей.
RANGE Поставка X
GET W(Деталь.ДИмя, Клиент.Город): X (Деталь.ДНомер=Х.ДНомер AND Клиент.КНомер=X.КНомер)
join
Переменные и квантор
Напечатать имена поставщиков, которые не поставляют детали клиенту с номером 123
RANGE Поставка X
GET W(Поставщик.ПИмя): X (Поставщик.ПНомер!=Х.ПНомер OR X.КНомер!=123)
или
GET W(Поставщик.ПИмя): !X (Поставщик.Пномер=Х.ПНомер AND X.КНомер=123)
difference
Переменные и кванторы и
Напечатать имена поставщиков, которые поставляют детали всем клиентам.
RANGE Поставка X
RANGE Клиент Y
GET W(Поставщик.ПИмя): YX (Поставщик.ПНомер=Х.ПНомер AND Y.КНомер=X.КНомер)
division
Запрос из нескольких шагов
Напечатать имена поставщиков, которые поставляют детали всем клиентам из Москвы.
GET W(Клиент.КНомер): Клиент.Город=«Москва»
RANGE Поставка X
RANGE W Y
GET W2(Поставщик.ПИмя):
YX (Поставщик.ПНомер=Х.ПНомер AND Y.КНомер=X.КНомер)
division
Еще примеры
Напечатать имена поставщиков, которые поставляют детали клиентам из Москвы и из Казани.
RANGE Поставка X1
RANGE Клиент Y1
RANGE Поставка X2
RANGE Клиент Y2
GET W(Поставщик.ПИмя): X1 X2 Y1 Y2
(Поставщик.ПНомер=Х1.ПНомер AND Y1.КНомер=X1.КНомер AND Поставщик.ПНомер=Х2.ПНомер AND Y2.КНомер=X2.КНомер AND Y1.Город=«Москва» AND Y2.Город=«Казань»)
intersection
Еще примеры
Напечатать имена поставщиков, которые поставляют детали клиентам из Москвы или из Казани.
RANGE Поставка X1
RANGE Клиент Y1
GET W(Поставщик.ПИмя): X1 Y1
(Поставщик.ПНомер=Х1.ПНомер AND Y1.КНомер=X1.КНомер AND (Y1.Город=«Москва» OR Y1.Город=«Казань») )
Еще примеры
Напечатать имена поставщиков, которые сами находятся в Москве или поставляют детали клиентам из Москвы.
RANGE Поставка X1
RANGE Клиент Y1
GET W(Поставщик.ПИмя):
Поставщик.Город= «Москва» OR
X1 Y1
(Поставщик.ПНомер=Х1.ПНомер AND Y1.КНомер=X1.КНомер AND Y1.Город=«Москва» )
union
Агрегатные функции
COUNT, MIN, MAX, TOTAL, AVERAGE
Подсчитать количество поставщиков из Москвы
GET W( COUNT(Поставщик.ПНомер)) : Поставщик.Город=«Москва»
Сортировка и задание количества строк
Сортировка: UP или DOWN
Напечатать названия 5 самых дорогих деталей:
GET W(5)(Деталь.ДИмя) : DOWN Деталь.Цена
Изменение данных
Заменить город на Москву у поставщика с номером 456
HOLD W(Поставщик): Поставщик.ПНомер=456
W.Город = «Москва»
UPDATE W
Добавление данных
Добавить поставщика с номером 987, названием «Альфа» и городом «Москва»
W.ПНомер=987
W.ПИмя= «Альфа»
W.Город = «Москва»
PUT W(Поставщик)
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.