sexta-feira, 22 de outubro de 2010

Um pouco sobre SQL

1. Select Hierárquico
1.1. Script para testes
1.2. Criação do Select
2. Tabelas Temporárias
2.1. Como usar uma tabela temporária
1. Select Hierárquico

Em SQL podemos utilizar de tabelas que faz referência a si própria, ou seja, onde temos um auto-relacionamento (pais, filhos, netos …). Muito comum nos depararmos com tabelas do SQL dessa forma, segue abaixo o diagrama da tabela que iremos utilizar nesse exemplo.

1.1. Script para testes

–Criar Banco de dados
CREATE DATABASE Teste

–Criar Tabela de Funcionário
GO

USE [Teste]
GO
CREATE TABLE [dbo].[Funcionario](
[Codigo] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Nome] [varchar](50) NOT NULL,
[CodigoPai] [int] NULL
)
GO
–Popular Tabela
INSERT INTO [Teste].[dbo].[Funcionario]([Nome],[CodigoPai])
VALUES (‘João’,null)
INSERT INTO [Teste].[dbo].[Funcionario]([Nome],[CodigoPai])
VALUES (‘Maria’,null)
INSERT INTO [Teste].[dbo].[Funcionario]([Nome],[CodigoPai])
VALUES (‘José’,null)
INSERT INTO [Teste].[dbo].[Funcionario]([Nome],[CodigoPai])
VALUES (‘Carlos’,1)
INSERT INTO [Teste].[dbo].[Funcionario]([Nome],[CodigoPai])
VALUES (‘Eduardo’,1)
INSERT INTO [Teste].[dbo].[Funcionario]([Nome],[CodigoPai])
VALUES (‘Camila’,2)
 INSERT INTO [Teste].[dbo].[Funcionario]([Nome],[CodigoPai])
VALUES (‘Carla’,4)
INSERT INTO [Teste].[dbo].[Funcionario]([Nome],[CodigoPai])
VALUES (‘Talita’,7)
 INSERT INTO [Teste].[dbo].[Funcionario]([Nome],[CodigoPai])
VALUES (‘Mateus’,7)
INSERT INTO [Teste].[dbo].[Funcionario]([Nome],[CodigoPai])
VALUES (‘Diogo’,5)
INSERT INTO [Teste].[dbo].[Funcionario]([Nome],[CodigoPai])
VALUES (‘Patricia’,5)


1.2. Criação do Select
O select abaixo mostra um exemplo de como podemos recuperar a hierarquia de funcinários a partir de um dos funcionários, no caso escolhemos o funcionário de código 1 (João), para mostrar ele e todos os que estão abaixo dele. Perceba que utilizamos dois selects, o primeiro define o ponto de entrada na hierárquia, já o segundo busca os itens relacionados a esse ponto de entrada.
WITH HIERARQUIA AS
(
– Pai
SELECT F.NOME, F.CODIGO, F.CODIGOPAI
FROM FUNCIONARIO F
WHERE F.CODIGO = 1
UNION ALL
– Filhos
SELECT F2.NOME, F2.CODIGO, F2.CODIGOPAI
FROM FUNCIONARIO F2
INNER JOIN HIERARQUIA H ON F2.CODIGOPAI = H.CODIGO
)

SELECT NOME, CODIGO, CODIGOPAI
FROM HIERARQUIA

Podemos também mostrar essa consulta de forma mais fácil para visualizar a árvore.

WITH HIERARQUIA AS
(
– Pai
SELECT F.NOME, F.CODIGO, 0 AS NIVEL
FROM FUNCIONARIO F
WHERE F.CODIGO = 1
UNION ALL
– Filhos
SELECT F2.NOME, F2.CODIGO, NIVEL+1 AS NIVEL
FROM FUNCIONARIO F2
INNER JOIN HIERARQUIA H ON F2.CODIGOPAI = H.CODIGO
)
SELECT REPLICATE(‘ ‘,NIVEL) + NOME AS ARVORE
FROM HIERARQUIA


2. Tabelas Temporárias

Normalmente quando temos tarefas mais complexas e precisamos armazenar dados para conseguir realizar essa tarefas, podemos utilizar das tabelas temporárias para isso. A principal idéia é não precisar criar tabelas no banco de dados para esses casos, uma vez ocupariam espaço sem necessidade.
As tabelas temporárias existem apenas por um tempo determinado, quando a conexão é encerrada para de existir. Além disso ela não é armazenada no Banco de dados que estamos utilizando .

2.1. Como usar uma Tabela Temporária
Igual a manipulação de tabela, podemos criar, alterar e deletar a tabela, inserir e selecionar seus itens e deletar. A única diferença é que utilizamos o símbolo # na frente do seu nome, para indicar que é uma tabela temporária. Como por Exemplo:

–Criar Tabela Temporária
CREATE TABLE #PESSOA
(
CODIGO INT NOT NULL PRIMARY KEY IDENTITY(1,1),
NOME VARCHAR(100) NOT NULL,
EMAIL VARCHAR(100) NULL
)
–Alterar Tabela Temporária
ALTER TABLE #PESSOA
ADD DATANASC DATETIME NOT NULL

–Inserir itens na tabela Temporária
INSERT INTO #PESSOA VALUES(‘Maria’,‘maria@teste.com’,’10/01/1956′)
INSERT INTO #PESSOA VALUES(‘Carlos’,null,’01/01/1963′)
INSERT INTO #PESSOA VALUES(‘Eduarda’,‘eduarda@teste.com’,’02/08/1975′)

–Selecionar itens de uma Tabela Temporária
SELECT * FROM #PESSOA


–Deletar uma Tabela Temporária
DROP TABLE #PESSOA

Para concluir, podemos utilizar e manipular a tabela temporária igual a qualquer outra tabela. A diferença é o fato de ser temporária, ou seja, sua vida útil é limitada a: uma sessão, uma conexão. Além disso a tabela não é armazenada no banco de dados que estamos utilizando, ela é armazenada no banco de dados de sistemas tempdb.

Nenhum comentário:

Postar um comentário