Естественное соединение (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.