Common Table Expressions
Pranav Bakare
Posted on October 24, 2024
Common Table Expressions (CTEs)
Definition: A Common Table Expression (CTE) is a temporary result set that you can reference within a SELECT, INSERT, UPDATE, or DELETE statement. CTEs make complex queries easier to read and maintain by breaking them down into simpler, more manageable components.
Basic Syntax:
WITH cte_name AS (
-- Your query here
)
SELECT * FROM cte_name;
Example: Let's say you have a employees table and you want to get the average salary for each department. You can use a CTE to simplify the query.
WITH DepartmentAverage AS (
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
)
SELECT * FROM DepartmentAverage;
Recursive Common Table Expressions
Definition: A recursive CTE is a type of CTE that references itself in order to produce hierarchical or sequential data. Recursive CTEs are particularly useful for querying tree-structured data, such as organizational charts or folder hierarchies.
Basic Syntax:
WITH RECURSIVE cte_name AS (
-- Anchor member (base case)
SELECT initial_query
UNION ALL
-- Recursive member
SELECT recursive_query
FROM cte_name
WHERE condition
)
SELECT * FROM cte_name;
Example: Assume you have an employees table where each employee has a manager, and you want to find all employees under a specific manager.
WITH RECURSIVE EmployeeHierarchy AS (
-- Anchor member: start with a specific employee
SELECT employee_id, first_name, manager_id
FROM employees
WHERE employee_id = 1 -- Start with employee with ID 1
UNION ALL
-- Recursive member: find employees under that manager
SELECT e.employee_id, e.first_name, e.manager_id
FROM employees e
INNER JOIN EmployeeHierarchy eh ON e.manager_id = eh.employee_id
)
SELECT * FROM EmployeeHierarchy;
Summary
CTE: A temporary result set that simplifies complex queries by allowing you to break them into smaller, manageable pieces. It can be used for both simple and complex queries.
Recursive CTE: A specialized CTE that references itself, used for retrieving hierarchical or sequential data. It's particularly helpful when dealing with parent-child relationships in data structures.
Posted on October 24, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 30, 2024