Естественное соединение (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, проверяется равенство всех одноименных столбцов соединяемых таблиц.
Условное соединение (JOIN... ON)
Условное соединение похоже на соединение с условием равенства. Отличие состоит в том, что в качестве условия может выступать любое логическое выражение, которое записывается после ключевого слова ON(при), а не WHERE. Если условие выполняется для текущей записи декартового произведения, то она входит в результатную таблицу.
Допустим, в базе данных имеются следующие две таблицы:
Продажи (ID_товара, Количество, 1ID_клиента);
Клиенты (ID_клиента, Имя, Телефон).
Тогда эти таблицы можно соединить, используя, например, следующий запрос:
èSELECT * FROM Продажи JOIN Клиенты
ON (Продажи.ID_клиента = Клиенты.ID_клиента)
AND (Продажи.Количество > 50);
Примечание:
В Microsoft Access используется оператор INNER JOIN... ON. В полнофункциональных базах данных также допустимо ключевое слово INNER.