Примеры рассмотренные в предыдущем разделе формально относятся к так называемым внутренним объединениям. Внутреннее объединение возвращает строки, только если условия объединения выполнено. Приведем еще раз пример запроса с использованием оператора JOIN (соединять).
Вывести всех клиентов с указанием города.
SELECT ГОРОДА.НАЗВАНИЕ, КЛИЕНТ.НАЗВАНИЕ(ИМЯ)
FROM ГОРОДА
INNER JOIN КЛИЕНТ ON ГОРОДА.IDN=КЛИЕНТ.IDN_ГОРОДА
Результат этого запроса.
Москва Москва Санкт-Петербург Пермь Пермь | МММ Хопер Алиса ИВС ПГТУ |
Обратите внимание, что ни город Париж ни клиент Рога&Копыта в результаты запроса не попали.
На то, что мы имеем дело с внутренним объединением, указывает ключевое слово INNER (внутренний). Помимо внутренних объединений часто имеет смысл использовать внешние объединения, которые возвращают строки независимо от того выполнено условия объединение или нет. Когда условия объединения не выполнено для данной строки во внешнем объединении, поля из внутренней таблицы возвращаются как NULL.
|
|
Различают правые и левые внешние объединения, которые различаются тем, из какой таблицы (внутренней или внешней) извлекаются все строки. Приведем примеры.
Левое внешнее объединение:
Вывести всех клиентов, если для клиента указан город, показать его.
SELECT ГОРОДА.НАЗВАНИЕ, КЛИЕНТ.НАЗВАНИЕ(ИМЯ)
FROM ГОРОДА
LEFT OUTER JOIN КЛИЕНТ ON ГОРОДА.IDN=КЛИЕНТ.IDN_ГОРОДА
Результат этого запроса.
Москва Москва Санкт-Петербург Пермь Пермь | МММ Хопер Алиса ИВС ПГТУ Рога&Копыта |
Обратите внимание, что был выведен клиент Рога&Копыта, для которого город не указан.
В этом запросе были использованы ключевые слова LEFT (левый) OUTER (внешний).
Правое внешнее объединение:
Вывести все города и клиентов из этих городов.
SELECT ГОРОДА.НАЗВАНИЕ, КЛИЕНТ.НАЗВАНИЕ(ИМЯ)
FROM ГОРОДА
RIGHT OUTER JOIN КЛИЕНТ ON ГОРОДА.IDN=КЛИЕНТ.IDN_ГОРОДА
Результат этого запроса.
Москва Москва Санкт-Петербург Пермь Пермь Париж | МММ Хопер Алиса ИВС ПГТУ |
В результате теперь присутствует Париж.
Вложенные запросы
Исходная база данных
Эта база данных далее будет использоваться в примерах.
Таблица Клиент
IDN | IDN_ГОРОДА | ИМЯ | РЕКВИЗИТЫ | IDN_БАНКА |
Петров | -------------- | |||
Кузнецов | -------------- | |||
Иванов | -------------- | |||
Золин | -------------- | |||
Киров | -------------- | |||
Павлов | -------------- | |||
Петренко | -------------- |
Таблица Города
IDN | НАЗВАНИЕ |
Минск | |
Москва | |
Саратов | |
Пермь | |
Киев |
Таблица Банки
IDN | РЕКВИЗИТЫ |
МММ | |
Альфа – банк | |
Сбербанк | |
Менатеп | |
Западуралбанк |
Таблица Перемещение
|
|
IDN | ПОРЯДКОВ№ | КОД_ДОК | ДАТА_ДОК | НОМЕР_ДОК | IDN_ ГРУППЫ | IDN_ МАТ.ЦЕН | КОЛ-ВО | ЦЕНА |
. | ||||||||
Некоторые столбцы не заполнены т.к. не используются в примерах.
Таблица Группы
IDN | НАЗВАНИЕ |
Газ. вода | |
Шоколад | |
Сигареты |
Таблица Мат. ценности
IDN_ГРУППЫ | IDN_МАТ.ЦЕН | IDN_МАТ.ЦЕН |
Fanta | ||
Sprite | ||
Mars | ||
Twix | ||
Шок | ||
Кама | ||
L&M |