Write a query to get all customers and their orders using LEFT JOIN.
Objective:
Write a SQL query to get all customers and their orders using LEFT JOIN.
That means:
- Show all customers, even if they have no orders.
- Use
LEFT JOIN
between customers
and orders
tables.
Step 1: Create the Tables
We'll create two tables:
1. customers
Table
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(100),
city VARCHAR(50)
);
2. orders
Table
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE,
amount DECIMAL(10,2),
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
Step 2: Insert Dummy Data
Insert into customers
:
INSERT INTO customers (customer_id, customer_name, city) VALUES
(1, 'Alice Smith', 'New York'),
(2, 'Bob Johnson', 'Los Angeles'),
(3, 'Charlie Lee', 'Chicago'),
(4, 'Diana Patel', 'Houston');
Insert into orders
:
INSERT INTO orders (order_id, order_date, amount, customer_id) VALUES
(101, '2024-01-15', 250.00, 1),
(102, '2024-02-10', 500.00, 1),
(103, '2024-03-05', 750.00, 3),
(104, '2024-03-18', 320.00, 3);
Note: Bob (ID 2) and Diana (ID 4) do not have any orders.
Step 3: LEFT JOIN Query
SELECT
c.customer_id,
c.customer_name,
c.city,
o.order_id,
o.order_date,
o.amount
FROM
customers c
LEFT JOIN
orders o ON c.customer_id = o.customer_id;
Step 4: Output
customer_id |
customer_name |
city |
order_id |
order_date |
amount |
1 |
Alice Smith |
New York |
101 |
2024-01-15 |
250.00 |
1 |
Alice Smith |
New York |
102 |
2024-02-10 |
500.00 |
2 |
Bob Johnson |
Los Angeles |
NULL |
NULL |
NULL |
3 |
Charlie Lee |
Chicago |
103 |
2024-03-05 |
750.00 |
3 |
Charlie Lee |
Chicago |
104 |
2024-03-18 |
320.00 |
4 |
Diana Patel |
Houston |
NULL |
NULL |
NULL |
Explanation:
LEFT JOIN
keeps all rows from customers
.
- If a customer has no orders, the
order_id
, order_date
, and amount
are shown as NULL.
- This is ideal for reporting customers who haven’t ordered yet.