Common Table Expressions (CTE)
A Common Table Expression (CTE)
is a temporary named result set that you can reference within a SELECT
, INSERT
, UPDATE
, or DELETE
statement. CTEs are useful for simplifying complex queries and improving readability.
Syntax for CTE
WITH CTE_Name (column1, column2, ...) AS (
-- CTE query
SELECT column1, column2, ... FROM table_name WHERE condition
)
SELECT * FROM CTE_Name;
Example: Simple CTE
WITH FighterCTE AS (
SELECT Name, City, BirthDate
FROM FreedomFighters
WHERE BirthDate < '1900-01-01'
)
SELECT * FROM FighterCTE;
Output:
Name | City | BirthDate |
---|---|---|
Mahatma Gandhi | Porbandar | 1869-10-02 |
Bal Gangadhar Tilak | Ratnagiri | 1856-07-23 |
Recursive CTE
Recursive CTEs are used to perform hierarchical or recursive queries, such as retrieving data from a parent-child relationship.
Example: Recursive CTE
WITH NumbersCTE (Number) AS (
SELECT 1
UNION ALL
SELECT Number + 1 FROM NumbersCTE WHERE Number < 10
)
SELECT * FROM NumbersCTE;
Output:
Number |
---|
1 |
2 |
3 |
... |
10 |
When to Use CTEs
- When you need to simplify complex queries.
- When dealing with hierarchical or recursive data.
- When performing data transformations that require multiple references to a subquery.
Do's and Don'ts
Do's
- Use CTEs to make your queries easier to read and maintain.
- Consider using recursive CTEs for hierarchical data retrieval.
- Break down complex logic into multiple CTEs for clarity.
Don'ts
- Don't use CTEs if a simple subquery or a temporary table would be more efficient.
- Don't use recursive CTEs for large datasets without testing performance.
- Don't forget to analyze query plans to ensure performance is not degraded.