Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Белобжеский_Лекции_по_ББД.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5.5 Mб
Скачать

Пересечение наборов записей (intersect)

Пересечение двух наборов записей осуществляется с помощью оператора intersect (пересечение), возвращающего таблицу, записи в которой содержатся одновременно в двух наборах:

Запрос1 INTERSECT Запрос2;

При этом в результатной таблице остаются только отличающие­ся записи. Чтобы сохранить в ней повторяющиеся записи, после оператора intersect следует написать ключевое слово all.

Как и в операторе union, в intersect можно использовать клю­чевое слово corresponding. В этом случае исходные наборы данных не обязательно должны быть совместимыми для объеди­нения, но соответствующие столбцы должны иметь одинаковые тип и длину.

Как известно, различные технические системы могут содержать одинаковые компоненты. Если требуется получить список ком­понентов, входящих одновременно в две различные системы, то можно воспользоваться таким запросом:

SELECT * FROM Система1

INTERSECT

SELECT * FROM Система2;

Здесь предполагается, что таблицы Система1 и Система2 имеют одинаковые структуры. Если же структуры этих таблиц в чем-то различаются, но столбцы ID_компонента и Тип_компонента имеют одинаковые тип и длину, то можно применить следующий запрос:

SELECT * FROM Система1

Intersect corresponding (id_компонента, Тип_компонента)

SELECT * FROM Система2;

Если в операторе intersect используется ключевое слово corresponding, то после него в круглых скобках можно указать имена столбцов, значения которых должны проверяться на ра­венство при выполнении операции пересечения.

Вычитание наборов записей (except)

Для получения записей, содержащихся в одном наборе и отсут­ствующих в другом, служит оператор except (за исключением):

Запрос1 ЕХCЕРТ Запрос2;

С помощью этого оператора из первого набора удаляются запи­си, входящие во второй набор. Так же, как и в операторах union и intersect, в операторе except можно использовать ключевое слово CORRESPONDING.

Например, таблицы Клиенты и Контакты имеют однотипные столбцы Имя и Адрес. Чтобы узнать, все ли клиенты содержатся в списке контактов, можно воспользоваться следующим запросом:

SELECT * FROM Клиенты

EXCEPT CORRESPONDING (Имя, Адрес)

SELECT * FROM Контакты;

Возвращенные этим запросом записи будут содержать сведения о клиентах, которых нет в таблице контакты. Если же запрос вернет пустую таблицу, то это будет означать, что все клиенты представлены в таблице контакты.

Операции соединения

Операции соединения наборов записей возвращают таблицы, записи в которых получаются путем некоторой комбинации записей соединяемых таблиц. Для этого используется оператор join (соединить).

Существуют несколько разновидностей соединения, которым соответствуют определенные ключевые слова, добавляемые к слову join. Так, например, декартово произведение (см. разд. 5.2.1) является операцией перекрестного соединения. В SQL-выражении для' обозначения этой операции используется оператор cross join. Впрочем, декартово произведение можно получить и без использования этих ключевых слов. В основе любого соединения наборов записей лежит операция их декартового произведения.

Довольно часто операции, основанные на операторе join, на­зывают объединением таблиц (наборов записей) Однако тер­мин "объединение" лучше подходит для union — оператора теоретико-множественного объединения записей, при котором записи исходных наборов не комбинируются (не соединяются) друг с другом, а просто к одному набору записей добавляется другой набор. В случае оператора join в результатную таблицу попадают записи, полученные из разных наборов путем присое­динения одной из них к другой. Поэтому операции, основанные на операторе join, будем называть операциями соединения таблиц (наборов записей).