- •Множества и операции над множествами.
- •Основная операция над множествами. Мощность множества.
- •Кортежи. Декартово произведение.
- •Транзитивные замыкания отношений.
- •Типы данных в бд
- •Декартово произведение множеств
- •Объединение новой записи (union)
- •Пересечение наборов записей (intersect)
- •Условное соединение
Объединение новой записи (union)
Нередко требуется объединить записи двух или более таблиц с похожими структурами в одну таблицу, иначе говоря к набору записей возвращаемому одним запросом требуется добавить записи возвращаемыми другим запросом. Синтаксис: запрос1 union запрос2;
При этом в результирующих таблицах остаются только отличающиеся записи. Чтобы сохранить записи, после оператора union следует добавить ключевое слово all.
Пример: даны таблицы клиенты и контакты. Пусть они имеют однотипные столбцы Имя и Адрес. Чтобы заполнить данные о клиентах и таблицу Контакты, необходимо выполнить следующий запрос:
Select Имя, Адрес from клиенты
Union
Select Имя, Адрес, from контакты;
Возможно, что в объединяемых таблицах Клиент и Контакты имеются записи с одинаковыми парами значениями в столбцах Имя и Адрес. Однако в результирующей таблице запроса повторений не будет, как если использовать оператор union distinct.
Оператор union можно применять только к таблицам, удовлетворяющим требованиям
Количество столбцов объединяемых таблиц должны быть равны
Данные в соответствующих столбцах объединяемых таблиц должны иметь совместимые типы. Например, символьный (строковый) типы char и varchar совместимы, а числовой строковый типы – нет
Пересечение наборов записей (intersect)
Пересечение двух наборов записей выполняются с помощью указанного оператора, возвращающего таблицу, записи в которой одновременно содержится в обеих таблицах.
Синтаксис: запрос1 intersect запрос2;
В результирующей таблице остаются только отличающиеся записи.
Примечание! В операторах union и intersect можно использовать corresponding. В этих случаях исходные наборы данных в таблицах могут быть несовместимы, но соответствующие столбцы должны иметь одинаковый тип и длину.
Пример: система 1 и система 2. Требуется получить список компонентов Входящие одновременно в эти обе таблицы.
Select *from Система1
Intersect
Select *from система2;
Вычитание наборов записей (except)
Синтаксис: запрос1 except запрос2;
С помощью этого оператора из первой таблицы удаляются записи входящих во вторую таблицу. Здесь также можно использовать
Пример: таблицы Клиенты и Контакты
Необходимо узнать все ли клиенты содержаться в списке контактов. Указанные таблицы имеют однотипные столбцы имя и адрес
Select* from клиенты
Except*from контакты;
ОПЕРАЦИИ СОЕДИНЕНИЯ
(Join)
Естественные соединения
(natural join)
Пусть в БД имеются следующие 2 таблицы:
Продажи (ID_товара, количество, ID_клиента);
Клиенты (ID_клиента, Имя, Телефон)
Декартово произведение этих таблиц получается с помощью следующего запроса:
select *from продажи, Клиенты;
Полученное в декартовом произведении нас могут интересовать не все записи, а только те, в которых идентичны столбцы имеют одинаковые значения (продажи. ID_клиента=Контакты. ID_клиента). Кроме того в результирующей таблице нам не нужны оба идентичных столбца, достаточно лишь одного из них.
Такая таблица и будет естественным соединением указанных таблиц. Она получается с помощью следующего запроса: select Продажи.*, Клиенты.Имя, Клиенты.Телефон
From Продажи, клиенты
Where Продажи.ID_клиента=Контакты.ID_клиенты;
Эквивалентный запрос с использованием оператора natural join
Select Продажи.*, Клиенты.Имя, Клиенты.Телефон
From Продажи Natural join клиенты;
Примечание! В Access оператор natural join не поддерживается, вместо него используется используется оператор inner join (внутреннее соединение), on (при), за которым следует условие отбора.