Каковы некоторые хорошие примеры, где ВНЕШНЕЕ ОБЪЕДИНЕНИЕ SQL используется?

Меня часто задают вопросы в интервью, что, "что такое внешнее объединение в SQL"?

В то время как этому можно ответить, интересно, каковы могли бы быть некоторые классические и хорошие реальные примеры, где (слева) ВНЕШНЕЕ ОБЪЕДИНЕНИЕ используется?

6
задан nopole 23 April 2010 в 12:08
поделиться

7 ответов

В базе данных Northwind в таблице «Клиенты и заказы».

Выполнение внутреннего соединения предоставит вам только тех клиентов, которые разместили заказы.

Выполнение внешнего соединения приведет к получению всех клиентов и заказов для клиентов, которые разместили заказы.

6
ответ дан 8 December 2019 в 03:52
поделиться

Ниже приводится визуальное представление левого внешнего соединения

SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key

alt text

. Подробнее о соединениях в статье ниже http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx (одна из лучших статей, которую необходимо прочитать)

5
ответ дан 8 December 2019 в 03:52
поделиться

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

Например, данная таблица Пользователь и Адрес , где Адрес имеет FK для пользователя , и может быть 0 или более адресов. на пользователя:

select *
from User u
left outer join Address a on u.UserID = a.UserID

Это гарантирует, что вы получите все записи пользователя , независимо от того, была ли соответствующая запись адреса или нет.

Если вы хотите показать всех пользователей, у которых нет адресов, вы можете сделать это:

select *
from User u
left outer join Address a on u.UserID = a.UserID
where a.UserID is null
4
ответ дан 8 December 2019 в 03:52
поделиться

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

Клиент A: 100 долларов США; Клиент B: 0 долларов США; Клиент C: 500 долларов США

вместо:

​​Клиент A: 100 долларов США; Клиент C: 500 долларов США

3
ответ дан 8 December 2019 в 03:52
поделиться

Чтобы добавить к ответу Робина Дэя, вы также можете использовать левое внешнее соединение, чтобы захватить только тех клиентов, которые НЕ разместили заказы, проверив значение NULL.


SELECT *
FROM  Customer
  LEFT OUTER JOIN Order 
    ON Customer.CustomerId = Order.CustomerId
WHERE Order.CustomerId IS NULL
6
ответ дан 8 December 2019 в 03:52
поделиться

Вот пример:

Мне нужен список всех клиентов с их ваучерами, мне также нужны клиенты, которые никогда не использовали ваучеры.

SELECT *
FROM Customer
LEFT OUTER JOIN Voucher
 ON Customer.CustomerId = Voucher.CustomerId
2
ответ дан 8 December 2019 в 03:52
поделиться

Получите список всех клиентов, включая подробную информацию о сделанных ими заказах. Некоторые клиенты, возможно, не сделали заказы, и поэтому ВНУТРЕННЕЕ СОЕДИНЕНИЕ исключит их из этого списка.

SELECT
    *
FROM
    Customer
LEFT OUTER JOIN
    Order
ON
    Customer.CustomerId = Order.CustomerId
1
ответ дан 8 December 2019 в 03:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: