A common table expression (CTE) is a temporary result set that you can reference within a SELECT, INSERT, UPDATE, DELETE
, or CREATE VIEW
statement. A CTE is similar to a derived table in that it is not stored as an object and exists only for the duration of the query.
I’m finding them useful as you can use them within a view to contain all the references required for that particular view. This I feel makes things more maintainable.
An example of a simple common table expression (CTE) in T-SQL:
WITH CTE_EmployeeSalaries AS
(
SELECT EmployeeID, Salary
FROM Employees
WHERE Salary > 50000
)
SELECT *
FROM CTE_EmployeeSalaries;
This CTE defines a virtual table named CTE_EmployeeSalaries that contains all employees with a salary greater than 50,000. The CTE is then used to select all rows from this virtual table.
Common table expressions (CTEs) have several advantages:
1.Improved readability: can make complex queries easier to read and understand by breaking them up into smaller, more manageable pieces.
2.Improved maintainability: Because CTEs are self-contained, they can be easily modified or replaced without affecting the rest of the query.
3.Improved performance: In some cases can improve query performance by reducing the need for subqueries.
4.Recursive queries: CTEs can be used to perform recursive queries, which are useful for querying hierarchical data such as an organizational chart or a bill of materials.
5.Temporary results: can be used to store intermediate results that are used multiple times within a single query. This can be more efficient than repeatedly calculating the same intermediate results.
6.Better alternative to view: CTEs can be used as an alternative to views, which can be difficult to modify and are not always optimized for performance.
7.Reusable: CTEs can be defined once and used multiple times within a single query or in multiple queries within the same session.