Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
базы данных.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
214 Кб
Скачать
☆

9 Реляционное исчисление доменов.

Использует переменные, значения которых берутся из доменов отношений. Если P(d1, d2, …., dn) – предикат, то множество переменных, для которых значение предиката является истинным, записывается – {d1, d2, d3| P(d1, d2, d3)}.

В реляционном исчислении доменов проверяется условие принадлежности заданного значения указанному отношению.

Например: необходимо отыскать типы объектов недвижимости, имеющих число комнат, равных трём.

{Тип | $ Тип (Объекты_недв (Тип, Чило_комнат) ^ Число_комнат =3)}

Определить типы объектов недвижимости, которые осматривались вчера:

{Тип | $ Тип (Объекты_недв (№объекта, Тип) ^ Осмотр (№объекта, Дата) ^ Объект_недв. №объекта = Осмотр. №объекта ^ Дата = ‘11/03/13’)}

Язык реляционного исчисления является непроцедурным языком и теоритической основой для разработки более современных языков БД.

Языки SEQUEL, SQUARE, SQL основаны на реляционном исчислении кортежей.

Язык QBE (Query-By-Example) основан на реляционном исчислении доменов.

В начало

10 Реляционное исчисление кортежей.

В реляционном исчислении кортежей задача состоит в отыскании кортежа, для которого значение предиката является истинным. Для построения запроса необходимо определить переменную, областью определения которой является отношение. Затем задается список атрибутов выходной последовательности и предикат.

RANGE of A IS Объект_недв

{A | A.Число_комнат = 3}

 

RANGE A IS Объект_недв

RANGE B IS Осмотр

{A | A. №объекта, A.Адрес, B.№арендатора, B.№ сотруд | A.№объекта=B. №объекта ^ Дата = ‘11/03/13’}

Для указания количества экземпляров, к которым может применяться предикат можно использовать два типа операторов: квантор существования и квантор общности.

Квантор существования ($) используется в том случае, если заданный предикат должен быть истинным хотя бы для одного экземпляра отношения.

Квантор общности (") используется в предикатах, которые относятся ко всем экземплярам отношения.

 

В начало

11 Построение sql- запросов.

SELECT */{DISTINCT/ALL]<список полей>.,…}

FROM {<имя таблицы>/[<алиас>]}.,...

WHERE [<предикат>]

[GROUP BY {<имя столбца>/<целое>}, ..]

HAVING[<предикат>]

ORDER BY [{<имя столбца>/<целое>}.,..]

 

Здесь «список полей» - выражение, которое задает результирующее значение. Оно может состоять из имен столбцов.

«Имя таблицы» - задается имя или синоним таблицы или представления.

«Алиас» - временный синоним имени таблицы, которое определяется и используется только в одной команде.

«Предикат» - условие, которое может задаваться для каждого столбца либо для комбинации столбцов.

«Целое» - число, которое определяет значение из списка выбираемых полей, указывая его расположение в этом списке.

Аргумент DISTINCT позволяет исключить дублирования значений из результата.

ALL принимает значения по умолчанию и оказывает противоположное действие аргументу DISTINCT.

Предложение WHERE позволяет определить условие. В случае его истинности строка таблицы будет заноситься в результат.

Предложение GROUP BY позволяет группировать столбцы в таблице.

Предложение ORDER BY позволяет упорядочить множество столбцов один внутри другого.

В примерах будет использоваться реляционная БД, состоящая  из трех таблиц:

Транспорт, Водители, Поездки.

Структура таблиц приведена в лабораторной работе №2.

Полностью вывести таблицу Водители:

SELECT * FROM Водители;

Отыскать номера машин, требующих ремонта:

SELECT Номер FROM Транспорт

WHERE Состояние = 'ремонт';

Аргумент DISTINCT позволяет исключать дублирование предикатов. Например, необходимо узнать, какие водители были в поездках:

SELECT DISTINCT Личный_номер_вод FROM Поездки;

ALL принимается по умолчанию и оказывает противоположное действие.

Предложение WHERE позволяет определить условие, в случае его подлинности строка таблицы будет заносится в результат.

Получить сведения обо всех машинах, которые либо имеют грузоподъемность равную 5т, либо имеют Пробег больше чем 200.

SELECT * FROM Транспорт

WHERE Грузоподъемность = 5 OR Пробег > 200;

Иногда вместо логического выражения предпочтительнее задавать принадлежность множеству.

SELECT * FROM Транспорт

WHERE Модель IN (‘КаМаз’, ‘МАЗ’)

Можно в предложении WHERE задавать границы, в которых лежит значение:

SELECT * FROM Поездки

WHERE Километраж BETWEEN 10 AND 100;

Можно задавать условие, используя оператор LIKE:

SELECT * FROM Водители

WHERE Фамилия LIKE ‘К*’;

*  - любое количество символов, _ - один символ.

Для нахождения полей с пропущенными значениями можно воспользоваться оператором IS NULL:

SELECT * FROM Транспорт

WHERE Состояние IS NULL;

В начало