sql avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/sqlavancado.pdf · 2...

19
1 SQL Avan SQL Avançado ado Leandro Tonietto [email protected] www.inf.unisinos.br/~ltonietto jan-07 Apresenta Apresentação ão Sobre o instrutor: Professor no curso de Jogos e Entretenimento Digital da Unisinos e do Instituto de Informática da Unisinos Gerente de Projetos da empresa Qualità Informática [email protected] Expectativa quando ao aproveitamento do curso SQL Avan SQL Avançado ado Agenda para 09/12 Agenda para 09/12 Introdução Transact-SQL Elementos de sintaxe Implementando Views Conceitos Criação e modificação Otimização SQL Avan SQL Avançado ado Transaction Transaction- SQL SQL O Transact-SQL é uma linguagem de definição, manipulação e controle de dados. Padronização SQL-92 ISO e ANSI Elementos de linguagem de programação Diretivas, comentários, identificadores, controle de fluxo, loops, funções, expressões, ... SQL Avan SQL Avançado ado Tipos de linguagem para BD Tipos de linguagem para BD DDL - Data Definition Language Definição do BD: criação, alteração e remoção de campos e tabelas, regras, índices, ... DML - Data Manipulation Language Manipulação de dados: consulta, inclusão, alteração e exclusão Transaction-SQL Programação de funções auxiliares SQL Avan SQL Avançado ado Elementos de Linguagem Elementos de Linguagem Diretivas de lotes Comentários Identificadores Tipos de dados Variáveis Funções do sistema Operadores Expressões Controle de fluxo Palavras reservadas SQL Avan SQL Avançado ado

Upload: lamkien

Post on 07-May-2018

231 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

1

SQL AvanSQL Avanççadoado

Leandro [email protected]

www.inf.unisinos.br/~ltoniettojan-07

ApresentaApresentaççãoão

Sobre o instrutor:Professor no curso de Jogos e Entretenimento Digital da Unisinos e do Instituto de Informática da Unisinos

Gerente de Projetos da empresa QualitàInformática

[email protected]

Expectativa quando ao aproveitamento do curso

SQL AvanSQL Avanççadoado

Agenda para 09/12Agenda para 09/12

Introdução Transact-SQLElementos de sintaxe

Implementando ViewsConceitosCriação e modificação

Otimização

SQL AvanSQL Avanççadoado

TransactionTransaction--SQLSQL

O Transact-SQL é uma linguagem de definição, manipulação e controle de dados.

Padronização SQL-92ISO e ANSI

Elementos de linguagem de programaçãoDiretivas, comentários, identificadores, controle de fluxo, loops, funções, expressões, ...

SQL AvanSQL Avanççadoado

Tipos de linguagem para BDTipos de linguagem para BD

DDL - Data Definition Language

Definição do BD: criação, alteração e remoção de campos e tabelas, regras, índices, ...

DML - Data Manipulation Language

Manipulação de dados: consulta, inclusão, alteração e exclusão

Transaction-SQLProgramação de funções auxiliares

SQL AvanSQL Avanççadoado

Elementos de LinguagemElementos de Linguagem

Diretivas de lotesComentáriosIdentificadoresTipos de dadosVariáveisFunções do sistemaOperadoresExpressõesControle de fluxoPalavras reservadas

SQL AvanSQL Avanççadoado

Page 2: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

2

Diretiva de lotesDiretiva de lotes

Lote: Conjunto de instruções de programação

SQL Server processa um lote de instruções por vez.

Diretivas de lote: são instruções para envio dos lotes para execução do SGBDDuas instruções: GO e EXEC

SQL AvanSQL Avanççadoado

Diretiva de lotesDiretiva de lotes

GO: Envia lote atual de instruções para execuçãoO lote atual é composto de todas as instruções inseridas desde o último comando GO ou desde o início da sessão ad hoc (ou script, se esse for o primeiro GO).Os usuários devem seguir as regras referentes a lotes. Por exemplo, algumas instruções de DDL devem ser executadas isoladamente de outras instruções Transact-SQL, separando-as com um comando GO.Escopo das variáveis é definido dentro de um lote

SQL AvanSQL Avanççadoado

Diretiva de lotesDiretiva de lotes

GO: “Exemplo”:/* bloco de comandos 1 */

DECLARE @EmpID varchar(11)

GO

/* bloco de comandos 2 */

SET @EmpID = ‘Teste’

O que aconteceria se estes blocos de comandos fossem executados?O que aconteceria se estes blocos de comandos fossem executados?

O escopo da variO escopo da variáável vel éé lote. O lote lote. O lote éé

conjunto instruconjunto instruçções ões separadas por GOseparadas por GO’’ss

Serão executados Serão executados apenas os lotes apenas os lotes

apapóós o comando GOs o comando GO

SQL AvanSQL Avanççadoado

Diretiva de lotesDiretiva de lotes

EXEC:Executa comandos do usuário

Comandos TransacSQLFunçõesLotes

Comandos são passados por parâmetro e o método retorna o status da execução: sucesso ou erro.

SQL AvanSQL Avanççadoado

ComentComentááriosrios

São códigos não executáveis de um lote de comandos

Geralmente utilizados para:indicar alguma ponto importante de um códigocolocar explicações curtas sobre uma função ou loteSuprimir execução de linhas de código sem removê-las

Comentário de linha: --

Comentário de bloco: /* ... */

SQL AvanSQL Avanççadoado

ComentComentááriosrios

Exemplo 1:USE northwind

SELECT productname

, (unitsinstock-unitsonorder) -- Calcula inventário

-- , supplierid

FROM products

GO

Suprimindo um linha Suprimindo um linha

