Hoje vamos aprender sobre a expressão de tabela comum, que é um novo recurso que foi introduzido no SQL Server 2005 e disponível também em versões posteriores.
Expressão comum da tabela: - A expressão comum da tabela pode ser definida como um conjunto de resultados temporário ou, em outras palavras, é um substituto dos modos de exibição no SQL Server. A expressão de tabela comum é válida apenas no lote de instruções em que foi definida e não pode ser usada em outras sessões.
Sintaxe da declaração CTE (Expressão comum da tabela): -
with [Name of CTE]
as
(
Body of common table expression
)
Vamos dar um exemplo: -
CREATE TABLE Employee([EID] [int] IDENTITY(10,5) NOT NULL,[Name] [varchar](50) NULL)
insert into Employee(Name) values('Neeraj')
insert into Employee(Name) values('dheeraj')
insert into Employee(Name) values('shayam')
insert into Employee(Name) values('vikas')
insert into Employee(Name) values('raj')
CREATE TABLE DEPT(EID INT,DEPTNAME VARCHAR(100))
insert into dept values(10,'IT')
insert into dept values(15,'Finance')
insert into dept values(20,'Admin')
insert into dept values(25,'HR')
insert into dept values(10,'Payroll')
Criei duas tabelas employee e Dept e inseri 5 linhas em cada tabela. Agora eu gostaria de juntar essas tabelas e criar um conjunto de resultados temporário para usá-lo ainda mais.
With CTE_Example(EID,Name,DeptName)
as
(
select Employee.EID,Name,DeptName from Employee
inner join DEPT on Employee.EID =DEPT.EID
)
select * from CTE_Example
Vamos pegar cada linha da afirmação uma por uma e entender.
Para definir CTE, escrevemos a cláusula "with" e, em seguida, atribuímos um nome à expressão da tabela. Aqui, nomeei como "CTE_Example"
Em seguida, escrevemos "Como" e colocamos nosso código entre dois colchetes (---), podemos juntar várias tabelas entre colchetes.
Na última linha, usei "Select * from CTE_Example", estamos nos referindo à expressão da tabela Common na última linha de código. Assim, podemos dizer que é como uma visualização, onde estamos definindo e usando a visualização em uma única lote e CTE não é armazenado no banco de dados como um objeto permanente. Mas se comporta como uma visão. podemos executar instruções de exclusão e atualização no CTE e isso terá impacto direto na tabela referenciada que está sendo usada no CTE. Vamos dar um exemplo para entender esse fato.
With CTE_Example(EID,DeptName)
as
(
select EID,DeptName from DEPT
)
delete from CTE_Example where EID=10 and DeptName ='Payroll'
Na instrução acima, estamos excluindo uma linha do CTE_Example e os dados da tabela referenciada "DEPT" que estão sendo usados no CTE.