左边加入Oracle SQL

时间:2015-06-01 11:14:39

标签: sql oracle

我在w3schools.com上经历了LEFT JOIN的一个例子。 http://www.w3schools.com/sql/sql_join_left.asp

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;

上述查询将返回所有没有订单的客户为NULL订单ID +所有客户订单及其订单ID

我应该如何修改此查询,以便它返回所有没有订单的客户+所有订单日期为订单的客户为' 1996-09-18'

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果您希望无订单的客户以及具有特定订单日期的客户,则需要WHERE子句:

SELECT c.CustomerName, o.OrderID
FROM Customers c LEFT JOIN
     Orders o
    ON c.CustomerID = o.CustomerID
WHERE (o.CustomerID is NULL) OR (o.OrderDate = DATE '1996-09-18)
ORDER BY c.CustomerName;

如果您希望所有客户在该日期拥有订单(如果他们有),那么您可以将条件移至ON子句:

SELECT c.CustomerName, o.OrderID
FROM Customers c LEFT JOIN
     Orders o
    ON c.CustomerID = o.CustomerID AND o.OrderDate = DATE '1996-09-18
ORDER BY c.CustomerName;

注意区别:第一个过滤客户。第二个只影响显示的顺序(通常会显示NULL)。