- •1.2. Объединение наборов записей (union)
- •1.3. Пересечение наборов записей (intersect)
- •Intersect corresponding( id_компонента, Тип_компонента)
- •1.4. Вычитание наборов записей (except)
- •2. Операции соединения
- •2.1. Естественное соединение (natural join)
- •2.2. Условное соединение (join... On)
- •2.3. Соединение по именам столбцов (join... Using)
- •2.4. Внешние соединения
- •Задание для самостоятельной работы:
2.1. Естественное соединение (natural join)
Рассмотрим суть операции естественного соединения на типичном примере. Пусть в базе данных имеются следующие две таблицы:
Продажи (ID_товара, Количество, ID_клиента);
Клиенты (ID_клиента, Имя, Телефон).
Общим столбцом для этих таблиц является ID_клиента.
Декартово произведение этих таблиц получается с помощью следующего запроса:
SELECT * FROM Продажи, Клиенты;
На рис. показаны примеры таблиц Продажи и Клиенты, а также результат их декартового произведения.
О
чевидно,
в полученном декартовом произведении
нас могут интересовать не все записи,
а только те, в которых идентичные столбцы
имеют одинаковые значения (Продажи.ID_клиента=
Клиенты.ID_клиента).
Кроме того, в результатной таблице нам не нужны оба идентичных столбца, достаточно лишь одного из них. Такая таблица и будет естественным соединением таблиц продажи и клиенты (рис. ниже).
Она получается с помощью следующего запроса:
SELECT Продажи.*, Клиенты.Имя, Клиенты.Телефон
FROM Продажи, Клиенты
WHERE Продажи. ID_клиента = Клиенты.ID_клиента;
Данный запрос можно переписать, используя псевдонимы:
SELECT Т1.*, Т2.Имя, Т2.Телефон
FROM Продажи Т1, Клиенты Т2
WHERE Т1. ID_клиента = Т2.ID_клиента;
Эквивалентный запрос с оператором NATURAL JOIN выглядит следующим образом:
SELECT Т1.*, Т2.Имя, Т2.Телефон
FROM Продажи T1 NATURAL JOIN Клиенты Т2;
Примечание:
В Microsoft Access оператор NATURAL JOIN не поддерживается. Вместо него используется INNER JOIN (внутреннее соединение) и ключевое слово ON (при), за которым следует условие отбора записей. Впрочем, INNER JOIN можно применять и в полнофункциональных базах данных.
При естественном соединении, выполняемом с помощью оператора NATURAL JOIN, проверяется равенство всех одноименных столбцов соединяемых таблиц.
2.2. Условное соединение (join... On)
Условное соединение похоже на соединение с условием равенства. Отличие состоит в том, что в качестве условия может выступать любое логическое выражение, которое записывается после ключевого слова ON(при), а не WHERE. Если условие выполняется для текущей записи декартового произведения, то она входит в результатную таблицу.
Допустим, в базе данных имеются следующие две таблицы:
Продажи (ID_товара, Количество, 1ID_клиента);
Клиенты (ID_клиента, Имя, Телефон).
Тогда эти таблицы можно соединить, используя, например, следующий запрос:
SELECT * FROM Продажи JOIN Клиенты
ON (Продажи.ID_клиента = Клиенты.ID_клиента)
AND (Продажи.Количество > 50);
Примечание:
В Microsoft Access используется оператор INNER JOIN... ON. В полнофункциональных базах данных также допустимо ключевое слово INNER.
2.3. Соединение по именам столбцов (join... Using)
Соединение по именам столбцов похоже на естественное соединение. Отличие состоит в том, что можно указать, какие одноименные столбцы должны проверяться. Напомню, что в естественном соединении проверяются все одноименные столбцы.
Допустим, имеются две таблицы с одинаковыми структурами:
Болты (Тип, Количество, Материал);
Гайки (Тип, Количество, Материал).
Предположим, что мы готовим крепежные комплекты, в каждом из которых количества однотипных болтов и гаек должны совпадать, а их материалы могут быть различными. Требуется узнать, какие комплекты уже готовы и сколько элементов они содержат. Для этого следует определенным образом соединить таблицы Болты и Гайки. Естественное соединение в этом случае не подойдет, поскольку при нем проверяются все одноименные столбцы, а потому в результатную таблицу не попадут комплекты болтов и гаек из различных материалов. Например, если все болты стальные, а гайки латунные, то в результате естественного соединения будет получена пустая таблица. Поэтому следует использовать соединение по именам столбцов, при котором столбец материал исключен. Это соединение можно быть представлено так:
SELECT * FROM Болты JOIN Гайки USING (Тип, Количество);
После ключевого слова USING (используя) в круглых скобках указывается список одноименных столбцов соединяемых таблиц, которые необходимо проверять.
На рис. показаны таблицы Болты и Гайки, а также результат рассмотренного запроса.
Очевидно, данный запрос можно сформулировать иначе:
SELECT * FROM Болты, Гайки
WHERE (Болты.Тип = Гайки.Тип)
AND (Болты.Количество = Гайки.Количество);
Примечание:
В Microsoft Access оператор JOIN ... USING не поддерживается. Вместо него можно использовать INNER JOIN ... ON. Рассмотренный запрос в Access можно сформулировать так:
SELECT * FROM Болты INNER JOIN Гайки
ON (Болты.Тип = Гайки.Тип) AND (Болты.Количество = Гайки.Количество);
