Какова цель (или вариант использования) для внешнего объединения в SQL? - PullRequest
3 голосов
/ 09 июля 2009

Внешнее соединение используется только для анализа разработчиком? У меня возникают проблемы с поиском варианта использования, по которому вы хотите включить данные в две или более таблицы, которые не связаны или не "соответствуют" выбранным критериям.

Ответы [ 8 ]

17 голосов
/ 09 июля 2009

Примером использования может быть создание отчета, в котором будут показаны ВСЕ клиенты и их покупки. То есть показывают даже клиентов, которые ничего не приобрели. Если вы выполняете обычное объединение клиентов и покупок, в отчете будут отображаться только те клиенты, у которых есть хотя бы одна покупка.

6 голосов
/ 09 июля 2009

Вот очень хороший список примеров, не более чем Джефф Этвуд - Визуальное объяснение объединений SQL он визуально показывает новое представление объединений SQL.

3 голосов
/ 09 июля 2009

Случай "не совпадает" полезен для необязательных данных. Нечто, присутствующее для некоторых строк, но не для других.

2 голосов
/ 09 июля 2009

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

Соединение INNER исключит из списка все первичные записи, также не представленные во вторичной таблице. Любое внешнее соединение гарантирует видимость всех квалифицированных первичных записей.

1 голос
/ 09 июля 2009

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

1 голос
/ 09 июля 2009

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

1 голос
/ 09 июля 2009

Возможно, у вас есть таблица пользователей и связанная с ней таблица адресов, поскольку ваши пользователи могут не вводить адрес, или они могут иметь несколько (доставка, улица, почта и т. Д.). Если вы хотите перечислить всех своих пользователей, а также отобразить адреса для тех, у кого они есть, вам придется использовать внешнее объединение для таблицы адресов.

...