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

Естественное соединение (natural join)

Рассмотрим суть операции естественного соединения на типичном примере. Пусть в базе данных имеются следующие две таблицы:

Продажи (ID_товара, Количество, ID_клиента);

Клиенты (ID_клиента, Имя, Телефон).

Общим столбцом для этих таблиц является ID_клиента. Декартово произведение этих таблиц получается с помощью следую­щего запроса:

ПРОДАЖИ

КЛИЕНТЫ

ДЕКАРТОВО ПРОИЗВЕДЕНИЕ

SELECT * FROM Продажи, Клиенты;

На рис. 5.7 показаны примеры таблиц продажи и клиенты, а также результат их декартового произведения.

Рис. 5.7. Таблицы Продажи, Клиенты и их декартовое произведение

Очевидно, в полученном декартовом произведении нас могут интересовать не все записи, а только те, в которых идентичные столбцы имеют одинаковые значения (Продажи.ID_клиента = Клиенты.ID_клиента). Кроме того, в результатной таблице нам не нужны оба идентичных столбца, достаточно лишь одного из них Такая таблица и будет естественным соединением таблиц Продажи и Клиенты (рис. 5.8). Она получается с помощью сле­дующего запроса:

SELECT Продажи.*, Клиенты.Имя, Клиенты.Телефон

FROM Продажи, Клиенты

WHERE Продажи.ID_клиента = Клиенты.ID_клиента;

Данный запрос можно переписать, используя псевдонимы:

SELECT Т1.*, Т2.Имя, Т2.Телефон

FROM Продажи Т1, Клиенты Т2

WHERE Т1.ID_клиента = Т2.ID_клиента;

Эквивалентный запрос с оператором natural join выглядит следующим образом:

SELECT Т1.*, Т2.Имя, Т2.Телефон

FROM Продажи Tl NATURAL JOIN Клиенты Т2;

Рис. 5.8. Естественное соединение таблиц Продажи и Клиенты

В Microsoft Access оператор natural join не поддерживается Вместо него используется inner join (внутреннее соединение) и ключевое слово on (при), за которым следует условие отбора записей Впрочем, inner join можно применять и в полнофунк­циональных базах данных

При естественном соединении, выполняемом с помощью опера­тора natural join, проверяется равенство всех одноименных столбцов соединяемых таблиц

Условное соединение (join... On)

Условное соединение похоже на соединение с условием равен­ства, которое рассматривалось в начале разд. 531. Отличие со­стоит в том, что в качестве условия может выступать любое ло­гическое выражение, которое записывается после ключевого слова on (при), а не where. Если условие выполняется для теку­щей записи декартового произведения, то она входит в резуль­татную таблицу

Допустим, в базе данных имеются следующие две таблицы

Продажи (ID_товара, Количество, ID_клиента);

Клиенты (ID_клиента, Имя, Телефон).

Тогда эти таблицы можно соединить, используя, например, сле­дующий запрос

SELECT * FROM Продажи JOIN Клиенты

ON (Продажи.ID_клиента = Клиенты.ID_клиента)

AND (Продажи.Количество > 50);

В Microsoft Access используется оператор inner join ...on.

В полнофункциональных базах данных также допустимо ключевое слово INNER

Соединение по именам столбцов (join... Using)

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

Допустим, имеются две таблицы с одинаковыми структурами

Болты (Тип, Количество, Материал);

Гайки (Тип, Количество, Материал).

Предположим, что мы готовим крепежные комплекты, в каждом из которых количества однотипных болтов и гаек должны совпа­дать, а их материалы могут быть различными. Требуется узнать, какие комплекты уже готовы и сколько элементов они содержат. Для этого следует определенным образом соединить таблицы Болты и Гайки. Естественное соединение в этом случае не подойдет, поскольку при нем проверяются все одноименные столбцы, а потому в результатную таблицу не попадут комплекты болтов и гаек из различных материалов. Например, если все болты стальные, а гайки латунные, то в результате естественного соединения будет получена пустая таблица. Поэтому следует использовать соедине­ние по именам столбцов, при котором столбец материал исклю­чен. Это соединение может быть представлено так:

SELECT * FROM Болты JOIN Гайки

USING (Тип, Количество);

После ключевого слова using (используя) в круглых скобках указывается список одноименных столбцов соединяемых таб­лиц, которые необходимо проверять.

На рис. 5.9 показаны таблицы Болты и гайки, а также результат рассмотренного запроса.

Очевидно, данный запрос можно сформулировать иначе:

SELECT * FROM Болты, Гайки

БОЛТЫ

ГАЙКИ

КОМПЛЕКТЫ: запрос на выборку

Рис. 5.9. Таблицы Болты и Гайки и результат их соединения по столбцам Тип и Количество

WHERE (Болты.Тип = Гайки.Тип) AND (Болты.Количество = Гайки.Количество);

В Microsoft Access оператор join ... using не поддерживается. Вместо него можно использовать inner join ... on. Рассмотренный запрос в Access можно сформулировать так:

SELECT *

FROM Болты INNER JOIN Гайки

ON (Болты.Тип = Гайки.Тип) AND (Болты.Количество = Гайки.Количество);