double arrow

Внутренние и внешние объединения

Примеры рассмотренные в предыдущем разделе формально относятся к так называемым внутренним объединениям. Внутреннее объединение возвращает строки, только если условия объединения выполнено. Приведем еще раз пример запроса с использованием оператора 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

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: