Сделай Сам Свою Работу на 5

Объединение наборов данных





Существует возмож­ность выборки данных из разных источников с объединением их полей. В SQL этот процесс формально называется объединением (join).

В результате объединения двух или более наборов данных создается новыйна­бор записей, состоящих из всех полей исходных наборов. Базовый вариант объеди­нения представляет собой декартово произведение, то есть совокупность всех воз­можных комбинаций двух наборов. Далее из этого произведения отбирается часть записей по критериям, заданным в секции JOIN.

Существуют три разновидности объединений.

– Перекрестные объединения (CROSS JOIN). Декартово (перекрестное) произведе­ние двух наборов данных. Произведение не определяет отношений между на­борами, а лишь содержит все возможные комбинации записей объединяемых наборов.

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

– Внешние объединения (OUTER JOIN). Как и внутренние объединения, содержат критерий объединения записей, но обязательно возвращают минимум один эк­земпляр каждой записи заданного набора. Это может быть левый набор (источник данных слева от ключевого слова JOIN), правый набор (источник данных справа от ключевого слова JOIN) или оба набора в зависимости от конкретной разновидности внешнего объединения. Пустые поля в тех частях записей, ко­торые не отвечают критерию объединения, содержат NULL.



На практике чаще используются внутренние и внешние объединения, при кото­рых секция JOIN обязательно содержит критерий, уточняющий связи между объеди­няемыми наборами данных. Поэтому рассмотрим их более бодробно. Синтаксис внутренних и внешних объединений:

источник1 тип_объединения источник2 [ 0N ( условие [. .] )

– источник1. Первый из объединяемых наборов данных (имя таблицы или под­запрос).

– тип_объединения. В данном контексте допустимы следующие типы объедине­ний: [INNER] JOIN (то есть JOIN без уточнения подразумевает INNER JOIN), LEET [OUTER] JOIN, RIGHT [OUTER] JOIN и FULL [OUTER] JOIN.

– источник2. Второй из объединяемых наборов данных (имя таблицы или подза­прос).



– ON ( условие [. .. ] ). Отношение между источниками. В секции ON можно задать произвольный критерий по аналогии с тем, как задаются условия в сек­ции WHERE. В критерии могут использоваться синонимы таблиц и полей.

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

Для примера найдем всех служащих, которые работают в офисах компании:

SELECT *

FROM zakazy.offisy o

JOIN zakazy.sluzhaschie s on o.id_ofc = s.id_ofc

Результат выполнения запроса:

Рис. 18. Результат выполнения запроса внутреннего объединения

 

Аналогичного результата можно достигнуть, если выполнить следующий запрос:

SELECT *

FROM zakazy.offisy o, zakazy.sluzhaschie s

WHERE o.id_ofc = s.id_ofc

Две синтаксические формы запросов функционально идентичны и воз­вращают одинаковые результаты. Синтаксис INNER JOIN позволяет отделить крите­рий связи источников от критерия выбора записей, поскольку связи определяют­ся только в секции ON. Это существенно упрощает чтение и модификацию запросов, поскольку программисту не приходится разбираться в смысле каждого условия в секции WHERE.

Внешние объединения

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

С другой стороны, внешнее объединение может сохранить записи, для которых не находится соответствия в других наборах. В этом случае недостающие поля запол­няются значениями NULL. Решение о том, войдет ли такая запись во внешнее объеди­нение, зависит от того, в каком из объединяемых наборов отсутствуют данные, и от типа внешнего объединения. » Существуют три разновидности внешних объединений.



– Левое внешнее объединение. Всегда содержит как минимум один экземпляр каж­дой записи из набора, указанного слева от ключевого слова JOIN. Отсутствую­щие поля из правого набора заполняются значениями NULL.

SELECT *

FROM zakazy.offisy o

LEFT JOIN zakazy.sluzhaschie s on o.id_ofc = s.id_ofc

Результат выполнения запроса:

Рис. 19. Результат выполнения запроса левого внешнего объединения

– Правое внешнее объединение. Всегда содержит как минимум один экземпляр каждой записи из набора, указанного справа от ключевого слова JOIN. Отсут­ствующие поля из левого набора заполняются значениями NULL.

Рис. 20. Результат выполнения запроса правого внешнего объединения

SELECT *

FROM zakazy.offisy o

RIGHT JOIN zakazy.sluzhaschie s on o.id_ofc = s.id_ofc

Результат выполнения запроса:

Рис. 21. Результат выполнения запроса полного внешнего объединения

– Полное внешнее объединение. Всегда содержит как минимум один экземпляр каждой записи каждого объединяемого набора. Отсутствующие поля в записях нового набора заполняются значениями NULL.

SELECT *

FROM zakazy.offisy o

FULL JOIN zakazy.sluzhaschie s on o.id_ofc = s.id_ofc

Результат выполнения запроса:

Выполнение функций

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.