使用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年下订单
内部联接查询
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查询
SELECT CustomerID, CompanyName
FROM Customers
WHERE CustomerID IN (SELECT CustomerID
FROM Orders
WHERE OrderDate BETWEEN '1997-01-01' AND '1997-12-31');
我正在提高自己的SQL技能,并且正在使用Northwind数据库进行练习,因此想知道哪个查询是正确的答案
答案 0 :(得分:3)
这就是您要返回的内容。在子查询示例中,您仅返回客户表中在子查询中具有订单的行-因此每个客户一行。 在内部联接示例中,您将同时从“客户”表和“订单”表中返回数据-因此,每个客户和每个订单一行。
如果客户有5个订单,则子查询示例将为客户返回一行。在内部联接示例中,查询将返回5行-客户已下订单的每一行。
这可能有助于进一步解释内部联接逻辑:https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/inner-join-operation-microsoft-access-sql