---- indica ao interpretador de indica ao interpretador de comando que ignore o estiver comando que ignore o estiver àà sua sua

direita, atdireita, atéé o fim da linha o fim da linha

SQL AvanSQL Avanççadoado

Page 3: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

3

ComentComentááriosrios

Exemplo 2:/*

Este código recupera todas as linhas da tabela

products e exibe o preço unitário, o preço unitário

aumentado em 10% e o nome do produto.

*/

USE northwindSELECT unitprice, (unitprice * 1.1), productnameFROM productsGO

SQL AvanSQL Avanççadoado

Normalmente os comentNormalmente os comentáários de blocos são usados para rios de blocos são usados para comentar blocos de linhas de ccomentar blocos de linhas de cóódigo e colocar explicadigo e colocar explicaçções ões

sobre o que sobre o que éé executado no loteexecutado no lote

IdentificadoresIdentificadores

SQL AvanSQL Avanççadoado

São nomes ou identificação única para variáveis e funçõesOs identificadores padrão podem conter de 1 a 128 caracteres, inclusive letras, símbolos (_, @ ou #) e números.Não são permitidos espaços.Regras:

O primeiro caractere deve ser um caractere alfabético, de a-z ou A-Z.Os identificadores podem incluir letras, números ou os símbolos @, $, # ou _ .Os nomes de identificadores que começam com um símbolo têm utilizações especiais:

Um identificador que inicie com o símbolo @ indica um parâmetro ou variável local.Um identificador que inicie com um sinal de tralha (#) indica um procedimento ou uma tabela temporária.Um identificador que inicie com um sinal de tralha duplo (##) indica um objeto temporário global.

Os nomes de objetos temporários não devem ter mais de 116 caracteres, incluindo os sinais # ou ##, porque o SQL Server atribui um sufixo numérico interno aos objetos temporários.

IdentificadoresIdentificadores

SQL AvanSQL Avanççadoado

Exemplo:DECLARE @v1@v1 int

Identificadores delimitadosIdentificadores delimitados

SQL AvanSQL Avanççadoado

Os identificadores delimitados podem ser usados nas seguintes situações:

Quando os nomes contiverem espaços incorporadosQuando forem utilizadas palavras reservadas como nomes de objetos ou partes de nomes de objetos

Os identificadores delimitados devem ser colocados entre parênteses ou aspas duplas.

ConvenConvençção de Nomes de Identificadoresão de Nomes de Identificadores

SQL AvanSQL Avanççadoado

Mantém um padrão de escritaFacilita manutenção de códigoDiretrizes:

Quando possível, empregue nomes significativos.Use convenções de nomeação simples e fáceis. Use um identificador que diferencie tipos de objeto, principalmente para views e procedimentos armazenados. Mantenha a exclusividade dos nomes de objetos e usuários. Por exemplo, evite criar uma tabela sales(vendas) e um cargo sales dentro do mesmo banco de dados.

Tipos de dadosTipos de dados

SQL AvanSQL Avanççadoado

Os tipos de dados são atributos que especificam o tipo de informação que pode ser armazenado em uma coluna, parâmetro ou variável

Delimita o domínio dos valores possíveis para uma variável, parâmetro ou coluna

Page 4: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

4

Tipos de dadosTipos de dados

SQL AvanSQL Avanççadoado

Numéricos:Para representação de númerosInteiros: int, tinyint, smallint e bigintDecimais: numeric, decimal, money e smallmoney

Ponto flutuante: float e real

Tipos de dadosTipos de dados

SQL AvanSQL Avanççadoado

Numéricos:Para representação de númerosInteiros: int, tinyint, smallint e bigintDecimais: numeric, decimal, money e smallmoneyPonto flutuante: float e real

Datas:Representa datas ou períodos de tempo. Os dois tipos de dados de data são datetime, cuja precisão é de 3,33 milissegundos, e smalldatetime, cuja precisão é de intervalos de 1 minuto.

Tipos de dadosTipos de dados

SQL AvanSQL Avanççadoado

CharactersEste tipo de dados é usado para representar seqüências ou dados de caractere e inclui tipos de dados de seqüência de tamanho fixo, como char e nchar, e de tamanho variável, como varchar e nvarchar.

BináriosEste tipo de dados é muito semelhante aos tipos de dados de caractere em termos de armazenamento e estrutura, porém o conteúdo dos dados é tratado como uma série de valores de bytes. Os tipos de dados binários incluem binary e varbinary. O tipo de dados bit indica um valor de bit único igual a zero ou um.

Tipos de dadosTipos de dados

SQL AvanSQL Avanççadoado

Unique IdentifiersEste tipo especial de dados é um uniqueidentifier que representa um identificador global exclusivo, o qual é um valor hexadecimal de 16 bytes que deve ser sempre exclusivo.

SQL VariantesEste tipo de dados pode representar valores de vários tipos de dados para os quais há suporte no SQL Server, com exceção de text, ntext, image, timestamp e rowversion.

Tipos de dadosTipos de dados

SQL AvanSQL Avanççadoado

Image e TextEstes tipos de dados são estruturas objeto binário extenso (BLOB) que representam tipos de dados de tamanho fixo e variável para o armazenamento de dados binários e de caractere Unicode e não-Unicode grandes, como image, text e ntext.

TablesEste tipo de dados pode ser usado apenas para definir variáveis locais de tipo de tabela ou o valor de retorno de uma função definida pelo usuário.

CursorsEste tipo de dados é usado para programação em procedimentos armazenados e com interfaces de cliente de baixo nível. Ele nunca é usado como parte de uma instrução de DDL.

Tipos de dadosTipos de dados

SQL AvanSQL Avanççadoado

Definidos pelo usuárioEste tipo de dados é criado pelo administrador do banco de dados e se baseia nos tipos de dados do sistema.

Use os tipos de dados definidos pelo usuário quando várias tabelas devem armazenar o mesmo tipo de dados em uma coluna, e você deve garantir que as colunas tenham exatamente o mesmo tipo de dados, tamanho e nulidade.

Page 5: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

5

VariVariááveisveis

SQL AvanSQL Avanççadoado

Variável é um recurso de linguagem de programação para definição de identificadores que representam e armazenam um determinado valor na memória.Vários locais: DECLARE

Atribuição de valor é feita através do comando SET ou da execução de uma expressão como um SELECT

Escopo é do lote. Isto significa que?Nome da variável deve ser precedido por @

VariVariááveisveis

SQL AvanSQL Avanççadoado

Sintaxe de uso geral:DECLARE {@<nome> <tipo_de_dados>} [,...n]

SET @nome_da_variável_local = expressão

Exemplos:DECLARE @nome varchar(70)

DECLARE @soma int

SET @soma 0

VariVariááveisveis

SQL AvanSQL Avanççadoado

Exemplo:USE northwind

DECLARE @EmpID varchar(11)

,@vlName char(20)

SET @vlname = 'Dodsworth'

SELECT @EmpID = employeeid

FROM employees

WHERE LastName = @vlname

SELECT @EmpID AS EmployeeID

GO

FunFunçções do sistemaões do sistema

SQL AvanSQL Avanççadoado

O Transac-SQL permite a execução de funções pré-definidas do sistema, como:

Sum, avg, sqrt, length, ...

Consultar guia de referência para identificar todas as funções

Tipos de funções:Agem sobre um conjunto de dados e retornam alguma compilação dos mesmosUSE northwind

SELECT AVG(unitprice) AS AvgPrice

FROM products

GO

AVG calcula AVG calcula mméédiadia

FunFunçções do sistemaões do sistema

SQL AvanSQL Avanççadoado

Tipos de funções:Retornam um valor individual que opera a partir de nenhum ou de diversos valores escalares individuais. As funções escalares podem ser agrupadas nas seguintes categorias:

Configuração - Retorna informações sobre a configuração atual.Cursor - Retorna informações sobre cursores.Data e hora - Efetua uma operação sobre um valor inserido de data e hora e retorna um valor de seqüência, numérico ou de data e hora.Matemática - Efetua um cálculo com base em valores inseridos como parâmetros para a função e retorna um valor numérico.Metadados - Retorna informações sobre o banco de dados e os objetos do banco de dados.Segurança - Retorna informações sobre usuários e cargos. Seqüência de caracteresEfetua uma operação sobre um valor inserido de seqüência (char ou varchar) e retorna um valor de seqüência de caracteres ou numérico.Sistema - Efetua operações e retorna informações sobre valores, objetos e configurações no SQL Server.Estatística do sistema Retorna informações estatísticas sobre o sistema.Texto e imagem Efetua uma operação sobre um valor inserido de texto ou imagem ou sobre uma coluna, e retorna informações sobre o valor.

FunFunçções do sistemaões do sistema

SQL AvanSQL Avanççadoado

Exemplo:USE northwind

SELECT DB_NAME() AS 'database'

GO

Page 6: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

6

FunFunçções do sistemaões do sistema

SQL AvanSQL Avanççadoado

Tipos de funções:Podem ser usadas como referências de tabela em uma instrução Transact-SQL

Exemplo:SELECT *

FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM owner.titles')

GOEstEstáá funfunçção funcionarão funcionaráá sempre?sempre?

FunFunçções do sistemaões do sistema

SQL AvanSQL Avanççadoado

Função de conversão de data:SELECT 'ANSI:', CONVERT (varchar(30), GETDATE(), 102) AS Style

UNION

SELECT 'Japanese:', CONVERT(varchar(30), GETDATE(), 111)

UNION

SELECT 'European:', CONVERT(varchar(30), GETDATE(), 113)

GORepare que a instruRepare que a instruçção SELECT ão SELECT retorna dados que concatenadosretorna dados que concatenados

UNION agrupa conjunto de dadosUNION agrupa conjunto de dados

FunFunçções do sistemaões do sistema

SQL AvanSQL Avanççadoado

Resultado:Style

ANSI: 1998.11.20

Japanese: 11/20/98

European: 20 Nov 1998 16:44:12:857

FunFunçções do sistemaões do sistema

SQL AvanSQL Avanççadoado

Exemplo do uso da função DATEFORMAT:SET DATEFORMAT dmy

GO

DECLARE @vdate datetime

SET @vdate = '11/29/98'

SELECT @vdate

GO DATEFORMAT define o formato de DATEFORMAT define o formato de data padrão atualdata padrão atual

Repare que a data Repare que a data éé impressa (impressa (dmydmy) ) de forma diferente do padrão ANSI de forma diferente do padrão ANSI

FunFunçções do sistemaões do sistema

SQL AvanSQL Avanççadoado

Exemplo de função que interage com dados do SGDB:USE library

SELECT user_name(), app_name()

GO

FunFunçções do sistemaões do sistema

SQL AvanSQL Avanççadoado

Exemplo de função que obtém dados sobre o BD:USE library

SELECT COLUMNPROPERTY(OBJECT_ID('member'), 'firstname', 'AllowsNull')

GO

Page 7: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

7

OperadoresOperadores

SQL AvanSQL Avanççadoado

Operadores são símbolos que efetuam cálculos matemáticos, concatenações de seqüências de caracteres e comparações entre colunas, constantes e variáveis. É possível combinar e utilizar os operadores em condições de pesquisa. A ordem em que os operadores serão processados baseia-se em uma precedência predefinida.Quatro tipos de operadores: aritméticos, de comparação, de concatenação de seqüências de caracteres e lógicos

OperadoresOperadores

SQL AvanSQL Avanççadoado

Aritméticos:Aditivos: + e –Multiplicativos: *, / e %

Comparação:Retornam verdadeiro ou falso=, <, >, <=, >= e <>

Concatenação:Somente com dados String: +

LógicosUtilizados para conectar o resultado de mais de uma expressãoOR, AND e NOTUsados na cláusula WHERE

OperadoresOperadores

SQL AvanSQL Avanççadoado

Precedência:Agrupamento primário: ( )

Aritmético Multiplicativo: *, / e %Aritmético Aditivo: – e +

Concatenação de seqüências de caracteres: +

Lógico NOT: NOTLógico AND: AND

Lógico OR: OR

ExpressõesExpressões

SQL AvanSQL Avanççadoado

Combinação de campos e variáveis com operadores e funções para retornar um resultado

Tipo de retorno depende dos elementos da expressão

ExpressõesExpressões

SQL AvanSQL Avanççadoado

Exemplo:USE northwind

SELECT OrderID, ProductID

,(UnitPrice * Quantity) as ExtendedAmount

FROM [Order Details]

WHERE (UnitPrice * Quantity) > 10000

GO

Elementos de Controle de FluxoElementos de Controle de Fluxo

SQL AvanSQL Avanççadoado

elementos de linguagem que controlam o fluxo da lógica em uma instrução

a função CASE que permite usar uma lógica condicional em um único registro de cada vez, em uma instrução SELECT ou UPDATE

Page 8: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

8

Elementos de Controle de FluxoElementos de Controle de Fluxo

SQL AvanSQL Avanççadoado

Exemplo – nível de instrução:USE northwind

IF EXISTS (SELECT * FROM orders WHERE customerid = 'frank')

PRINT '*** Cliente não pode ser excluído ***'

ELSE

BEGIN

DELETE customers WHERE customerid = 'frank'

PRINT '*** Cliente foi excluído ***'

END

GO

Elementos de Controle de FluxoElementos de Controle de Fluxo

SQL AvanSQL Avanççadoado

Exemplo – nível de registro:DECLARE @n tinyintSET @n = 5IF (@n BETWEEN 4 and 6)BEGIN

WHILE (@n > 0)BEGINSELECT @n AS 'Número', CASE

WHEN (@n % 2) = 1THEN 'ÍMPAR'

ELSE 'PAR'END AS 'Tipo‘

SET @n = @n - 1END

ENDELSE

PRINT 'SEM ANÁLISE'GO

ViewsViews

SQL AvanSQL Avanççadoado

Definição:São tabelas que representam uma visão de um conjunto de dados de uma ou mais tabelas.

Não armazenam nenhum dado, apenas fornecem a visualização para estes de forma diferente.

VIEW == SELECT

ViewsViews

SQL AvanSQL Avanççadoado

Exemplos:Um subconjunto de registros ou colunas de uma tabela base: subconjunto das pessoas de uma tabela de pessoas com idade > 30 anos.Uma união, intersecção ou associação de duas ou mais tabelas base: Pessoas com idade > 30 e que são do sexo masculinoUm resumo estatístico de uma tabela base: tabela que mostra os pedidos com uma coluna totalizando o valor dos seus itens.Um subconjunto de outra view ou alguma combinação de views e tabelas base.

ViewsViews

SQL AvanSQL Avanççadoado

Vantagens:Visualização focalizada

Tirar a complexidade da visualização dos dados, como por exemplo, uniões de tabelas restrições sobre os conjuntos

Organização de dados para exportaçãoPermissão de acesso com restrições

Desempenho, pois o resultado fica “armezanado”

ViewsViews

SQL AvanSQL Avanççadoado

Sintaxe:CREATE VIEW propr.nome_da_view [(coluna [,n ])]

[WITH {ENCRYPTION | SCHEMABINDING | VIEW_METADATA} [,n ]]

AS

instrução_select

[WITH CHECK OPTION]

Page 9: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

9

ViewsViews

SQL AvanSQL Avanççadoado

View no Transact:USE Northwind

GO

CREATE VIEW dbo.EmployeeView ASSELECT LastName, FirstnameFROM Employees

GO

SELECT * from EmployeeView

GO

ViewsViews

SQL AvanSQL Avanççadoado

Padronização:Segue a mesma verificação dos identificadores

Nomes devem ser únicosÉ fortemente recomendado fazer distinção entre padrão de nomes de tabelas e de views:

Tabela: PessoasView: View_Pessoas_Masculino

ViewsViews

SQL AvanSQL Avanççadoado

Só podem criar views usuários com permissão de administradores do BD

Definir usuário dba com proprietário de todas as tabelas

Qualquer usuário com permissões mínimas no sistema, por padrão, consegue visualizar os dados de uma view.

ViewsViews

SQL AvanSQL Avanççadoado

Restrições:A instrução CREATE VIEW não pode incluir as cláusulas COMPUTE ou COMPUTE BY. A instrução CREATE VIEW não pode incluir a palavra-chave INTO.A instrução CREATE VIEW só poderá incluir a cláusula ORDER BY se a palavra-chave TOP for usada.As views não podem fazer referência a tabelas temporárias.As views não podem fazer referência a mais de 1.024 colunas.A instrução CREATE VIEW não pode ser combinada com outras instruções Transact-SQL em um único lote.

ViewsViews

SQL AvanSQL Avanççadoado

Exemplo 2:USE NorthwindGOCREATE VIEW dbo.OrderSubtotalsView (OrderID, Subtotal)

ASSELECT OD.OrderID,SUM(CONVERT(money,(OD.UnitPrice*Quantity*(1-Discount)/100))*100)

FROM [Order Details] ODGROUP BY OD.OrderIDGO

SELECT * FROM OrderSubtotalsViewGO

ViewsViews

SQL AvanSQL Avanççadoado

Views para fornecer um modo conveniente de examinar informações de duas ou mais tabelas associadas em um local central:Neste exemplo, ShipStatusView associa as tabelas Customers(Clientes) e Orders (Pedidos).USE NorthwindGOCREATE VIEW dbo.ShipStatusViewASSELECT OrderID, ShippedDate, ContactNameFROM Customers c INNER JOIN Orders oON c.CustomerID = O.CustomerIDWHERE RequiredDate < ShippedDateSELECT * FROM ShipStatusViewOrderID ShippedDate ContactNameGO

Page 10: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

10

ViewsViews

SQL AvanSQL Avanççadoado

Encriptação:Usar a opção WITH ENCRYPTION na criação da view

Criptografa as entradas da tabela syscomments, critografando a definição da view

Para descriptografar somente removendo e criando novamente a view.

Pode ser interessante guardar uma cópia do script de criação da view em algum lugar (arquivo) seguro

ViewsViews

SQL AvanSQL Avanççadoado

Exercício:Criar a view: página ?? Sem a opção de encriptação

Ver os dados da tabela syscomments

Apagar a view e criar de novo com a opção de encriptaçãoVer novamente os dados da tabela syscomments

ViewsViews

SQL AvanSQL Avanççadoado

Exercício:Crie a tabela Pessoas no transact-SQL, com os campos nome, idade e sexo

Insira cinco registros nesta tabela; sendo 3 homens e duas mulheres. Três destas pessoas tem idade maior que 30.

Crie uma view para representar as mulheres com idade maior que trinta.

Altere os dados e apenas faça mais um comando de seleção simples na view.

ViewsViews

SQL AvanSQL Avanççadoado

Alterando de definição da view

Exemplo:USE Northwind

GO

ALTER VIEW dbo.EmployeeView

AS

SELECT LastName, FirstName, Extension

FROM Employees

ViewsViews

SQL AvanSQL Avanççadoado

Atenção:Se você definir uma view com uma instrução SELECT * e, depois, alterar a estrutura das tabelas subjacentes adicionando colunas, as novas colunas não aparecerão na view. Quando todas as colunas são selecionadas em uma instrução CREATE VIEW, a lista de colunas é interpretada apenas quando você cria a view pela primeira vez. Para ver as novas colunas na view, você deve alterá-la.

ViewsViews

SQL AvanSQL Avanççadoado

Apagando uma viewDROP VIEW <nome da view>

Apague a view definida no exercício anterior

Page 11: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

11

ViewsViews

SQL AvanSQL Avanççadoado

Atualização dos dados através das views épossível considerando as seguintes restrições:

Que seja proveniente de uma única tabela e que contenha todos os seu campos não nulos

Não possua funções de agregaçãoPoderão ocasionar erros se afetarem colunas às quais a view não faz referência.

ViewsViews

SQL AvanSQL Avanççadoado

Otimização de desempenhoArmazenamento de dados de consultas completas

Joins com views é mais rápido do que com várias tabelas

Evitar aninhamento de views.Podem esconder problemas com resultadosExemplo das páginas 49-50

ViewsViews

SQL AvanSQL Avanççadoado

Práticas recomendadas:Nomes consistentes e com um padrão que os distinguem das tabelas; facilitando a identificação das viewsDbo como proprietário: facilita utilização, já que, por ser o usuário default, não é necessário colocar o nome do usuário proprietário da view no momento de usá-la.Verifique dependências dos objetos antes de excluí-los

sp_denpends

Se for necessário esconder a definição de uma view, não apague esta definição da tabela syscomments; use a opção WITH ENCRYPTION nos comandos CREATE VIEW ou ALTER VIEW.Cuidado views aninhadas, tenha certeza de sua real necessidade; elas podem esconder problemas com resultados.

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Stored proceduresColeção nomeada de instruções TransactSQLque é armazenada no servidor.Suporte a recursos de programação

São funções ou procedimentos, logo encapsulam execução repetida de código (mesmo código executado em lugares diversos)

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

TiposArmazenados no BD do sistema.

Fornecem informações das tabelas do sistemaPor padrão, precedidos por “sp_”São funções do sistemaUsados por qualquer BD

Procedimentos de armazenamento localUso restrito

Procedimentos temporários locais (#) ou globais (##)Locais ao usuário ou globais para todas as sessões

Procedimentos externos (construídos como DLL).Armazenados fora do BDPrefixo “xp_”

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

CaracterísticasInstruções para executar operações sobre o BDPermite passagem de parâmetros

Retorno de status da execução

Parâmetros de saída

Page 12: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

12

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

ProcessamentoCriaçãoPrimeira consulta, coloca o plano de consulta respectivo no cache.

Cache alocado conforme necessidade

Cache de procedimentos

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Processo de criação:CodificaçãoVerificação sintática.

Em caso erro não será criado nada.

Armazenamento da tabela de sistema sysobjects e texto na syscomments

Armazenamento é feito dentro da BD atual

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Comando de criação: CREATE PROCEDURECria o procedimento e armazena na BDA criação pode referenciar tabelas, view, variáveis, ...O que é criado dentro do procedimento não tem vida externa ao mesmoPrimeiro testar o código e depois realizar o armazenamento do mesmoUma instrução CREATE PROCEDURE não pode combinada com outras instruções SQL em um único lote (assim como a VIEW).Deve ter permissões para CREATE PROCEDURE.Tamanho máximo de um procedimento é de 128Mb.

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Sintaxe CREATE PROCEDURECREATE PROC nome [;número]

[{@parâmetro tipo_dado}

[VARYING][=padrao][OUTPUT]][,...n]

[{RECOMPILE|ENCRYPTION|”ambos”}]

[FOR REPLICATION]

AS

Instrução_sql[...n]

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Exemplo 1:USE Northwind

GO

CREATE PROC dbo.OverdueOrders

AS

SELECT * FROM dbo.Orders WHERE

RequiredDate < GETDATE() AND ShippedDate IS NULL

GO

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Diretrizes para criação:Recomendo que o usuário dbo possua todos os objetos do BD

Sempre especifique o dbo como proprietário dos procedimentos, tabelas, views e etc. que você criar

Considere as permissões necessárias em todos os objetos em que a procedure precisa referenciar.

O ideal é se logar no gerenciador do banco como administrador, na hora de criar ou alterar objetos do sistema.

Idealmente, uma procedure realiza uma açãoEvitar uso de objetos temporários, por questões de desempenho.Prefira sp_executesql do que EXECUTE

Page 13: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

13

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Executando um procedimento:EXEC {[@status retorno=] {nome_procedimento[;número]|@var_nome_procedimento}

}

[[@parâmetro={valor|@variável[OUTPUT]

|[DEFAULT]][,...n]

[WITH RECOMPILE]

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Executando um procedimento:EXEC OverdueOrders

Possível combinar EXEC dentro de um INSERT

Inserir dados com o retorno da execução de uma procedure

Exemplo da página 69.

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

AlteraçãoAltera código de uma procedure existenteSintaxe é parecida com a CREATE

Ver página 70.

ALTER PROC vai alterar o conteúdo da PROC dentro da tabela syscommentsExemplo da página 71

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Remoção de proceduresInteressante executar comando sp_dependsantes de excluir um registro, para verificar as dependências.

Sintaxe:DROP PROCEDURE {nome_proc}

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Usando parâmetros de entradaPermitem passagem de valores externos para o procedimento. Generaliza o procedimento.Comando: CREATE PROC @param tipoConsidere:

Melhor verificar o que está se recebendo, por exemplo, evitar processar um procedimento com parâmetro nulo.Com valor padrão, execução possibilita que não se passe nenhum valor para um determinado parâmetro

Exemplo da página 76.

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Considerações sobre o exemplo:Ordem da declaração difere da ordem de passagem dos parâmetrosParâmetros @Region e @Fax não são especificados, porquê?No segundo exemplo, página 77, os parâmetros de passagem não indicam qual parâmetro eles estão se referenciando, porque eles são passados na ordem de declaração.

Page 14: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

14

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Parâmetros de retornoServem para retornar dados processados na procedure para quem a chamou.Sintaxe:

CREATE PROC xyz @x1 int OUTPUT

EXEC xyz @idade OUTPUT

Exemplo da página 78.

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Exercícios: crie um procedimento que retorne o maior entre dois númerosoutro para o menor

outro para retornar a média.

Teste os procedimentos criados...Calcular fatorial de um número.

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Tratamento de erros: Tratamento de mensagens para informar sucesso ou falha de um procedimento.Mensagens tanto para programador, quando para usuário.Retorno satisfatório / esclarecedor para quem invocou a função, de tal forma que este possa tratar um erro.Boa prática: verificar situações de erro (RN) antes de executar uma rotina.

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Tratamento de erros: Instrução RETURN:

Retorna para método anteriorRetorna um valor ou nãoTambém usada para retornar o status de execução: normalmente 0 para êxito e valores negativos para erros.

� Valores de -1 a -14 estão em uso no SQL Server

� Valores de -15 a -99 estão reservados

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Tratamento de erros: USE Northwind

GO

CREATE PROCEDURE dbo.GetOrders

@CustomerID nchar (10)

AS

SELECT OrderID, CustomerID, EmployeeID

FROM [Order Qry]

WHERE CustomerID = @CustomerID

RETURN (@@ROWCOUNT)

GO

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Função sp_addmessageInsere uma mensagem na tabela de mensagens do BD (sysmessages)Possibilitando assim, que o usuário que executou a procedure, identifique o código do erro que retornou de uma falha de execução da procedure

Page 15: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

15

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Função @@errorRetorna o número do erro que ocorreu na última execução Caso não tenha ocorrido erro, retorna zero

Faça o exemplo das página 85-87.

Crie uma mensagem personalizada para cada caso de erro, adicione na tabela de mensagens do sistema e mostre o erro gerado, se for o caso, no lote que executou a procedure.

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

Função RAISERRORGera um erro.Utilizada quando da verificação da possibilidade de um erro, lógico, de negócio ou de sistema.Pode ser utilizado para evitar o erro do SGBD e tratar o erro personalizado

Exemplo das páginas 89-90

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

ExercícioFazer pesquisa fonética em uma tabela do BD. Algoritmo Soundex como procedure.Este algoritimo foi criado pelo governo Americano para recuperar nomes para a administração da Seguridade Social nos arquivos Nacionais. O algoritimo é simples e esta explicado a seguir.

Uma chave de busca é foneticamente igual à algum dado da tabela, se o código SOUNDEX dela for igual ao código SOUNDEX de um registro do dado da tabela.O código soundex é obtido conforme as seguintes regras:Se o código for maior que quatro caracteres os demais não serão considerados. Se for menor serão acrescidos Zeros.Você preserva o primeiro caractere da String e atribui valores conforme a tabela abaixo até 3 caracteres.As vogais A,E,I,O,U os caracteres Y,W e H e os demais caracteres não são considerados.Os caracteres numéricos são considerados apenas para a primeira casa , os demais não consideradosHavendo caracteres repetidos somente o primeiro será considerado

Procedimentos ArmazenadosProcedimentos Armazenados

Exercício

SQL AvanSQL Avanççadoado

R6

M, N5

L4

D, T3

C , S , G , J . K , Q , X , Z2

B, P, F, V1

Para palavras curtas0

Soundex da palavra BROWN

B = B

R = 6

O = -

W = 0

N = 5

B650

CaractereCódigo do caractere

Procedimentos ArmazenadosProcedimentos Armazenados

SQL AvanSQL Avanççadoado

FunFunçções do usuões do usuááriorio

SQL AvanSQL Avanççadoado

Recurso que permite a customização de funções para o usuário.

RestriçõesDevem retornar algum valor (escalar ou tabela)

Aceitam nenhum ou vários parâmetros de entradaNão aceitam parâmetros de saída

Page 16: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

16

FunFunçções do usuões do usuááriorio

SQL AvanSQL Avanççadoado

Tipos:Escalares

Funções simples, que processam alguma tarefa e retornam um escalar.

Com valor de tabela e instruçõesSemelhantes a procedimentosPermitem o uso numa instrução FROM e SELECT

Com valor de tabela in-lineAssemelha-se ao uso de views, porém com suporte à parâmetros

FunFunçções do usuões do usuááriorio

SQL AvanSQL Avanççadoado

Criação (CREATE FUNCTION):Veja sintaxe na página 94 do manual.GO

CREATE FUNCTION fn_NewRegion (

(@param1 NVARCHAR(30))

RETURNS NVARCHAR(30)

BEGIN

IF @param1 IS NULL

SET @param1 = ‘Não Aplicável’

RETURN @param1

END

FunFunçções do usuões do usuááriorio

SQL AvanSQL Avanççadoado

Uso da função em SELECT:SELECT LastName, City, dbo.fn_NewRegion(Region) AS Region, Country

FROM dbo.Employees

FunFunçções do usuões do usuááriorio

SQL AvanSQL Avanççadoado

Alteração:A alteração da função segue a mesma sintaxe de estrutura da criação, com exceção da palavra-chave do comando:

ALTER FUNCTION dbo.fn_NewRegion ...

Exclusão de funções:Semelhante aos demais objetos:

DROP FUNCTION dbo.fn_NewRegion

FunFunçções do usuões do usuááriorio

SQL AvanSQL Avanççadoado

Fazer exemplos das páginas:98 � funções escalares

99—100 � com valor de tabela101—102 � tabela in-line.

Discussão sobre os exemplos:Quais são as características de cada tipo?Em qual situação devemos usar qual tipo de função?

FunFunçções do usuões do usuááriorio

SQL AvanSQL Avanççadoado

Boas práticas:Funções complexas em dados pequenos

Cuidado com o encapsulamentoAs funções escondem a complexidade de uma consulta simples

Prefira funções à procedimentos

Funções in-line são parecidas com view, mas com uma vantagem: permitem parâmetros

Page 17: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

17

FunFunçções do usuões do usuááriorio

SQL AvanSQL Avanççadoado

Exercício:Converter o procedimento SoundexFunc para uma funçãoCriar tabela de Pessoa com os atributos nome e sobrenomeEscrever testes usando a SoundexFunc para validar o uso da funçãoPergunta:

A comparação usando SoundexFunc é mais lenta que a comparação direta de nomes, porque precisa converter o nome para um código antes de pesquisar; mata o índice!! Então qual seria a solução para utilizar o recurso do soundex sem perda de índices?

DisparadoresDisparadores (TRIGGERS)(TRIGGERS)

SQL AvanSQL Avanççadoado

São um tipo especial de procedimento que executados sempre que ocorre algum evento.

Por exemplo, pode-se criar uma trigger (ou disparador) para que, toda vez que seja inserido um registro em uma determinada tabela, seja criado algum outro registro de relacionamento.

A execução ocorre automaticamente, quando ocorre o evento ao qual a trigger está associada.

Inclusive não invocados manualmente

DisparadoresDisparadores (TRIGGERS)(TRIGGERS)

SQL AvanSQL Avanççadoado

Uso:Mais usado para manter integridade

Automatização de operações complexas em cascata

Customizar verificações e mensagensPermite trabalhar com estado atual e anterior de um dado

DisparadoresDisparadores (TRIGGERS)(TRIGGERS)

SQL AvanSQL Avanççadoado

Uso:Operações em cascata

Alteração e exclusão em cascata

Automatização de operações complexas de integridade

Por exemplo, verificar o estado de um atributo comparando com outras tabelas; caso ele esteja dentro de uma faixa de valores realiza alguma operação sobre os dados, caso contrário realiza outra. Digamos que pedido não pode pedir mais do que X unidades de um produto que está num limite mínimo em estoque.

DisparadoresDisparadores (TRIGGERS)(TRIGGERS)

SQL AvanSQL Avanççadoado

Uso:Customizar verificações e mensagens

Verifica alguma condição especial do sistema e lança um erro de lógica de negócios apropriado.

DesnormalizaçãoJunção de várias tabelas para consolidação de dadosModelo continua íntegro, mas a visualização pode ser feita conjunta

Permite trabalhar com estado atual e anterior de um dado

DisparadoresDisparadores (TRIGGERS)(TRIGGERS)

SQL AvanSQL Avanççadoado

Considerações:Podem conter ROLLBACK

Entretanto, se é necessário sair do script da trigger quando éfeito um ROLLBACK, é melhor usar comando RETURN para sair da execução

Em geral, os disparadores são reativos:Dado um evento um disparador é executadoRestrições e INSTEAD OF são executados antes do evento

Disparadores podem afetar várias linhas de dados@@ROWCOUNT

Page 18: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

18

DisparadoresDisparadores (TRIGGERS)(TRIGGERS)

SQL AvanSQL Avanççadoado

Criação (CREATE TRIGGER)CREATE TRIGGER nome ON tabela

{FOR | AFTER | INSTEAD OF | }

{INSERT | UPDATE | DELETE}

AS

IF UPDATE(coluna)

...

Instruções

DisparadoresDisparadores (TRIGGERS)(TRIGGERS)

SQL AvanSQL Avanççadoado

Criação (CREATE TRIGGER):FOR e AFTER são executados após as ações INSERT, UPDATE ou DELETEINSTEAD OF, pelo contrário, cancela a operação e desvia para execução do código do disparador

Conferir em casa as instruções que não podem estar presentes nas triggers (página 114)Fazer exemplo das páginas 115—116.

DisparadoresDisparadores (TRIGGERS)(TRIGGERS)

SQL AvanSQL Avanççadoado

Alterando uma trigger:Usar o comando ALTER TRIGGER, cuja sintaxe é igual a do comando CREATE TRIGGER

Descartando ou removendo uma trigger:DROP TRIGGER

Desativando / Ativando triggersALTER TABLE tabela {ENABLE | DISABLE} TRIGGER {ALL | nome da trigger [,...]}

DisparadoresDisparadores (TRIGGERS)(TRIGGERS)

SQL AvanSQL Avanççadoado

Funcionamento de triggerAcesso aos dados temporários e log para tomada de decisõesInsert: tabela insertedDelete: tabela deleted

Dados removidos das tabelas do BD

Update: registra em ambas as tabelas temporárias: deleted (os dados anteriores) e inserted (dados novos)

IF UPDATE(coluna) determina se um registro foi alterado ou não e executar instruções conforme o casoExemplo da página 122.

DisparadoresDisparadores (TRIGGERS)(TRIGGERS)

SQL AvanSQL Avanççadoado

Funcionamento INSTEAD OFPode ser associado a tabelas e views

Não pode ser associado a views com WITH CHECK OPTION

Executa operações antes da instrução de atualizaçãoExemplo das páginas 123—124

DisparadoresDisparadores (TRIGGERS)(TRIGGERS)

SQL AvanSQL Avanççadoado

Disparadores aninhados:Quando um disparador é executado, o resultado da sua execução inicia um novo disparador, que pode iniciar outro e ...Limite de 32 disparadores aninhadossp_configure habilita / desabilita aninhamento de triggers

sp_configure (‘nested triggers’, 0)

Aninhamento cíclio não é permitido / executadoAtenção para aninhamento com dados complexos

Page 19: SQL Avan çado - professor.unisinos.brprofessor.unisinos.br/ltonietto/ccti/sql/SQLAvancado.pdf · 2 Diretiva de lotes Lote: Conjunto de instruções de programação SQL Server processa

19

DisparadoresDisparadores (TRIGGERS)(TRIGGERS)

SQL AvanSQL Avanççadoado

Ativando recursividadeRecursividade é capacidade de um método em chamar ele mesmo para executar novamente, sob novas condições, até um ponto de parada.

Ativação:ALTER DATABASE ClassNorthwind SET RECURSIVE_TRIGGERS ON

Recursividade pode ser direta ou indireta (cíclica)

DisparadoresDisparadores (TRIGGERS)(TRIGGERS)

SQL AvanSQL Avanççadoado

Exercícios:Páginas 131—132Criar uma tabela pessoa com os campos: código, nome e sobrenome.Criar uma trigger que, quando um registro é inserido na tabela pessoa, ela, automaticamente, insere um registro equivalente na tabela PessoaSoundex com os dados de pessoa, passando pela função soundexTest. A tabela PessoaSoundex contém os seguintes campos: codigo, nomex, sobrenomex.Faça um procedimento que receba como parâmetro o nome de uma pessoa, e faça a pesquisa pelo nome soundex de uma pessoa, fazendo uso das tabelas acima. Lógica:

Converter o parâmetro para um código soundexProcurar na tabela PessoaSoundex os registro com códigos equivalentes, mas retornar os dados equivalentes na tabela Pessoa

ÍÍndicesndices

SQL AvanSQL Avanççadoado

UsoMelhorar o desempenho de consultas, agilizando (indexando) o acesso a dados

Criação de índicesCREATE INDEX

Remoção de índicesDROP INDEX

ÍÍndicesndices

SQL AvanSQL Avanççadoado

Índices automáticos:PRIMARY KEY e UNIQUE

Armazenados na tabela sysindexesUm índice funciona atribuindo uma chave de busca a um dado

O situação é: apenas um valor de chave para um dado (1 : 1)Pode acontecer de uma chave retornar mais de um dado.

Quando um índice de agrupamento é criado, todos os índices sem agrupamento são recriadosSintaxe e exemplo na página 135

ÍÍndicesndices

SQL AvanSQL Avanççadoado

Índices agrupamento:CLUSTERED

Exemplo da página 139, mostra índices duplicados

Sem agrupamento:NONCLUSTERED

ÍÍndicesndices

SQL AvanSQL Avanççadoado

Índices compostos:União mais de um campoPor exemplo, não permitir duplicidade de registros com valores de outras tabelas associadasDigamos uma tabela de relacionamento entre Pessoa e uma tabela de endereço. É possível colocar uma restrição com índice para que uma pessoa não dois vínculos para um mesmo endereço.Exemplo da página 141.Exercício: criar a situação exposta acima (pessoa x endereço)