Modelo de escrita CTE
Como ele pode melhorar suas consultas
O SQL (Structured Query Language) é uma linguagem de programação usada para gerenciar e manipular bancos de dados.
Uma das características mais poderosas do SQL é a capacidade de escrever consultas complexas para extrair informações valiosas dos dados.
Uma dessas técnicas avançadas é o uso de Expressões de Tabela Comum, ou CTEs (Common Table Expressions)
.
As CTEs são uma forma de criar consultas temporárias que são usadas dentro de uma instrução SQL maior.
Elas são úteis para simplificar consultas complexas, dividindo-as em partes menores e mais gerenciáveis. Neste post, vamos explorar o que são CTEs, como usá-las e como elas podem melhorar suas consultas SQL.
O que é uma CTE?
Uma CTE é uma expressão de tabela nomeada temporária que você pode referenciar dentro de uma instrução SELECT
, INSERT
, UPDATE
, DELETE
ou outra CTE
.
Ela é usada para simplificar consultas SQL complexas, dividindo-as em partes menores e mais gerenciáveis. A CTE é definida usando a cláusula WITH
antes da consulta SQL e pode ser pensada como uma visão temporária que existe apenas durante a execução da consulta.
Aqui está um exemplo básico de uma CTE:
WITH Sales_CTE (SalesPersonID, NumberOfOrders)
AS
(
SELECT
SalesPersonID
, COUNT(OrderID)
FROM SalesOrderHeader
GROUP BY SalesPersonID
)
SELECT
SalesPersonID
, NumberOfOrders
FROM Sales_CTE;
Neste exemplo, a CTE Sales_CTE agrupa as vendas por SalesPersonID. A consulta principal então seleciona os dados da CTE.
Como as CTEs podem melhorar suas consultas SQL?
As CTEs podem melhorar suas consultas SQL de várias maneiras:
- Simplificação de consultas complexas:
As CTEs permitem que você divida consultas complexas em partes menores e mais gerenciáveis. Isso torna o código mais fácil de entender e manter.
- Reutilização de código:
As CTEs podem ser referenciadas várias vezes na mesma consulta, o que evita a necessidade de repetir o mesmo código.
- Recursividade:
As CTEs permitem consultas recursivas, o que é útil para trabalhar com dados hierárquicos.
- Melhor desempenho:
Em alguns casos, o uso de CTEs pode resultar em um desempenho melhorado em comparação com subconsultas ou joins complexos.
Exemplos práticos de CTEs
Vamos ver alguns exemplos de como as CTEs podem ser usadas para melhorar suas consultas SQL.
Simplificando consultas complexas
Suponha que você tenha uma consulta que envolva várias junções e agregações. Sem CTEs, sua consulta pode parecer algo assim:
SELECT
SalesPersonID
, COUNT(OrderID)
FROM SalesOrderHeader
WHERE SalesPersonID IN
(
SELECT
SalesPersonID
FROM SalesPerson
WHERE TerritoryID IN
(
SELECT
TerritoryID
FROM SalesTerritory
WHERE [Group] = 'North America'
)
)
GROUP BY SalesPersonID;
Com CTEs, você pode dividir essa consulta complexa em partes menores:
WITH NorthAmericanTerritories AS
(
SELECT
TerritoryID
FROM SalesTerritory
WHERE [Group] = 'North America'
), NorthAmericanSalesPeople AS
(
SELECT
SalesPersonID
FROM SalesPerson
WHERE TerritoryID IN (
SELECT
TerritoryID
FROM NorthAmericanTerritories
)
)
SELECT
SalesPersonID
, COUNT(OrderID)
FROM SalesOrderHeader
WHERE SalesPersonID IN (
SELECT
SalesPersonID
FROM NorthAmericanSalesPeople
)
GROUP BY SalesPersonID;
Consultas recursivas
As CTEs também podem ser usadas para consultas recursivas. Por exemplo, suponha que você tenha uma tabela Employees com uma relação hierárquica de gerente-empregado. Você pode usar uma CTE recursiva para obter todos os subordinados diretos e indiretos de um gerente:
WITH EmployeeHierarchy AS
(
SELECT
EmployeeID
, FirstName
, LastName
, ManagerID
FROM Employees
WHERE ManagerID IS NULL
UNION ALL
SELECT
E.EmployeeID
, E.FirstName
, E.LastName
, E.ManagerID
FROM Employees E
INNER JOIN EmployeeHierarchy EH ON E.ManagerID = EH.EmployeeID
)
SELECT
*
FROM EmployeeHierarchy;
Em resumo, as CTEs são uma ferramenta poderosa que pode melhorar a legibilidade, a manutenção e o desempenho de suas consultas SQL. Se você ainda não está usando CTEs em suas consultas SQL, eu recomendo que você comece a explorá-las.
Selo 🧙♂️: