OUTER JOINs
LEFT/RIGHT/FULL joins, handling unmatched rows.
What you’ll learn
- Keep unmatched rows with LEFT/RIGHT/FULL OUTER JOIN.
-- Customers with (optional) latest order date
SELECT c.CustomerID, c.Name, x.LastOrderDate
FROM dbo.Customers AS c
LEFT JOIN (
SELECT o.CustomerID, MAX(o.OrderDate) AS LastOrderDate
FROM dbo.Orders o
GROUP BY o.CustomerID
) AS x
ON x.CustomerID = c.CustomerID;
-- FULL OUTER JOIN (rare; use when data can be on either side)
-- SELECT ... FROM A FULL OUTER JOIN B ON ...
Notes
- When filtering the outer side, put predicates in the
ON
clause to avoid turning it into an inner join. - Use
COALESCE(a.col, b.col)
to pick the available value in FULL joins.