Nested subqueries are impossible to read. CTEs (Common Table Expressions) break them into named, readable chunks.
Messy Nested Query:
SELECT *
FROM Orders o
WHERE o.CustomerId IN (
SELECT CustomerId
FROM Customers
WHERE Country IN (
SELECT Country
FROM TopCountries
WHERE Revenue > 1000000
)
);
Clean CTE Version:
WITH TopCountries AS (
SELECT Country
FROM CountryRevenue
WHERE Revenue > 1000000
),
TopCustomers AS (
SELECT CustomerId
FROM Customers
WHERE Country IN (SELECT Country FROM TopCountries)
)
SELECT *
FROM Orders
WHERE CustomerId IN (SELECT CustomerId FROM TopCustomers);
-- Much more readable!
Multiple CTEs:
WITH
SalesData AS (SELECT ...),
RevenueData AS (SELECT ...),
CombinedData AS (SELECT ... FROM SalesData JOIN RevenueData)
SELECT * FROM CombinedData;
Like defining functions – reusable and clear!
