Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТеоретикоМножественные операции ч7.doc
Скачиваний:
7
Добавлен:
09.09.2019
Размер:
3.43 Mб
Скачать

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

Условное соединение похоже на соединение с условием равенства. Отличие состоит в том, что в качестве условия может выступать любое логическое выражение, которое записывается после ключевого слова 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 (используя) в круглых скобках указывается список одноименных столбцов соединяемых таблиц, которые необходимо проверять.

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

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

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

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

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

Примечание

В Microsoft Access оператор JOIN ...USINO не поддерживается. Вместо него можно использовать INNER JOIN ... ON. Рассмотренный запрос в Access можно сформулировать так:

SELECT *

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

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

Внешние соединения

Все соединения таблиц, рассмотренные до сих пор, являются внутренними. Во всех примерах вместо ключевого слова JOIN можно писать INNER JOIN (внутреннее соединение). Из таблицы, получаемой при внутреннем соединении, отбраковываются все записи, для которых нет соответствующих записей одновременно в обеих соединяемых таблицах. При внешнем соединении такие несоответствующие записи сохраняются. В этом и заключается отличие внешнего соединения от внутреннего.

С помощью специальных ключевых слов LEFT OUTER, RIGHT OUTER, FULL и UNION, написанных перед JOIN, можно выполнить соответственно левое, правое, полное соединение и объединение- соединение. В SQL-выражении запроса таблица, указанная слева от оператора JOIN называется левой, а указанная справа от него— правой.