Inner Join Query с 2 таблицами, дающими другой результат по сравнению с Sub Query для тех же 2 таблиц. База данных Northwind - PullRequest
0 голосов
/ 14 мая 2019

Использование базы данных Northwind = 2 таблицы = Заказы и клиенты.Нужно получить компании, которые разместили заказ в 1997 году (OrderDate).

Данные таблицы заказов:

OrderID CustomerID  EmployeeID  OrderDate   RequiredDate    ShippedDate ShipVia Freight ShipName    ShipAddress ShipCity    ShipRegion  ShipPostalCode  ShipCountry

Данные таблицы клиентов:

CustomerID  CompanyName ContactName ContactTitle    Address City    Region  PostalCode  Country Phone   Fax

Я выполнил 2 запроса, один с внутренним объединением, а другой - подзапрос.Запрос внутреннего соединения выдает 408 строк, а подзапрос - 86 строк.Я чувствую подзапрос Группы CustomerID вместе.Не уверен, какой запрос является правильным для вопроса, чтобы получить Компании, которые разместили заказ в 1997 году

INNER JOIN Query

Select a.OrderID, a.CustomerID, b.CompanyName,a.OrderDate
from Orders a
inner join Customers b on a.CustomerID = b.CustomerID
where a.OrderDate between '1997-01-01' AND '1997-12-31'

SUB Query

SELECT CustomerID, CompanyName
FROM Customers
WHERE CustomerID IN (SELECT CustomerID
            FROM Orders
            WHERE OrderDate BETWEEN '1997-01-01' AND '1997-12-31');

Я чищуна моих навыках SQL и использовал базу данных Northwind для практики, поэтому хотел бы знать, какой запрос является правильным, чтобы ответить на вопрос

1 Ответ

3 голосов
/ 14 мая 2019

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

Если у клиента есть 5 заказов, пример подзапроса вернет одну строку -для клиента.В примере с внутренним объединением запрос вернет 5 строк - по одной на каждый заказ, сделанный клиентом.

Это может помочь объяснить внутреннюю логику внутреннего соединения: https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/inner-join-operation-microsoft-access-sql

...