Você está na página 1de 416

BANCO DE DADOS

T-SQL
Olá!
Sou Luiz Santana seu Professor.

Você pode me encontrar no LinkeIn


através do link abaixo:
https://www.linkedin.com/in/luizfsantana/

2
Luiz Santana
▪ Formação ▪ Certificações Microsoft
▫ ADS

▫ Pós-graduação em BD com ênfase em BI

MCP: Microsoft Certified Professional
MTA: Microsoft Technology Associate - Database
Fundamentals
▪ TI

▫ 8 Anos da área de Analytics MCE: Microsoft Certified Educator
▫ Engenheiro de Dados ▪ CMIE: Certified Microsoft Innovative Educator
▫ Professor de BD, NoSQL, T-SQL

▫ Instrutor de Certificação Microsoft

Microsoft Certified: Azure Fundamentals
MCT: Microsoft Certified Trainer

▪ Blog ▪ MCSA SQL 2016 Database Development: 70761+70762


▫ Consulta BD ▪ 70-461: Querying Microsoft SQL Server 2012/2014
▪ Microsoft Certified: Azure Data Fundamentals
▪ Empregos Atuais

▫ Engenheiro de dados Sênior – Analytics 10 (A10)
Certificações Scrum

▫ Professor de banco de dados – UNIT PE SFC: Scrum Fundamentals Certified
▪ SFPC: Scrum Foundation Professional Certificate

3 3
Minhas Bagdes

4 4
Dicas de estudo – Rotina de estudo

▪ Gerenciar tempo de estudo diário ▪ Sites / blogs


▫ Tempo: 30 minutos a 1 hora por
dia. ▫ https://www.w3schools.com/sql/def
▫ Praticar é essencial para fixação ault.asp
do conteúdo. ▫ https://consultabd.wordpress.com/
▫ https://www.dirceuresende.com/
▪ Perguntar sempre que tiver dúvida ▫ https://blogfabiano.com/
▪ Trazer duvidas do trabalho ou sobre os ▫ https://www.fabriciolima.net/
assuntos abordados para a aula. ▫ https://docs.microsoft.com/pt-
br/learn/

5 5
Dicas de estudo - Livros

▪ Microsoft Sql Server 2012 – Passo A ▪ Banco de Dados: princípios e prática


Passo – Desenvolvedor
▪ T- SQL Com Microsoft SQL Server
▪ SQL Server 2014 Para Iniciantes 2012 Express na Prática

▪ Microsoft – SQL Server 2014 Express – ▪ Microsoft Sql Server 2008:


Guia Prático e Interativo Fundamentos Em T-sql

6 6
Dicas de estudo - Aplicativos

▪ Manual SQL: ▪ Duolingo


https://play.google.com/store/apps/details?id https://play.google.com/store/apps/details?id
=com.felipe.manualsql =com.duolingo&hl=pt_BR

▪ Learn SQL: ▪ Trello


https://play.google.com/store/apps/details?id https://play.google.com/store/apps/details?id
=com.sololearn.sql =com.trello

7 7

Tente uma, duas, três vezes e se possível tente a
quarta, a quinta e quantas vezes for necessário. Só
não desista nas primeiras tentativas, a persistência é
amiga da conquista. Se você quer chegar a onde a
maioria não chega, faça o que a maioria não faz.

Bill Gates

8
Conteúdo do Curso
Conteúdo do curso

▪ Conceitos de bancos de dados


▪ Modelos de dados
▪ Modelo Relacional
▪ Entidade-Relacionamento
▪ Entidades
▪ Atributos
▪ Cardinalidades
▪ Normalização
▪ Instalando e acessando o SQL Server

10 10
Conteúdo do curso

▪ Entender os tipos de dados


▪ SQL
▪ Comandos SQL (DDL,DML,DQL,DTL,DQL)
▪ Índices e Schemas
▪ Desenvolvimento de consultas
▪ Funções SQL (texto, número, agregação e data)
▪ Programação T-SQL (Views, Procedures, Functions e Triggers)
▪ Conceitos básicos de administração de banco de dados
▪ Conceitos básicos de segurança de dados
▪ Agendando a prova
▪ Dicas da prova
▪ Simulados da prova

11 11
Certificação
MTA

12
MTA Database Fundamentals

▪ Microsoft Technology Associate ▪ Areas:


▪ É um excelente ponto de partida para quem ▫ Banco de dados
esta iniciando no ramo da tecnologia ou ▫ Desenvolvimento
quer se certificar. As certificações MTA ▫ Infraestrutura de TI
abrangem conceitos teóricos e técnicos
fundamentais de uma determinada ▪ Outras provas no link abaixo:
tecnologia, avaliando melhorar sua ▪ https://www.microsoft.com/pt-
credibilidade técnica. Observação: Os br/learning/mta-summary-
exames MTA não o qualificam o candidato a certification.aspx
receber o título MCP e também não são pré-
requisito para as certificações MCSA ou
MCSE.

13
MTA Database Fundamentals
▪ Teste 98-364 ▪ Você é estudante ou instrutor?
▪ Database Fundamentals ▫ Inscreva-se para seu exame na
Certiport.
▪ Avalia os conhecimentos básicos e habilidades
com bancos de dados, conceitos de modelagem, ▪ Não é mais estudante, mas tem interesse
linguagem SQL e sobre o SGBD Microsoft SQL em tecnologia?
Server. ▫ Registre-se com a Pearson VUE
▪ Idiomas: Inglês, chinês (simplificado), chinês ▪ A prova pode ser feita online ou presencial
(tradicional), francês, alemão, italiano, japonês, (verificar se existe um centro de aplicação
coreano, português (Brasil), russo, espanhol, no seu estado)
espanhol (América Latina) ▪ Site Microsoft sobre a certificação
▪ Preço: 77 dólares = 350 reais (com taxas de cartão ▫ https://www.microsoft.com/pt-
e cotação do dólar) BR/learning/exam-98-364.aspx

14
MTA Database Fundamentals
▪ Habilidades medidas ▪ O que vai ser contemplado na prova
▪ Este exame mede sua habilidade em executar as ▫ Compreendendo os principais
tarefas técnicas listadas ao lado. conceitos de bancos de dados (20-
25%)
▪ As porcentagens indicam o peso relativo de cada
▫ Criar objetos do banco de dados (20-
área de tópico principal no exame. Quanto mais
25%)
alta a porcentagem, mais perguntas você verá
▫ Manipular dados (25-30%)
nessa área de conteúdo no exame.
▫ Entender armazenamento de dados
▪ As perguntas podem testar, mas não estarão (15-20%)
limitadas aos tópicos descritos no texto com ▫ Administrar um Banco de dados (10-
marcadores. 15%)

15
MTA Database Fundamentals
▪ Compreendendo os principais conceitos de bancos de dados (20-25%)

▫ Compreender como os dados são armazenados em tabelas


▫ Compreender o que é uma tabela e como ela se relaciona com os dados que serão armazenados no
banco de dados, colunas/campos, linhas/registros

▫ Compreender os conceitos de banco de dados relacional


▫ Compreender o que é um banco de dados relacional, a necessidade de sistemas de gestão de banco
de dados relacional (RDBMS ou SGBDs) e como as relações são estabelecidas

▫ Compreender a linguagem de manipulação de dados (DML)


▫ Compreender o que é DML e qual a sua função em bancos de dados

▫ Compreender a linguagem de definição de dados (DDL)


▫ Compreender como o T-SQL pode ser usado para criar objetos de bancos de dados, como tabelas e
exibições

16
MTA Database Fundamentals
▪ Criar objetos do banco de dados (20-25%)

▫ Escolher tipos de dados


▫ Compreender o que são tipos de dados, por que eles são importantes e como eles afetam os
requerimentos de armazenamento

▫ Compreender tabelas e como criá-las


▫ Propósito das tabelas; criar tabelas em um banco de dados usando a sintaxe ANSI SQL apropriada

▫ Criar exibições
▫ Compreender como usar as exibições e como criar exibições usando T-SQL ou um designer gráfico

▫ Criar criar procedimentos e funções armazenados


▫ Selecionar, inserir, atualizar ou excluir dados

17
MTA Database Fundamentals
▪ Manipular dados (25-30%)

▫ Selecionar dados
▫ Utilizar consultas SELECT para extrair dados de uma tabela, extrair dados usando junções, combinar
conjuntos de resultados usando UNION e INTERSECT

▫ Inserir dados
▫ Compreender como os dados são inseridos em um banco de dados, como usar afirmações INSERT

▫ Atualizar dados
▫ Compreender como os dados são atualizados em um banco de dados e como escrever os dados
atualizados usando as afirmações UPDATE apropriadas, atualizar usando uma tabela

▫ Excluir tabela
▫ Excluir dados de uma ou várias tabelas, garantir a integridade dos dados e integridade referencial
usando transações

18
MTA Database Fundamentals
▪ Entender armazenamento de dados (15-20%)

▫ Entender a normalização
▫ Entender as razões para normalização, os cinco níveis mais comuns de normalização, como
normalizar um banco de dados para a terceira forma normal

▫ Entender chaves primárias, estrangeiras e compostas


▫ Entender a razão para chaves em um banco de dados, escolher as chaves primárias apropriadas,
selecionar o tipo de dado apropriado para as chaves, selecionar os campos apropriados para chaves
compostas, entender a relação entre chaves primárias e estrangeiras

▫ Entender índices
▫ Entender índices clusterizados e não clusterizados e seus fins em um banco de dados

19
MTA Database Fundamentals
▪ Administrar um Banco de dados (10-15%)

▫ Entender os conceitos de segurança de banco de dados


▫ Entender a necessidade de proteger um banco de dados, quais objetos podem ser protegidos, quais
objetos devem ser protegidos, contas de usuários e funções

▫ Entender os backups e restauração de bancos de dados


▫ Entender os diversos tipos de backup, como completo e incremental, a importância dos backups,
como restaurar um banco de dados

20
Conceitos
de banco
de dados

21
Banco de dados
Banco de Dados: é um conjunto organizado Ex.: Para entender melhor o que é um
de dados, tipicamente armazenado em banco de dados, considere lista de
formato eletrônico. contatos do celular como um exemplo
simples.

Ele nos permite dar entrada, organizar e


recuperar dados rapidamente. Bancos de Dentro da lista telefônica, você teria uma
dados tradicionais são organizados por lista de registros - cada registro um
campos, registros e arquivos. contendo um nome, número de telefone,
tipo de contato e etc. Estas informações
únicas (nome, tipo de contato, número de
Simplificando, um banco de dados é um
telefone). Tudo isso é armazenado em
local de armazenamento de diversas
formato de um arquivo dentro do celular.
informações.

22
Tipos de banco de dados
Existem três tipos de bancos de dados com os quais você deve
estar familiarizado para fazer a escolha apropriada ao
desenvolver suas próprias tabelas de banco de dados:

• Bancos de dados de tipo plano (flat-type databases)


• Bancos de dados hierárquicos (Hierarchical databases)
• Bancos de dados relacionais (Relational databases)

Cada tipo de banco de dados possui seus próprios recursos de


design importantes.

23
Flat-type databases
Entendendo Bancos de dados de tipo plano Bancos de dados desse tipo são considerados
“planos” porque são tabelas bidimensionais
consistindo de linhas e colunas. Cada coluna
Bancos de dados de tipo plano são simplistas
pode ser referida como um campo (como o
em design. Eles são mais comumente usados
sobrenome de uma pessoa ou o número de
em formatos de texto simples. Como o propósito
identificação de um produto) e cada linha pode
deles é manter um registro por linha, eles
ser referida como um registro (como as
tornam o acesso, o desempenho e as consultas
informações de uma pessoa ou de um produto).
muito rápidos.

Um exemplo desse tipo de banco de dados


seria o que você encontraria em um arquivo .txt,
.csv ou .ini.

24
Hierarchical databases
Um banco de dados hierárquico é semelhante a
uma estrutura em árvore (como uma árvore
genealógica). Nesse banco de dados, cada
tabela “pai” pode ter vários filhos, mas cada filho
pode ter apenas um pai.

Se várias dessas tabelas estiverem vinculadas,


as tabelas do banco de dados começarão a
formar uma estrutura de árvore na qual cada pai
pode ter múltiplas tabelas filho e cada tabela
filho, por sua vez, podem ter seus próprios
filhos, mas nenhuma tabela filho única terá mais
de um pai.

25
Relational databases
Um banco de dados relacional é semelhante a um banco de
dados hierárquico. Diferentemente dos bancos de dados
hierárquicos, no banco relacional, uma tabela em um banco
de dados relacional pode ter vários pais.

Um exemplo de banco de dados relacional é mostrado na


imagem ao lado. A primeira tabela pai mostra os vendedores
dentro de uma empresa e a segunda tabela pai lista quais
modelos de produtos são vendidos pela empresa.

Enquanto isso, a tabela filho lista os clientes que compraram


modelos da empresa; essa tabela filho é vinculada à primeira
tabela pai pelo SalesNum e à segunda tabela pai pelo Model.
Essa tabalea mostra os produtos que o cliente comprou e o
vendedor que realizou a venda.

26
Modelo de Dados

▪ Um modelo de dados mostra a estrutura lógica de


um banco de dados, incluindo as relações e
restrições que determinam como os dados podem
ser armazenados e acessados.

27 27
Modelo
Relacional

28
Visão histórica do modelo de dados Relacional
O modelo relacional é um modelo de dados O modelo relacional foi mantido e
representativos que se baseia no princípio em aprimorado por Chris Date e Hugh
que todos os dados estão guardados em Darwen como um modelo geral de dados.
tabelas. Toda sua definição e teoria é baseada
na lógica de predicados e na teoria dos
conjuntos. No Terceiro Manifesto (1995) eles
mostraram como o modelo relacional
O conceito foi criado por Edgar Frank Codd em pode ser estendido com características de
1970, sendo descrito no artigo "Modelo orientação a objeto sem comprometer os
relacional de dados para grandes bancos de seus princípios fundamentais.
dados compartilhados". Na verdade, o modelo
relacional foi o primeiro modelo de dados
descrito teoricamente.

29
Estrutura do modelo de dados Relacional
Este modelo se preocupa com a ▪ Coluna - Também chamado de
descrição das tabelas, linhas e colunas. atributo, é a característica única da
tabela. Cada coluna deve ter um tipo
de dado que será o formato do dado
▪ Tabela – Local onde serão
ela armazenará as informações (texto,
armazenados todos os dados
valor numérico, imagem, etc.).
informados ao banco. Dentro da
tabela estão contidos as linhas e as
colunas. As tabelas se relacionam ▪ Linha - São os registros que foram
entre si, pode haver dezenas de armazenados na tabela. Também pode
relações dependendo de como o ser chamada de tupla ou dado.
banco foi modelado.

30
Estrutura modelo de dados relacional

31
Modelo
Entidade - Relacionamento

32
Entidade Relacionamento
▪ Foi definido por Peter Chen em 1976; ▪ Os objetos são classificados em
dois grupos:

▪ É chamado de “meta-modelo”;
▫ Entidades – Representadas
por um retângulo
▪ Permite obter resultados e esquemas
puramente conceituais sobre o
negócio a ser modelado; ▫ Relacionamentos –
Representados por um
losango
▪ Permite retratar a realidade
compreendendo o negócio através de
seus dados.

33
Estrutura modelo de ER

34
Entidade

35
Entidade
▪ Entidade: Representação abstrata dos objetos ▫ Conjunto de objetos sobre os quais se
do mundo real deseja manter informações no banco de
dados.
▫ São objetos que existem no negócio;

▫ Descrevem o negócio em si; ▫ Sua representação gráfica é feita através


de um retângulo com seu nome no
▫ Possui um significado próprio; interior. O nome deve ficar no singular.

▫ É a representação de uma Classe de


▫ Uma entidade pode ser um objeto
dados do negócio;
concreto, um fato, ou ainda um evento
que desejamos registrar e que possui
características próprias. Ex.: Pessoa,
Funcionário, Venda, Lista de produtos.

36
Entidades

37
Entidade Fortes
▪ Sua existência independe da entidade relacionada.

38
Entidade Fraca
▪ Sua existência depende da entidade relacionada.

39
Generalização / Especialização
▪ Quando uma entidade pode ser
subdividida ou agrupada em virtude
da proximidade de suas
características (atributos ou colunas).

▪ Existem dois tipos de


Generalização/Especialização:
▪ Total (representada pela letra t)
▪ Parcial (representada pela letra
p).

40
Generalização
▪ Generalização: Quando duas entidades
podem ser agrupadas, em virtude de
suas semelhanças (atributos em
comum), gerando uma superentidade.

▪ Ex.: As duas entidades tem em comum


os atributos email, endereco,
telefone,midias sociais e etc…

41
Especialização

▪ Especialização: Quando uma entidade


pode ser subdividida, herdando
atributos da entidade genérica e,
juntamente com seus atributos
específicos, compor a sua lista de
atributos.

42
Entidade Associativa
▪ Relacionamentos NxN entre duas ou mais
tabelas pode ser chamado informalmente de
Tabela associativa.
▪ Uma tabela associativa pode conter duas ou
mais tabelas referenciando os atributos
identificadores de cada tabela relacionada.
▪ Sua representação é feita a partir de um
retângulo colocado ao redor do losango do
relacionamento.

43
Relacionamento

44
Relacionamento
Relacionamento: É o fato que liga dois ▪ Através de um losango com o verbo no
objetos (entidades) no mundo real. interior e arestas que ligam as
entidades relacionadas.

Exemplos:
1. As Pessoas Moram em Apartamentos;
2. Os Apartamentos Formam Condomínios;
3. Os Condomínios Localizam-se em
logradouros (Ruas ou Avenidas);
4. Os logradouros Estão em uma Cidade.

45
Classificação dos Relacionamentos
▪ Relacionamento Binário
▪ São aqueles que envolvem duas ocorrências entidades.

46
Classificação dos Relacionamentos
▪ Relacionamento Ternário.
▫ São aqueles que envolvem três ocorrências de
entidades.

▫ Alguns relacionamentos ternários podem ser


convertidos em dois relacionamentos binários.

▫ Relacionamento ternário ou de maior grau não são


frequentes.

▫ Relacionamento Ternário PODE estar ocultando uma


ENTIDADE não percebida, concentrando sobre si
relacionamento com os demais. O fato (ou ação) que
liga as três entidades tende a tornar-se uma tabela
contendo referência das tabelas relacionadas. Esta
tabela pode ser chamada de entidade associativa.

47
Auto relacionamento
▪ Denominamos de auto-relacionamento
quando uma entidade está associada a
uma ou mais ocorrências da mesma
entidade, ou seja, quando a entidade se
relaciona com ela mesma.
▪ Ex: Funcionário (gerente) chefia
Funcionário (analista).

48
Atributos

49
Atributos
São propriedades da entidade. Os atributos
podem ser classificados como:

▪ Simples;
▪ Composto;
▪ Opcional;
▪ Multivalorado;
▪ Determinante;

67
Atributos Simples
▪ São atributos que podem assumir
apenas um valor por ocorrência.

▪ Também são chamados de


Monovalorados.

▪ Ex.: Atributo nome somente receberá


um valor por Cliente.

51
Atributos Compostos
▪ São atributos que podem ser divididos em outros
atributos. O atributo origem contém atributos
embutidos nele, ou seja, este atributo é
composto por mais informações. Na modelagem
ele é decomposto em atributos da própria
entidade.

52
Atributos Opcionais
▪ São atributos que não possuem a
obrigatoriedade de ocorrência
(preenchimento).

▪ Ex.: Para ser um funcionário não é


obrigatório o preenchimento da CNH,
supondo que existam funcionários sem
carteira de habilitação.

53
Atributos Multivalorados
▪ São atributos que podem assumir mais de um
valor por ocorrência.

▪ Quando um atributo começa a ter


características de uma entidade, ou seja,
começa a ter atributos que o caracterizam como
tabela.

▪ Os atributos multivalorados são convertidos em


uma nova entidade e contém um atributo que
faz relação com sua tabela de origem.

54
Atributos Determinantes
▪ É um atributo ou conjunto de atributos que têm
a capacidade de identificar unicamente uma
ocorrência em uma entidade.

▪ Também são conhecidos como identificadores


ou chaves primárias.

▪ Os atributos determinantes ainda podem ser


classificados como simples ou compostos.

55
Cardinalidade

56
Cardinalidade
É o número de ocorrências (vezes) que uma ▪ Cardinalidade Máxima: Número
entidade A que está associado com máximo de vezes que uma entidade A
ocorrências de uma entidade B. pode ocorrer em B. Podendo assumir o
valor de 1 ou N.

▪ Há três tipos:
▫ Um-para-Um; ▪ Cardinalidade Mínima: Número mínimo
▫ Um-para-Muitos ou Muitos-para-Um; de vezes que uma entidade A pode
▫ Muitos-para-Muitos; ocorrer em B. Podendo assumir o valor
de 0 ou 1.
▪ As cardinalidades são informadas
inversamente.

57
Cardinalidade

58
Cardinalidade
▪ Relacionamento de Um-para-Um (1 X ▪ Relacionamento de Um-para-Muitos (1
1): Cada elemento de uma entidade A X N) ou Muitos-para-Um (N X 1): Um
relaciona-se com um e somente um elemento de uma entidade A pode se
elemento da entidade B e vice-versa. relacionar com mais de um elemento da
entidade B e B somente com 1 de A.
▪ Nesse tipo de relacionamento a
cardinalidade mínima influência na
modelagem.
▫ OBS: Durante este tipo de
normalização é definido em que
tabela receberá a chave
estrangeira (referência de chave
primária de outra tabela).
Normalmente na tabela que
recebe a cardinalidade máxima N.

59
Cardinalidade
▪ Relacionamento de Muitos-para-Muitos ▪ Na nova entidade criada deve haver as
(N x N): Vários elementos de uma chaves primárias das tabelas de
entidade A podem se relacionar com origem, ou seja, criando uma
vários elementos de uma entidade B e associação entres as entidades
vice-versa. originais. Na nova tabela elas podem
ser tanto chaves primárias quanto
▫ Nesse tipo de relacionamento uma chaves estrangeiras.
nova entidade é criada para ▪ Boa prática: criar na nova tabela um
armazenar dados das entidades campo para tornar-se chave primária,
que estavam se relacionando deixando os campos de referência
inicialmente. apenas como chave estrangeira.

60
Cardinalidade

Relacionamento 1 x 1

61
Cardinalidade

Relacionamento 1 X N ou N X 1

62
Cardinalidade

Relacionamento N X N

63
Cardinalidade - Dicas
1. Perguntar quantas vezes a entidade A 3. No relacionamento N x N as chaves
se relaciona com a entidade B e vice estrangeiras caem na nova entidade
versa. criada. Essas chaves estrangeiras
podem ser ou não chaves primarias
nessa nova entidade.
2. Em todo relacionamento 1 x N ou N x
1, a chave estrangeira sempre é
adicionada na entidade que possuir 4. No relacionamento 1 x 1 as entidades
cardinalidade máxima N. podem ser unificadas em uma só ou
virar um relacionamento parecido com
o relacionamento 1 x N. Verificar as
cardinalidades mínimas elas indicaram
como ficará a tabela.

64
Cardinalidade em Relacionamentos Binários

58
Cardinalidade em Relacionamentos Ternários

59
67
Normalização

68
Normalização
Processo de eliminação de dados redundantes de Na normalização aplica-se as formas
determinado domínio (ou negocio), para obter maior
normais (ou seja regras de normalização),
eficiência, confiabilidade e a integridade dos dados.
para as melhor modelagem do domínio.

A normalização, por definição, é o processo de


organizar dados para reduzir a redundância, dividindo Existe atualmente 7 formas normais: 1ª
um banco de dados em duas ou mais tabelas e em FN, 2ª FN, 3ª FN, Boyce-Codd FN, 4ª FN,
seguida definindo as relações entre elas.
5ª FN, 6ª FN ou chave-dominio.

O objetivo dessa operação é isolar os dados de modo


que adições, exclusões e modificações que ocorrem Modelando as entidades até a 3ª FN,
em cada campo possam ser feitas em uma tabela e pode-se obter um banco bem normalizado
depois propagadas em todo o restante do banco de
e consistente.
dados usando esses relacionamentos definidos.

69
Passos para Transformação

1. Tradução inicial de entidades e respectivos atributos

2. Tradução de relacionamentos e respectivos atributos

3. Tradução de generalizações e especializações

70
Passo 1: Tradução inicial de entidades e respectivos atributos
▫ Cada entidade é traduzida para uma
tabela.

▫ Cada atributo da entidade constituirá


um campo da tabela criada.

▫ O atributo identificador da cada


entidade corresponde à chave
primária da tabela criada.

71
Passo 1: Tradução inicial de entidades e respectivos atributos
▪ Atributo multivalorado

▫ Cria-se uma tabela para cada


atributo multivalorado.

▫ A tabela contém um campo para


cada atributo multivalorado

▫ A tabela deve conter um campo


correspondente à chave primária da
entidade a que o atributo pertencia
(chave estrangeira).

72
Transformação do modelo conceitual em fisico
▪ Atributo composto

▫ Incluir cada atributo como campo da


própria tabela.

73
Passo 2: Tradução de relacionamentos e respectivos atributos
▪ Relacionamento ▪ Tabela Associativa
▫ A regra de tradução a ser adotada é ▫ Quando as entidades associadas tem
determinada pelas cardinalidades cardinalidade N:N.
mínima e máxima das entidades que ▫ O relacionamento é traduzido em
uma tabela (tabela associativa).
participam do relacionamento.

▫ A tabela criada deve conter os


▪ Tipos de tradução: atributos identificadores das
▫ Tabela associativa entidades relacionadas (tabelas
▫ Atributo referência em outra entidade de origem) e os atributos do
▫ Fusão de tabelas de entidades relacionamento.

74
Passo 2: Tradução de relacionamentos e respectivos atributos
▪ Tabela Associativa. Perceba que após a nova
tabela ser criada, as cardinalidades com as
tabelas de origem passam a ser 1 x N e N x 1.

75
Passo 2: Tradução de relacionamentos e respectivos atributos
▪ Atributo referência em outra entidade.
▪ Quando uma das entidades associadas tem
cardinalidade 1:N ou N:1.
▫ Ocorre a inclusão da chave primária da
tabela que possui cardinalidade
máxima 1 na tabela que possui
cardinalidade máxima N. Assim
fazendo referencia a sua tabela de
origem.
▫ Esse atributo adicionado na outra
tabela é denominado chave
estrangeira.

76
Passo 2: Tradução de relacionamentos e respectivos atributos
▪ Fusão de tabelas de entidades
▪ Quando o relacionamento é do tipo (1,1) x
(1,1), ou seja, máximas e mínimas iguais, as
entidades envolvidas no relacionamento são
fundidas em uma única tabela.
▪ Quando as cardinalidades são 1 x 1 porém
as cardinalidades mínimas são diferentes
(ex: 1,1 x 0,1), uma chave estrangeira é
adicionada na entidade fraca. Como no
exemplo ao lado.

77
Passo 2: Tradução de relacionamentos e respectivos atributos
▪ Relacionamento Ternário

▪ O relacionamento é transformado em uma


tabela, relacionada às outras tabelas através
de relacionamentos binários.

▪ São empregadas as regras de transformação


aplicadas a relacionamentos binários.

▪ O fato ou ação que une as três entidades,


tende a tornar-se uma tabela de ligação (ou
associação), contendo atributos chaves das
demais.

78
Passo 2: Tradução de relacionamentos e respectivos atributos

79
Passo 3: Tradução de generalizações e especializações
▪ Tipos de tradução
1. Criar uma única tabela para toda
hierarquia de
generalização/especialização.

2. Criar uma tabela para a entidade


genérica e uma tabela para cada
entidade especializada.

3. Criar uma tabela para cada


entidade especializada

80
Passo 3: Tradução de generalizações e especializações
▪ Criar uma única tabela para toda
hierarquia de entidades
generalização/especialização

81
Passo 3: Tradução de generalizações e especializações
▪ Criar uma tabela para a entidade
genérica e uma tabela para cada
entidade especializada

82
Passo 3: Tradução de generalizações e especializações
▪ Criar uma tabela para cada entidade
especializada, colocando em cada
tabela os atributos da entidade genérica.

83
Formas Normais

1ª FN – Tem como objetivo: 2ª FN – Tem como objetivo: 3ª FN – Tem como objetivo:

1. Identificar as entidades; 1. Encontrar-se na 1FN. 1. Encontrar-se na 2FN.


2. Adicionar atributos 2. Verificar a existência de
identificadores; dependência Funcional 2. Eliminar dependências transitiva.
3. Eliminar conjunto de dados 1. Dependência
repetidos: funcional total.
1. Eliminar dos atributos 2. Dependência
multivalorado funcional parcial.
2. Atributos compostos.
4. Não possuir tabelas
aninhadas.

84
Aplicando engenharia reversa
▪ A tela ao lado contém os registros dos
alunos e os cursos em que ele se
matriculou.

▪ VL. TABELA é o valor padrão do curso na


data da matricula.

▪ VL. PAGO é o valor efetivamente pago


pelo aluno decorrente de negociação de
desconto.

85
Aplicando engenharia reversa
▪ Esquema descrevendo os dados do aluno em uma tabela não normalizada:

▪ A tabela é considerada não normalizada porque apresenta redundância de dados ,


conforme observado no tabela com dados abaixo, outras situações que contrariam as
regras das formas normais.
▪ Tabela com os registros dos alunos:

86
Primeira Forma Normal (1FN)
▪ Constrói-se uma tabela para cada atributo multivalorado e para cada tabela
aninhada.
▪ Cada atributo composto é decomposto em atributos na própria tabela. Os atributos da
tabela aninhada também podem ser representados como atributos multivalorados

87
Primeira Forma Normal (1FN)
▪ Constrói-se uma tabela para cada atributo multivalorado e para cada tabela
aninhada.

88
Primeira Forma Normal (1FN)
▪ Cada atributo composto é decomposto em atributos na própria tabela.

89
Primeira Forma Normal (1FN)
▪ Tabelas normalizadas na 1FN.

90
Segunda Forma Normal (2FN) – Dependência Funcional
▪ Dependência Funcional

▪ Estabelece uma relação de atributos dentro da tabela. A dependência mais comum é


a funcional. A dependência funcional acontece sempre quando um atributo determina
outro.
▫ Ex: Código do cliente > Nome do cliente
▫ Lê - se:
▫ Para descobrirmos o nome do cliente (dentro de um conjunto de clientes),
primeiramente precisamos saber qual é o código dele. Assim, o
campo/atributo nome é dependente do campo/atributo código.

91
Segunda Forma Normal (2FN) – Dependência Funcional

92
Segunda Forma Normal (2FN) - Dependência Funcional Total
▪ Ocorre quando um ou mais atributos de uma entidade dependem totalmente da
chave primária composta (2 ou mais chaves primárias). Na tabela com esta
dependência deve apenas conter os atributos que dependem das 2 PKs.

93
Segunda Forma Normal (2FN) - Dependência Funcional Parcial
▪ Quando os atributos apenas dependem de sua chave primária. Constrói-se uma
tabela para acomodar as dependências funcionais parciais.

94
Segunda Forma Normal (2FN)
▪ Tabelas normalizadas na 2FN.

95
Terceira Forma Normal (3FN) - Dependência Transitiva
▪ Ocorre quando um coluna não chave primária depende funcionalmente de outra
coluna (ou colunas) não chave primária. Constrói-se uma nova tabela para a
dependência transitiva.

96
Terceira Forma Normal (3FN)
▪ Tabelas normalizadas na 3FN.

97
Tabelas Normalizadas

98
Tabelas Normalizadas

99
Exercício 01 – Marque as entidades na lista abaixo.

100
Exercício 02 – Identifique as possíveis entidades para as seguintes
organizações:

▪ Escola: aluno, professor, pessoa, disciplina, classe, turma, curso, sala...


▪ Aeroporto: pessoa, pf, pj, destino, origem, voo, funcionarios , check-in,
despaço...
▪ Hospital: pessoa, paciente, funcionarios, consulta, acompanhante,
consultorio, função...
▪ Hotel: pessoa, cliente , funcionarios, quartos, reserva, serviços, planos
de reserva...
▪ Time: pessoas, tecnico, jogadores, posição, funcionários, funções,
jogos...

101
Exercício 03 – Represente as entidades e os relacionamentos do
seguinte cenário:

Os livros são escritos por pelo menos um autor. Um autor pode escrever vários
livros.

Do livro deverá ser armazenado o título, o código ISBN, o número e o ano da


edição.

Dos autores deve-se armazenar: um código, nome, data de nascimento, país de


origem, titulação

Um livro é publicado por apenas uma editora, desta deve ser armazenado: nome,
cidade, UF, e-mail e todos os telefones de contato.

102
Exercício 04 – Represente as entidades e os relacionamentos do seguinte
caso:

Um funcionário deve ter somente uma profissão.

Um funcionário é designado para trabalhar em apenas um departamento. Um departamento


pode estar em diversas Filiais. Cada filial é situada em alguma unidade da federativa do Brasil,
podendo ter uma unidade da federativa com mais de uma filial.

Do Funcionário deve-se armazenar: Matricula, nome e salário.


Da profissão deve-se armazenar: código e descrição
Do departamento deve-se armazenar o nome e a sigla do departamento.
Da filial deve-se armazenar o endereço e os telefones.
Da unidade da federativa deve-se armazenar a sigla e o nome.

103
Exercício 05 – Construir um projeto de banco de dados

Construa um diagrama ER (apenas entidades e relacionamentos com cardinalidades máximas e mínimas) para
a Locadora de vídeos descrita abaixo.
A locadora trabalha com a locação de vídeos nacionais e internacionais. Uma entrevista com o gerente da
locadora resultou nas seguintes informações:

Os filmes devem ser locados por clientes previamente cadastrados.


O cliente pode locar quantos filmes quiser.
O filme pertence a uma determinada categoria (Drama, Ação, Aventura, etc.)
Os filmes são gravados em mídias que possuem um código de identificação. Um filme pode ser gravado em
várias mídias, mas uma mídia só pode conter um filme.
Cada mídia pode estar locada para no máximo uma pessoa em um determinado tempo, mas uma pessoa pode
alugar diversas mídias.
Em uma locação pode haver várias mídias assim como mídia pode estar em várias locações.

104
Exercício 06 – Construir um projeto de banco de dados

Utilizando o BRModelo modele o negócio. Aplicar as 3 FN (Formas Normais).


Uma floricultura deseja informatizar suas operações. Inicialmente, deseja manter um cadastro de todos os
seus clientes, armazenando informações como: RG, CPF, nome, telefone, e-mail e endereço. Dos produtos
vendidos deve-se armazenar: nome do produto, código da categoria, descrição da categoria, preço,
quantidade em estoque (ex: 10 unidades), quantidade de itens (que estão sendo comprados). Também é
necessário um cadastro dos vendedores contendo os atributos: matricula, nome, rg, cpf, endereço, salário,
e-mail, telefone, data de admissão, data de demissão e cargo. Durante a conversa com o dono da
floricultura, ele informou que deseja flexibilizar para o cliente ter várias opções de pagamento, da forma de
pagamento deve-se armazenar os seguintes campos: código, sigla, descrição.
Quando um pedido é realizado alguns dados são armazenados como: código da nota, data do pedido, além
de outros que podem surgir a partir da relação entre as entidades.
Continuação das regras no próximo slides.

105
Exercício 06 – Construir um projeto de banco de dados

Lembrar que:
a) Um cliente pode fazer vários pedidos, porém um pedido somente pode pertencer a um cliente
b) Um produto pode estar em vários pedidos, e este pedido pode conter vários produtos
c) Um vendedor pode liberar vários pedidos. Um determinado pedido somente pode ser liberado por um
vendedor
d) Um pedido pode ter várias formas de pagamento. Uma forma de pagamento pode ser utilizada em vários
pedidos;
e) Um produto pode ter apenas uma categoria. Uma categoria pode estar em diversos produtos.

106
Exercício 07 – Construir um projeto de banco de dados

Uma empresa deseja contratar os Nr_Contrato Número do contrato


seus serviços para desenvolver Dt_Contrato Data do contrato
um banco de dados com o Hr_Duracao Duração em horas da festividade
objetivo de controlar os contratos
CNPJ_Contratante CNPJ do contratante
de fornecimento de músicos para
Nm_Contratante Nome do contratante
festividades. Sendo o controle
atual feito na planilha eletrônica End_Contratante Endereço do contratante

ao lado, aplique as três formas Tl_Contratante Telefone fixo do contratante


normais. Leve em consideração Cd_Musico Códigos dos músicos contratados
se é um musico solo ou uma Nm_Musico Nomes dos músicos contratados
banda.
Cd_Funcao_Mus Códigos das funções do músico no contrato
Nm_Funcao_Mus Nomes das funções do músico no contrato
Vl_Musico Valor do músico no contrato)

107
Exercício 08 – Construir um projeto de banco de dados
Uma prefeitura deseja controlar os eventos de shows que realiza.
Os eventos são identificados por um código e um nome. Cada evento é realizado em
apenas um local e uma data especifica. Do local deve armazenar nome do local, cidade,
estado e bairro.
Cada evento é controlado por apenas um organizador.
Os organizadores de eventos serão previamente cadastros pela prefeitura os seguintes
dados: matricula, nome e telefone.
De um evento podem participar vários artistas, que deverão ser cadastrados na
prefeitura, onde deverá constar um código para cada artista, seu nome e cpf.
A prefeitura deseja registrar o cachê pago a cada artista por evento. Aonde existe um
vinculo entre artista e evento.
Cada artista tem apenas um estilo musical.

108
Exercício 09 – Construir um projeto de banco de dados
Uma instituição deseja desenvolver um aplicativo para otimizar as orientações que os professores dão aos alunos para
elaboração do TCC. Elabore um DER que atenda a seguintes regras estabelecidas:
Cada aluno está vinculado a um único curso e só tem um professor orientador.
A orientação são os encontros realizados entre o aluno e o professor. Cada encontro da orientação so pode conter um
professor e um aluno em uma determinada hora e data. O objetivo desta tabela é registrar todos os encontros feitos.
Em cada orientação realizada pode ser recomendado a leitura de vários artigos. Dos artigos deve-se armazenar o título, o
ano de publicação e os autores.
Das orientações deseja-se armazenar a data da orientação, hora de inicio , hora de fim , orientando e o orientador.
Dos orientandos deve-se armazenar o número da matricula, o nome, os telefones de contato e o e-mail.
Do orientador será armazenado o CPF, nome, titulação, telefones de contato e o e-mail.
Dos cursos deve-se registrar o nome do curso e a portaria de funcionamento do curso (número, data da portaria e data da
publicação no DOU).
Obs.: Utilizar generalização / especialização. Aluno e Professor se relacionam mais de uma vez neste modelo.

109
Microsoft
SQL Server

110
Sistema de Gerenciamento de Banco de Dados
SGBD ou Sistema de Gerenciamento de Banco As empresas levam em consideração
de Dados: São softwares que tem como alguns requisitos na hora de escolher seus
principal finalidade a manipulação e SGBD's, sendo alguns deles:
gerenciamento de informações armazenadas no
banco de dados.
▪ Tempo de resposta;
Entre seus principais objetivos esta o
▪ Segurança;
armazenamento e segurança dos dados,
geração e recuperação de arquivos, prevenção ▪ Preço;
de anormalidades, entre outras funcionalidades. ▪ Suporte;
▪ Compatibilidade com a nuvem;
Atualmente no ranking do DB Engines existem ▪ Quantidade de profissionais disponíveis
cerca de 343 SGBD's. no mercado.
▪ Entre outras funcionalidades.

111
TOP 20 – DB Engines
Principais SGBD's do mercado – db-engines 10. SQL Lite
(https://db-engines.com/en/ranking):
11. Cassandra
1. Oracle
12. Splunk
2. MySQL
13. MariaDB
3. Microsoft SQL Server
14. Hive
4. PostgreSQL
15. Teradata
5. MongoDB
16. Amazon Dynamo
6. IBM Db2
17. Solr
7. ElasticSearch
18. FileMaker
8. Redis
19. SAP HANA
9. Microsoft Access
20. SAP Adaptive Server

112
Microsoft SQL Server
É um sistema gerenciador de Banco de dados Antigamente o SQL Server era apenas utilizado
relacional (SGBD) desenvolvido e mantido pela para armazenamento de dados relacionais.
Microsoft. Essencialmente nesse modelo você armazena
dados estruturados no formato tabular (linhas e
colunas).
Suas linguagens de consulta primárias são
Atualmente o SQL Server passou a ser uma
Transact-SQL (T-SQL) e ANSI SQL.
PLATAFORMA DE SERVIÇOS DE DADOS.
Seus serviços foram ampliados para atender as
Distribuído em diferentes edições e com várias mais variadas áreas que utilizam dados como
ferramentas integradas, esse banco é capaz de Banco de dados Relacionais, Business
atender às demandas desde os mais simples Intelligence, Data Mining, ETL, Big Data, Data
negócios até os mais complexos cenários que Science.
lidam com grande volume de dados.

113
Microsoft SQL Server
É disponibilizado nas versões: Os links abaixo mostram as versões
disponíveis e uma comparação entre as
▪ Enterprise
mesmas.
▪ Standard
▪ Developer
https://www.microsoft.com/pt-br/sql-
▪ Express server/sql-server-2017-editions
▪ Azure

https://www.microsoft.com/pt-br/sql-
server/sql-server-2017-comparison

114
Microsoft SQL Server - Versões
▪ Enterprise ▪ Developer
É a versão completa com recursos datacenter, Esta edição é idêntica a edição Enterprise. Utilizada
virtualização ilimitada e BI. Esta versão não é por desenvolvedores para criar, testar e demonstrar
gratuita e o seu licenciamento é feito por núcleo. de maneira econômica os aplicativos baseados no
SQL Server. Esta edição é gratuita. Não se pode
utilizar para versão comercial
▪ Standard
▪ Express
Permite gerenciamento de bancos de dados
Banco de dados de nível básico gratuito ideal para
(relacionais e BI), oferece suporte a ferramentas aprendizado, além da criação de aplicativos que
de desenvolvimento comuns para rede local e em utilizam até 10 GB de dados. Esta edição também é
nuvem, assim, permitindo o gerenciamento gratuita.
eficiente de bancos de dados com mínimos
▪ Azure SQL Database
recursos de TI. Esta versão não é gratuita e o seu
Versão do banco de dados na nuvem da Microsoft.
licenciamento é feito por núcleo.

115
O Microsoft SQL Server - Features
Ao instalarmos o SQL Server temos a opção de ▪ Database Engine
escolher quais ferramentas queremos utilizar. Alguns ▪ Management Studio
conceitos devem ser compreendidos sobre uma
instalação do SQL Server.
▪ Analisys Service
▪ Reporting Services

Instância é uma instalação do SQL Server em uma


▪ Integration Services
máquina. Uma máquina pode conter várias instancias ▪ Data Quality Services
do SQL Server. ▪ SQL Agent
▪ Browser
▪ Full-Text Search
▪ Docs, help, entre outros.

116
Instalando e
acessando o
SQL Server

117
Instalando o Microsoft SQL Server
Para instalar o SQL Server deve-se acessar o site ▪ Algumas Features disponíveis para download
da Microsoft e realizar o download da versão no site da Microsoft ao baixar o SQL Server
desejada.
▪ LocalDB (SqlLocalDB)
A versão Express Advanced Services do SQL ▪ Express (SQLEXPR)
Server 2014 - idioma em inglês contém o
▪ Express with Tools (SQLEXPRWT)
Management Studio que é a ferramenta gráfica do
SQL Server. ▪ SQL Server Management Studio Express
(SQLManagementStudio)
▪ Express with Advanced Services
Obs.: A partir da versão 2016 a ferramenta gráfica
(SQLEXPRADV)
Management. O download deve ser feito
separadamente.

118
Requisitos do sistema – SQL Express
Sistema operacional compatível Espaço em disco rígido
Windows 10 ; Windows 7 Service Pack 1; Windows 8.1; 4,2 GB de espaço em disco
Windows Server 2008 R2; Windows Server 2008 R2 SP1;
Windows Server 2012; Windows Server 2012 R2
Limitações

Processador Microsoft SQL Server Express supports 1 physical


processor, 1 GB memory, and 10 GB storage
Intel - processador compatível com uma velocidade mínima
de 1 GHz ou mais rápido
Softwares necessários

RAM Habilitar Microsoft .Net Framework 3.5 SP1. e Baixar e


instalar Microsoft .Net Framework 4.0, instalar o JDK 1.7 ou
Mínimo de 512 MB para SQL Server Express with Tools e superior.
SQL Server Express with Advanced Services, e 4 GB para o
Reporting Services que é instalado com o SQL Server
Express with Advanced Services

119
Baixando o SQL Server

Link para download: https://www.microsoft.com/en-us/download/details.aspx?id=57473

120
Baixando o SQL Server

Selecionar a verão desejada, podendo ser 32 ou 64 bits

121
Instalando o
SQL Server

Após extrair a pasta com


os arquivos de
instalação. Achar o
arquivo com nome
setup.exe e executa-lo
como administrador.

122
Instalando o SQL Server

Para uma nova instalação do


SQL Server clicar em New
SQL Server stand-alone
installation or add features
on na existing installation.

123
Instalando o SQL Server

Aceitar os termos de licença


e clicar em Next.

124
Instalando o SQL Server

Na tela de Global Rules o


SQL Server ira verificar se
todos os requisitos do
sistema estão OK para
prosseguir com a instalação.

Caso algum item contenha


falha, corrigi-lo e executar o
Re-run novamente.
Caso os itens estejam ok
clicar em Next.

125
Instalando o SQL Server

Na tela Product Updates o


SQL Server checará se há
alguma feature do sistema
necessitando de download,
caso sim, ele solicita
permissão para instalação.

Após permissão concedida,


a tela de Install Setup Files
demonstra como esta a
instalação dos itens.

Uma vez finalizado o


download o botão Next fica
habilitado.

126
Instalando o SQL Server

Na tela Install Rules, o SQL


Server mostra quais regras
foram aprovadas para que a
instalação continue com
sucesso. Em caso de erro,
tentar corrigir e clicar no
botão Re-run (re-checar),
caso não haja erro clicar no
botão Next.

127
Instalando o SQL Server

Na tela Feature Selection,


devemos selecionar os itens
que iremos instalar no SQL
Server.
Uma vez selecionados, clicar
em Next.

128
Instalando o SQL Server

Na tela Instance Configuration o


SQL Server lhe dará 2 opções
para o nome da instancia.
Primeiro a padrão que
geralmente vem com o nome
MSSQL ou instância nomeada,
onde é possível informar no
nome desejado.

Ele também lista outras


instâncias já instaladas na
máquina através da lista Installed
Instances.

129
Instalando o SQL Server

Na tela Server Configuration, aba


Service Accounts o SQL Server
lista quais serviços serão
instalados, nome da conta e tipo
de inicialização. Há opção de
colocar um serviço como
desativado, manual e automático.

Após configurar os serviços clicar


na aba Collation.

130
Instalando o SQL Server

Na tela Server Configuration, aba


Collation, há opção de configurar as
características de escrita do SQL
Server. Por padrão o collate
principal é o Latin_General_CI_AS.

131
Instalando o SQL Server
Na tela Database Engine Configuration,
vamos configurar a aba Server
Configuration.

Na opção Authentication Mode existem


2 possibilidades, a primeira é o
Windows authentication mode, forma de
login com as credenciais do Windows. A
segunda forma é Mixed Mode, há
possibilidade de logar tanto com
credenciais do Windows quanto com o
usuário master do SQL Server. Lembrar
da senha utilizada para se logar
futuramente.

Na opção Specify SQL Server


administrators, caso venha vazio clicar
no botão Add Current User.

Clicar na aba FILESTREAM.

132
Instalando o SQL Server

Na tela Database Engine Configuration,


vamos configurar a aba FILESTREAM.

O Filestream nos permite salvar arquivos


e documentos dentro da base de dados.
Ex: PDF’s, Docx, Xlsx, áudio, vídeo, entre
outros.

Habilitar as três caixas de seleção que


estão na tela.

Após caixas habilitadas clicar Next.

133
Instalando o SQL Server

Na tela Ready to Install mostrará


todos os itens que serão
instalados. Após checar clicar em
Install.

134
Instalando o SQL Server

Na tela Installation Progress


mostrará o processo de
instalação.

Aguardar em torno de 30 a 40
minutos para que o processo seja
finalizado.

135
Instalando o SQL Server

Na tela Complete mostrará se


todos os itens foram instalados
com sucesso ou erro.

Após conferência dos itens clicar


em Close.

136
Acessando o SQL Server

Acessar o menu iniciar do SO e


clicar no ícone do SQL Server
2014 Management Studio.

137
Acessando o SQL Server

Duplo clique no ícone.

138
Acessando o SQL Server

O SQL Server começará a ser


carregado.

139
Acessando o SQL Server

Na tela de conexão do SQL Server


vemos algumas opções disponíveis,
no Server name será exibido o
nome instância configurada no
anteriormente na instalação.

No Authentication selecionar a
opção SQL Server Authentication,
no login informar sa (minúsculo) e a
senha configurada no momento da
configuração da instalação.

O usuário sa é o usuário
administrador do SQL Server;

Clicar em Connect.

140
Acessando o SQL Server

Uma nova conexão é aberta com a


instância instalada.

Os únicos bancos de dados


disponíveis após a instalação são os
bancos de dados de sistemas.

Databases > System Databases.

141
Banco de dados de sistema
Após instalação de cada instância, o SQL Server ▪ TempDB: Banco de dados temporário, é
possui uma estrutura de banco de dados de recriado sempre que a instância é reiniciada.
sistemas. Mantém os objetos temporários do banco de
dados (cursores, variáveis e etc.). O banco de
Banco de dados do sistema
dados TempDB utiliza o model no momento que
▪ Master: Guarda informações da instância é recriado, quando há uma inicialização ou
instalada, possui as configurações do reinicialiazação do sistema.
servidor, possui as informações sobre contas
de login, guarda a localização dos arquivos de
base de dados. ▪ MSDB: Da suporte ao SQL Server Agent,
guardando todas as informações de tarefas
▪ NUNCA APAGA-LO.
automatizadas o SQL Server, também
▪ Model: Banco modelo, serve para todos os armazena pacotes de ETL.
bancos de dados de usuário. Todas as bases
de dados utilizam as configurações do model.

142
Estrutura de arquivos – Arquivos MDF, LDF e NDF
Quando um banco de dados é criado no SQL ▪ LDF: Log data file. Protegem o SQL Server de
Server dois tipos de arquivos são gerados. Os falhas, como erros de usuários, falhas de disco
arquivos MDF e LDF. Pode-se ter os arquivos de e etc. Armazenam as transações. Uma
dados secundários chamados de NDF. transação primeiro é salva no arquivo de log e
posteriormente no arquivo de dados. Wal-Write
ahead log.
▪ MDF: Master data file. Armazenam tudo que
os usuários criam, como dados, índices,
procedures, usuários, roles, views e etc.
▪ NDF: Secondary data file. Não é obrigatório.
▫ Este São arquivos adicionais de dados
e ajudam a distribuir a quantidade de
dados do banco de dados.

143
Tipos de dados
do SQL Server

144
Categoria dos tipos de dados do SQL Server
No SQL Server, cada coluna, variável, ▪ Os tipos de dados em SQL Server são
organizados nas seguintes categorias:
expressão e parâmetro tem um tipo de
dados relacionado. O tipo de dado
▫ Númericos
especifica o que pode ser colocado no ▫ Numéricos exatos
objeto. A integridade do banco de dados ▫ Numéricos aproximados
depende decisivamente dos tipos de ▫ String
▫ Cadeias de caracteres
dados com escopo apropriado. ▫ Cadeias de caracteres Unicode
▫ Cadeia de caracteres binária
▫ Data e hora
Os tipos de dados que o objeto pode ▫ Outros tipos de dados
assumir são: dados inteiros, dados de
caractere, dados monetários, data e hora,
cadeias de caracteres binárias etc.

145
Tipos de dados
▪ Numéricos exatos ▪ Numéricos aproximados
▫ bigint ▫ float
▫ numeric ▫ Real
▫ bit
▫ smallint ▪ Data e hora
▫ decimal ▫ date
▫ smallmoney ▫ datetimeoffset
▫ int ▫ datetime2
▫ tinyint ▫ smalldatetime
▫ money ▫ datetime
▫ time

146
Tipos de dados
▪ Cadeias de caracteres ▪ Outros tipos de dados
▫ char ▫ cursor
▫ varchar ▫ rowversion
▫ text ▫ hierarchyid
▪ Cadeias de caracteres Unicode ▫ uniqueidentifier
▫ nchar ▫ sql_variant
▫ nvarchar ▫ xml
▫ ntext ▫ Tipos de geometria espacial
▫ Tipos de geografia espacial
▪ Cadeia de caracteres binária ▫ Table
▫ binary
https://docs.microsoft.com/pt-br/sql/t-sql/data-
▫ varbinary
types/data-types-transact-sql?view=sql-server-
▫ imagem
2017
147
Tipo de Dados Descrição Tamanho Máximo Tamanho (bytes)

Tamanho fixo, completado com


char(n) 8,000 caracteres Tamanho Definido 1 byte
espaços em bracos
Tipos String 2 bytes + número
varchar(n) Tamanho variável com limite 8,000 caracteres
Texto de caracteres
2 bytes + número
varchar(max) Tamanho variável com limite 1,073,741,824 caracteres
de caracteres
4 bytes + número
TEXT (substituir por varchar(max)) Tamanho variável 2GB de dados (texto)
de caracteres

Tamanho fixo com espaços em


nchar 4,000 caracteres Tamanho definido x 2
bracos

nvarchar Tamanho variável 4,000 caracteres

nvarchar(max) Tamanho variável 536,870,912 caracteres

NTEXT (substituir por nvarchar(max)) Tamanho variável 2GB de texto

binary(n) Tamanho fixo (binário) 8,000 bytes

varbinary Tamanho variável (binário) 8,000 bytes

varbinary(max) Tamanho variável (binário) 2GB

image Tamanho variável (binário) 2GB

148
Tipo de Dado Descrição Tamanho (bytes)

bit Número Inteiro que pode ser 0, 1 ou NULL 1 byte

Tipos tinyint Permite números inteiros de 0 a 255 1 byte


Numéricos
smallint Permite números inteiros entre -32,768 e 32,767 2 bytes

int Permite números inteiros entre -2,147,483,648 e 2,147,483,647 4 bytes

bigint Permite números inteiros entre -9,223,372,036,854,775,808 e 8 bytes


9,223,372,036,854,775,807

decimal(p,s) Precisão de número flutuante e número de escala. 5-17 bytes


Permite número de -10^38 +1 a 10^38 –1.
O parâmetro p indica o número total máximo de dígitos que podem ser
armazenados (ambos à esquerda e à direita do ponto decimal). p deve
ser um valor de 1 a 38. O padrão é 18.
O parâmetro s indica o número máximo de dígitos armazenados à
direita do ponto decimal. s deve ser um valor de 0 a p. O valor padrão
é 0.

149
Tipo de Dado Descrição Tamanho (bytes)

numeric(p,s) Precisão de número flutuante e número de escala. 5-17 bytes


Permite número de -10^38 +1 a 10^38 –1.
Tipos O parâmetro p indica o número total máximo de dígitos que podem ser
armazenados (ambos à esquerda e à direita do ponto decimal). p deve ser
Numéricos um valor de 1 a 38. O padrão é 18.
O parâmetro s indica o número máximo de dígitos armazenados à direita do
ponto decimal. s deve ser um valor de 0 a p. O valor padrão é 0

smallmoney Tipo de "Moeda" de -214,748.3648 a 214,748.3647 4 bytes

money Tipo de "Moeda" de -922,337,203,685,477.5808 a 8 bytes


922,337,203,685,477.5807

float(n) Precisão de número flutuante de -1.79E + 308 a 1.79E + 308.O parâmetro n 4 ou 8 bytes
indica se o campo deve conter 4 ou 8 bytes. float (24) contém um campo de
4 bytes e o float(53) mantém um campo de 8 bytes. O valor padrão de n é
53.

real Precisão de número flutuante de -3,40E + 38 a 3,40E + 38 4 bytes

150
Tipo de Dado Descrição Tamanho (bytes)

De 1 de janeiro de 1753 a 31 de dezembro de 9999 com uma precisão de


datetime 8 bytes
3,33 milisegundos
Tipos
Data datetime2
De 1º de janeiro de 0001 a 31 de dezembro de 9999 com precisão de 100
nanossegundos
6-8 bytes

smalldatetime De 1 de janeiro de 1900 a 6 de junho de 2079 com precisão de 1 minuto 4 bytes

Armazena apenas uma data. De 1 de janeiro de 0001 a 31 de dezembro de


date 3 bytes
9999

time Armazena um tempo apenas para uma precisão de 100 nanosegundos 3-5 bytes

datetimeoffset O mesmo que datetime2 com a adição de um deslocamento de fuso horário 8-10 bytes

Armazena um número único que é atualizado sempre que uma linha é criada
ou modificada. O valor do timestamp é baseado em um relógio interno e não
timestamp
corresponde ao tempo real. Cada tabela pode ter apenas uma variável
timestamp

151
Tipo de Dado Descrição

Outros Armazena até 8.000 bytes de dados de vários tipos de dados, exceto text, ntext e
sql_variant
Tipos timestamp

uniqueidentifier Armazena um identificador globalmente exclusivo (GUID)

xml Armazena dados formatados em XML. Máximo de 2GB

cursor Armazena uma referência a um cursor usado para operações de banco de dados

table Armazena um conjunto de resultados para processamento posterior

152
Dicas sobre os tipos de dados
▪ Analisar quantas informações serão ▪ É mais vantajoso usar VARCHAR ao invés de
armazenadas no campo da tabela. Se um CHAR. Mas Por quê?
perguntar até aonde aquela informação
pode crescer. ▫ Ex.: Um campo é do tipo CHAR (5),
mesmo que você o preencha com apenas
2 caracteres, ele ocupa em memoria 5
▪ É recomendável usar os tipos de dados
bytes.
String de comprimento fixo (char, nchar,
binary), quando os valores que estão
▫ Já o campo VARCHAR vai ocupar em
bytes apenas o que esta sendo inserido no
sendo armazenados tiverem um tamanho
campo.
consistente. Quando o tamanho não for
consistente utilizar os tipos String de
comprimento variável (varchar,nvarchar,
varbanary)

153
Dicas sobre os tipos de dados
▪ Para os tipos numéricos, é necessário ▪ Para os tipos Data, verificar se deseja
verificar até quando a informação vai armazenar apenas a data, data e hora
crescer. ou apenas a hora. A Microsoft
▫ Ex.: É melhor uma coluna recomenda usar DATETIME2 ao invés
Smallmoney ou Money uma coluna de DATETIME.
de preço de produto? Eu terei algum
preço que vai ultrapassar 200 mil de
valor?
▫ Quero armazenar o valor de 1 a 10
em uma coluna. Pode-se utilizar
TINYINT ao invés de INT, pois seu
range de dados vai de 0 a 255 e seu
consumo é apenas de 1 byte.

154
SQL:
Linguagem de
Programação
para
banco de dados
155
SQL
Structured Query Language ou Linguagem de O nome original da linguagem era SEQUEL,
Consulta Estruturada ou SQL, é a linguagem acrônimo para "Structured English Query
de pesquisa declarativa padrão para banco de Language" (Linguagem de Consulta
dados relacional (base de dados relacional). Estruturada, em Inglês), vindo daí o facto de,
Muitas das características originais do SQL até hoje, a sigla, em inglês, ser comumente
foram inspiradas na álgebra relacional. pronunciada "síquel" ao invés de "és-kiú-él",
letra a letra. No entanto, em português, a
O SQL foi desenvolvido originalmente no pronúncia mais corrente é letra a letra:
início dos anos 70 nos laboratórios da IBM em "ésse-quê-éle". [Wikipedia]
San Jose, dentro do projeto System R, que
tinha por objetivo demonstrar a viabilidade da
implementação do modelo relacional proposto
por E. F. Codd.

156
SQL
Embora o SQL tenha sido originalmente criado pela O SQL:1999 usa expressões regulares de
IBM, rapidamente surgiram vários "dialetos" emparelhamento, queries recursivas e gatilhos
desenvolvidos por outros produtores. Essa (triggers).
expansão levou à necessidade de ser criado e
adaptado um padrão para a linguagem. Esta tarefa
foi realizada pela American National Standards O SQL:2003 introduz características relacionadas a
Institute (ANSI) em 1986 e ISO em 1987. XML, sequências padronizadas e colunas com
valores de auto-generalização (inclusive colunas-
identidade).
O SQL foi revisto em 1992 e a esta versão foi dado
o nome de SQL-92. Foi revisto novamente em 1999
e 2003 para se tornar SQL:1999 (SQL3) e O SQL:2016 introduz a leitura e gravação de
SQL:2003, respectivamente. O SQL:2016 foi a JSON’s e a utilização de linguagens como R e
ultima versão lançada da linguagem. Python.

157
SQL
Tal como dito anteriormente, embora ▪ Variações do SQL ANSI
padronizado pela ANSI e ISO, a linguagem
possui muitas variações e extensões ▫ SQL Server: Transact-SQL
produzidos pelos diferentes fabricantes de ▫ Oracle: PL/SQL
sistemas gerenciadores de bases de ▫ PostgreSQL: PL/pgSQL
dados.
[Wikipedia]
Tipicamente a linguagem SQL ANSI pode
ser migrada de plataforma para plataforma
sem mudanças estruturais principais.

158
Grupo de comandos SQL
A linguagem SQL se subdivide em 5 grupos
de comandos. Alguns autores apenas DDL DML DQL DCL DTL
consideram 3 ou 4. Cada grupo tem seus CREATE INSERT SELECT GRANT BEGIN TRAN

comandos específicos, tendo cada um uma


finalidade especifica. ALTER UPDATE REVOKE COMMIT

▪ Obs.: Esta subdivisão pode ser diferente DROP DELETE DENY ROLLBACK

dependendo do treinamento e da
concepção de cada profissional de TRUNCATE MERGE

banco de dados.
USE

159
DDL: DATA DEFINITION LANGUAGE
O DDL é usado para criar , alterar e deletar objetos do ▪ Diferenças entre os comandos SQL
banco de dados. Podendo ser banco de dados, tabelas, Server DELETE e TRUNCATE
views, procedures, functions, indexes e etc. ▪ Truncar redefine os valores de identidade,
enquanto a exclusão não.

Seus Principais comandos são: ▪ Truncar remove todos os registros e não


aciona gatilhos.
▪ USE – Muda o context da janela de consulta.
▪ Truncar é mais rápido comparado a
▪ CREATE – Cria objetos no banco de dados. excluir, pois faz menos uso do log de
▪ ALTER – Altera objetos no banco. transações.
▪ DROP – Apaga objetos do Banco. ▪ Truncar não é possível quando uma tabela
é referenciada por uma Chave Estrangeira
▪ TRUNCATE – Apaga todos os registros de uma
ou tabelas são usadas na replicação ou
tabela, reiniciando o índice das colunas auto
com views indexadas.
incrementais.

160
DML: DATA MANIPULATION LANGUAGE
O DML é usado para a manipulação de registros no ▪ Obs.: Para a certificação MTA
banco de dados. Database Fundamentals o
Seus comandos são: comando SELECT é
categorizado como um
comando DML. (Verificar o
▪ INSERT – Insere registros no banco. livro oficial)
▪ UPDATE – Atualiza registros no banco.
▪ DELETE – Deleta /Apaga registros no banco.
▪ MERGE - Executa operações de inserção,
atualização ou exclusão em uma tabela de destino
com base nos resultados de uma junção com uma
tabela de origem.

161
DCL: DATA CONTROL LANGUAGE
O DCL controla a segurança dos dados, ▪ REVOKE – Desfaz uma permissão, seja
definido quem tem acesso a determinado tipo uma GRANT ou DENY
de operação.
Seus comandos são: ▪ DENY – Negar permissões de acesso a
dados
▪ GRANT – Usado para dar permissão a um
determinado usuário para executar um
procedimento.

162
DTL: DATA TRANSACTION LANGUAGE
O DTL é usado para a manipulação de transações ▪ Obs.1: Alguns SGBDs são auto-commit, ou
(inserção, alteração, remoção e consulta) no banco seja, uma vez executado comandos do tipo
de dados. DML os dados são gravados automaticamente
Seus comandos são: no banco de dados.

▪ BEGIN TRAN ou (BEGIN TRANSACTION) –


Utilizado para iniciar uma transação. ▪ Obs.2: Ao realizar a abertura de uma transação
com o BEGIN TRAN, a transação deve ser
finalizada com os comandos COMMIT ou
▪ COMMIT – Utilizado para gravar as transações ROLLBACK.
no banco.

▪ Alguns sistemas travam quando uma transação


▪ ROLLBACK – Utilizado para desfazer as é aberta e não é finalizada.
alterações de uma transação no banco.

163
DQL: DATA QUERY LANGUAGE
O DQL é usado para a consultar dados no
banco.

Seu comando é:

▪ SELECT – Usado para consultar


informação aos registro das tabelas do
banco de dados.

164
Dicas sobre os comandos SQL
É importante criar um padrão de codificação e ▪ O SQL utiliza o padrão ISO para datas, ou seja, o
nomenclatura dos objetos do banco de dados. Esse formato ANOMESDIA. Porém pode-se adicionar
processo facilita a leitura do código e futuras datas no formato ANO-MÊS-DIA ou
manutenções. DIA/MÊS/ANO.

Dicas: ▪ Virgula na linguagem SQL é separador de


▪ Os tipos de dados string (texto) e data são campos.
delimitados por aspas simples. ▫ Ex.: Campo1, campo2, campo3, ....
▫ Ex: 'Joao' ▪ Para dados números utilizar o ponto para separar
▫ Ex: '2019-01-01' os valores.
▪ Comentários no SQL Server ▫ Ex.: 149.99
▫ Linha: -- ▪ No comando SELECT o asterisco (*) significa que
▫ Bloco: /* */ todos os campos da tabela serão exibidos.

165
Comandos DDL
▪ CREATE ▪ Criando uma Tabela
▫ Sintaxe:
▫ CREATE OBJETO CREATE TABLE TB_DDL(
NOME_OBJETO; MATRICULA TINYINT PRIMARY KEY,
NOME VARCHAR(100) ,
▫ Criando banco de dados SEXO CHAR(1))

CREATE DATABASE BD_DDL;

▪ USE
▫ Carregando o banco de dados no contexto
da janela de consulta do SQL Server

USE BD_DDL;

166
Comandos DDL
▪ ALTER ▪ Alterando a tabela, excluindo o campo SEXO.
▫ Sintaxe:
▫ ALTER OBJETO NOME_OBJETO; ALTER TABLE TB_DDL
▪ Alterando a tabela, adicionando um novo campo DROP COLUMN SEXO;

ALTER TABLE TB_DDL


ADD DTNASC DATETIME, CPF CHAR( 11)

▪ Alterando a tabela, alterando o tipo de dados


campo SEXO de CHAR(1) para VARCHAR(15)

ALTER TABLE TB_DDL


ALTER COLUMN DTNASC DATE

167
Comandos DDL
▪ DROP ▪ Apagando Objetos do banco de dados
▫ Sintaxe
▫ DROP OBJETO ▫ DROP DATABASE TESTE;
NOME_OBJETO; ▫ DROP VIEW VW_TESTE
▫ DROP FUNCTION FN_TESTE
▪ Apagando tabela do banco de dados ▫ DROP PROCEDURE USP_TESTE
▫ DROP TRIGGER TR_TESTE

DROP TABLE TB_DDL;

▪ Obs.: Se existir ligação de chave estrangeira


não sera possível deletar a tabela.

168
Comandos DDL
▪ TRUNCATE
▫ Sintaxe
▫ TRUNCATE TABLE NOMETABELA;

▪ Apagando todos os registros da tabela

TRUNCATE TABLE TB_DDL;

169
SCRIPT DML, DCL, DQL, DTL
CREATE DATABASE BD_DML
USE BD_DML

CREATE TABLE TB_DML(


MATRICULA TINYINT PRIMARY KEY,
NOME VARCHAR(100) ,
SEXO CHAR(1))

ALTER TABLE TB_DML


ADD DTNASC DATETIME, CPF CHAR( 11)

ALTER TABLE TB_DML


ALTER COLUMN DTNASC DATE

ALTER TABLE TB_DML


DROP COLUMN CPF;

170
Comandos DML
▪ INSERT ▪ Inserindo um registro na tabela especificando os
campos
▪ Sintaxe:
▫ MANEIRA 1 INSERT INTO TB_DML
INSERT INTO TABELA (CAMPOS) (MATRICULA, NOME, DTNASC, SEXO)
VALUES (VALORES);
VALUES (1, 'PESSOA_A', '2000-12-10','M')

▫ MANEIRA 2
INSERT INTO NOMETABELA ▪ Utilizando o mesmo insert para inserir vários
VALUES (VALORES,VALORES) registros
INSERT INTO TB_DML (MATRICULA, NOME,
▫ Obs.: Quando não se especifica os
DTNASC, SEXO)
campos na hora do insert, deve-se
assumir a ordem de criação dos VALUES (2, 'PESSOA_B', '2000-12-10','M'),
mesmos na tabela. (3,'PESSOA_C','2000-01-01','F')

171
Comandos DML
▪ Inserindo um registro na tabela sem especificar os campos. Lembrar da
ordem de inserção das colunas no momento da criação da tabela.

INSERT TB_DML
VALUES (4, 'PESSOA_D', '2002-01-10','M')

▪ Inserindo dados numa tabela que foi resultado de um relacionamento n x n.

INSERT INTO LISTA_COMPRAS (CODPRODUTO, CODNF, QTD)


VALUES ('PRD0001', 'NF000001', 3)

172
Comandos DML
▪ UPDATE ▪ Atualizando o registro de um campo da tabela
▫ Sintaxe: funcionário

UPDATE TABELA UPDATE TB_DML


SET SEXO = 'F'
SET CAMPO = NOVO_VALOR
WHERE NOME = 'PESSOA_B'
WHERE CONDICAO = VALOR

▫ Atenção: Sempre utilizar filtros ▪ Atualizando dois campos de um registro da tabela


funcionário.
para utilizar este comando

UPDATE TB_DML
SET SEXO = 'F', DTNASC = '1997-07-01'
WHERE NOME = 'PESSOA_D'

173
Comandos DML
▪ DELETE ▪ Apagando o registro da tabela funcionário.
▫ Sintaxe
DELETE FROM TB_DML
DELETE FROM TABELA WHERE NOME = 'PESSOA_C'
WHERE CONDICAO = VALOR AND MATRICULA = 3

▫ Atenção: Sempre utilizar filtros


para utilizar este comando

174
Comando DQL
▪ SELECT ▪ Selecionando apenas algumas colunas da tabela.
▫ Sintaxe
SELECT <valor a ser exibido> SELECT
NOME,
OPCIONAL: FROM TABELA ou VIEW ou DTNASC
FUNCTION OU outros objetos. FROM TB_DML
▪ É possível executar um SELECT sem uma tabela. WHERE SEXO = 'F'
Podemos executa-lo para mostrar um valor fixo ▪ Selecionando todas as colunas da tabela e
ou exibir o nome de uma variável. filtrando por várias informações.
▪ Listando todas as colunas da tabela com todos os
registros. SELECT *
FROM TB_DML
SELECT * WHERE DTNASC > '1999-10-25'
FROM TB_DML AND SEXO = 'F'

175
Comandos DTL
▪ BEGIN TRANSANCTION / COMMIT / ▪ Abrindo uma transação no banco de dados para
ROLLBACK execução do comando UPDATE

▫ Sintaxe BEGIN TRAN


UPDATE TB_DML
BEGIN TRAN / BEGIN TRANSACTION SET SEXO = 'M'
WHERE NOME = 'PESSOA_D'
COMANDO SQL (DML,DCL, DDL)
COMMIT: Salvará a operação realizada na
COMMIT OU ROLLBACK base de dados e fechará a transação.

ROLLBACK: Irá desfazer a operação realizada


e fechará a transação.

176
Comandos DCL
▪ GRANT / REVOKE / DENY ▪ Desfazendo permissão dada do comando GRANT
▫ Sintaxe
REVOKE INSERT ON DBO.TB_DML TO USER_DCL

GRANT / REVOKE /DENY <Privilegio>


ON OBJETO_BD TO <Usuario>.
▪ Negando permissão do usuário dar SELECT na tabela

DENY SELECT ON DBO.TB_DML TO USER_DCL


▪ Dando permissão para o usuário executar o
comando SELECT na tabela. ▪ Executando consulta como usuário criado
CREATE USER USER_DCL WITHOUT LOGIN; EXECUTE AS USER = 'USER_DCL'

GRANT SELECT, INSERT ON DBO.TB_DML TO SELECT * FROM TB_DML

USER_DCL REVERT;

177
Permissões para os comandos DCL
▪ Lista de privilégios
Privilégio Descrição

SELECT Capacidade de executar instruções SELECT na tabela.

INSERT Capacidade de executar instruções INSERT na tabela.

UPDATE Capacidade de executar instruções UPDATE na tabela.

DELETE Capacidade de executar instruções DELETE na tabela.

REFERENCES Capacidade de criar uma restrição que se refere à tabela.

Capacidade de executar instruções ALTER TABLE para alterar


ALTER
a definição da tabela.
ALL não concede todas as permissões para a tabela. Em vez
ALL disso, concede as permissões ANSI-92 que são SELECT,
INSERT, UPDATE, DELETE e REFERENCES.

178
Restrições de
Domínio (Constraints)

179
Qual a finalidade?
▪ A principal finalidade das restrições de ▪ Lista das restrições
domínio é fazer com que os campos (ou ▫ Primary Key (Chave Primária)
atributos) da tabela não recebam qualquer ▫ Not Null (Não nulo)
tipo de dado e tenham um certo nível de ▫ Default (Padrão)
validação no momento dos comandos DML. ▫ Foreign Key (Chave Estrangeira)
▪ As restrições também são chamadas de ▫ Unique (Valor único na coluna)
constraints. ▫ Check (Checagem do valor na coluna)
▪ Obs.: Deve-se ponderar a utilização de
restrições de domínio na tabela, pois
muitas restrições podem tornar a utilização
da tabela inviável.

180
Identity - Extra
▪ Faz com que o atributo selecionado seja ▪ Criando uma tabela com um campo auto
incrementado automaticamente, ou seja, ele ira incremental.
gerar uma numeração automatica sem que seja
necessário informar o valor no Insert. CREATE TABLE tb_identity(
Cod INT IDENTITY PRIMARY KEY,
NOME VARCHAR(50)
▪ É utilizado com campos do tipo Inteiro. )

▪ No identity você pode informar qual o inicio da ▪ Criando uma tabela começando a numeração a partir
do número 1000 e incrementando de 1 em 1.
numeração e quanto será o incremento. Caso não
seja informado, implicitamente o SQL Server
aplica o valor (1,1) iniciando no número 1 e CREATE TABLE tb_identity (
incrementando 1. Cod INT IDENTITY (1000,1),
NOME VARCHAR (20)
)

181
Primary Key - PK
▪ Restrição que identifica o atributo como ▪ Criando chave primária no inicio da tabela com
identificador da tabela. constraint.
CREATE TABLE tb_pk (
▪ Quando uma tabela possui mais de uma
Cod INT CONSTRAINT pk_test PRIMARY KEY,
chave primária, é chamada de chave
Nome VARCHAR(50)
composta.
)
▪ Ao definir uma campo como PK, o SQL
Server cria um índice clusterizado na
▪ Criando chave primária no final do comando.
Deve-se referenciar o campo no parênteses.
tabela.
CREATE TABLE tb_pk (
▪ Boa pratica! Cod INT,
▫ Ao criar uma tabela sempre definir um Nome VARCHAR(50) ,
campo como chave primária. PRIMARY KEY (Cod)
)

182
Primary Key - PK
▪ Criando tabela com duas chaves primarias
▪ Adicionando chave primária, após criação de uma
CREATE TABLE tb_pk ( tabela sem pk, informando o nome da constraint
Cod INT,
Cod2 INT, ALTER TABLE tb_pk
nome VARCHAR(50) , ADD CONSTRAINT pk_test
PRIMARY KEY (Cod, Cod2)
PRIMARY KEY (Cod)
)

▪ Adicionando chave primária, após criação de uma


▪ Apagando uma constraint PK
tabela sem pk. Obs.: O que vai receber a
constraint PK, deve ter sido criado como NOT
ALTER TABLE tb_pk
NULL.
DROP CONSTRAINT pk_teste;

ALTER TABLE tb_pk


ADD PRIMARY KEY(Cod);

183
Foreign Key - FK
▪ Restrição que define que um atributo A faz ▪ Criando chave estrangeira na criação da
referência ao atributo B que é chave de outra tabela com constraint.
tabela.
▪ A chave estrangeira é definida no momento da CREATE TABLE tb_fk_marca (
normalização.
Cod INT PRIMARY KEY IDENTITY,
▪ O atributo deve ser do mesmo tipo do campo Nome VARCHAR(50)
referência de sua tabela de origem.
)
▪ O atributo (FK) deve ser referenciado a qual
atributo da tabela de origem ele faz correlação. CREATE TABLE tb_fk_carro(
▪ Para a chave estrangeira funcionar, a tabela que Placa varchar(6) PRIMARY KEY,
contém o atributo chave deve estar criada. modelo VARCHAR(50),
▪ Para um registro ser referenciado na tabela com a fk_marca INT FOREIGN KEY REFERENCES tb_fk_marca(Cod)
FK, o registro tem que existir na tabela de origem. )

184
Foreign Key - FK
▪ Adicionando uma chave estrangeira após criação ▪ Adicionando uma chave estrangeira com
de tabela. Supondo que o campo não foi constraint após criação de tabela. Supondo que o
referenciado como fk. campo não foi referenciado como fk.

ALTER TABLE tb_fk_carro ALTER TABLE tb_fk_carro

ADD FOREIGN KEY (fk_marca) ADD CONSTRAINT fk_marca_carro

REFERENCES tb_fk_marca (COD); FOREIGN KEY (fk_marca) REFERENCES tb_fk_marca (COD);

▪ Apagando constraint

ALTER TABLE tb_fk_carro


DROP CONSTRAINT fk_marca_carro

185
Unique
▪ Restrição que garante que o valor de um ▪ Criando tabela com a restrição UNIQUE
determinado campo não se repita dentro de uma
tabela, ou seja, os valores serão únicos. CREATE TABLE tb_unique(
Cod INT PRIMARY KEY IDENTITY,
▪ A restrição PRIMARY KEY possui uma restrição Nome VARCHAR(50),
UNIQUE implícita.
CPF CHAR(11) CONSTRAINT UQ_CPF UNIQUE
)
▪ Em uma tabela pode haver várias restrições
Unique, porém somente uma restrição chave de
PK por tabela.
▪ Ele cria um índice não clusterizado na tabela.
▪ A coluna com essa restrição pode aceitar apenas
um valor nulo (NULL).

186
Unique
▪ Adicionando unique em um campo já criado ▪ Apagando uma constrait UNIQUE

ALTER TABLE tb_unique ALTER TABLE tb_unique


ADD UNIQUE (cpf); DROP CONSTRAINT UQ_CPF;

▪ Adicionando unique em um campo já criado.


especificando o nome da constraint.

ALTER TABLE tb_unique


ADD CONSTRAINT UQ_CPF UNIQUE (cpf);

187
Not Null
▪ Not Null é a restrição que impede a coluna de ▪ Criando tabela com campos não nulos e campos nulos
receber valores nulos no momento da inserção ou
CREATE TABLE tb_notnull(
atualização.
Cod INT PRIMARY KEY IDENTITY,
NOME VARCHAR(50) NOT NULL,
DT DATE NULL
▪ O SQL Server coloca como padrão NULL quando
)
não é informado se o campo não pode receber
valores nulos.
▪ Colocando not null em uma campo já criado
ALTER TABLE tb_notnull
ALTER COLUMN DT DATE NOT NULL
▪ Boa prática: Sempre explicitar se o campo é
NULL ou NOT NULL na criação da tabela.
▪ Removendo o not null em uma campo já criado
ALTER TABLE tb_notnull
ALTER COLUMN DT DATE NULL

188
Default
▪ Restrição que coloca um valor como ▪ Criando tabela com a restrição default
padrão em uma determinada coluna.
CREATE TABLE tb_default(
Cod INT PRIMARY KEY IDENTITY,
▪ Ao realizar um comando de Insert, e o valor Nome VARCHAR(50),
de um determinado campo não é dtInsert DATE CONSTRAINT DF_DATA
informado, a restrição Default ira preencher DEFAULT (GETDATE())
o campo não informado com o valor padrão )

definido pela Constraint.

189
Default
▪ Adicionando default em uma coluna já criada ▪ Apagando constraint DEFAULT

ALTER TABLE tb_default ALTER TABLE tb_default


ADD CONSTRAINT df_dt_insert ALTER COLUMN dtInsert DROP DEFAULT
DEFAULT getdate() FOR dtInsert

190
Check
▪ A restrição CHECK é usada para limitar os ▪ Criando tabela com o check
valores que pode ser inseridos em uma coluna.
CREATE TABLE tb_check(
▪ Se você definir uma restrição CHECK em uma Cod INT PRIMARY KEY IDENTITY,
coluna, ela permitirá apenas inserir determinados NOME VARCHAR(50) NOT NULL,
valores que atendam a lógica da checagem. VALOR NUMERIC (6,2)
CHECK (VALOR > 0),
LETRA CHAR(1)
CHECK (LETRA IN ('A', 'B', 'C'))
)

191
Check
▪ Adicionando check a um campo já criado. ▪ Apagando uma constraint check

ALTER TABLE tb_check ALTER TABLE tb_check


ADD CHECK (valor > 0) DROP CONSTRAINT CHK_VALOR

▪ Adicionando check atribuindo nome a constraint

ALTER TABLE tb_check


ADD CONSTRAINT CHK_VALOR (valor > 0)

192
Desenvolvendo
Consultas

193
O que será abordado sobre consultas
Objetivo:
▪ Entender aonde cada informação se encaixa dentro de
uma consulta para melhor otimiza-la e que faça retornar
o resultado esperado.

▪ Abordaremos
▫ Cláusulas de um comando SELECT
▫ Operadores lógicos
▫ Operadores Relacionais
▫ Operadores Aritméticos (ou matemáticos)
▫ Operadores Auxiliares

194
Script para trabalhar o desenvolvimento de consultas

CREATE DATABASE BD_CONSULTAS;


USE BD_CONSULTAS;

CREATE TABLE TB_FUNC (


MATRICULA INT PRIMARY KEY IDENTITY,
NOME VARCHAR (255) NOT NULL,
DATANASCIMENTO DATE NOT NULL,
SALARIO MONEY NULL,
DATAADMISSAO DATE DEFAULT (GETDATE()),
DATADEMISSAO DATE NULL,
INICIOFERIAS DATE NULL,
FIMFERIAS DATE NULL,
STATUS_FUNC VARCHAR (20) CHECK (STATUS_FUNC IN ('ATIVO','INATIVO','FERIAS','LICENÇA','INSS')),
VALOR INT)

195
Script para trabalhar o desenvolvimento de consultas
INSERT INTO TB_FUNC (NOME, DATANASCIMENTO,SALARIO,DATAADMISSAO,DATADEMISSAO,INICIOFERIAS,FIMFERIAS,
STATUS_FUNC, VALOR)
VALUES ('ANA MARIA', '2000-01-01', 1200.55, '2018-05-01',NULL,NULL,NULL, 'ATIVO', 1),
('JOSE HENRIQUE', '1998-11-20', 2575.55, '2005-09-01','2017-12-01',NULL,NULL, 'INATIVO', 7),
('ANA MARIA', '2002-08-21', 950.00, '2019-01-01',NULL,NULL,NULL, 'ATIVO', 6),
('LUAN FELIX', '1991-09-28', 3500.00, '2013-04-01',NULL,NULL,NULL, 'ATIVO', 1),
('FELIPE JOSE DOS SANTOS', '1996-01-11', 4000, '2011-05-01','2015-01-29',NULL,NULL, 'INATIVO', 2),
('MARCELO JOSE', '1980-10-05', 7000, '2000-05-01',NULL,'2019-05-01','2019-06-01', 'ATIVO', 2),
('MARIANA MARIA', '1987-02-08', 4500, '2010-01-01',NULL,NULL,NULL, 'INSS', 3),
('JULIANA MARIA DOS SANTOS', '2002-01-01', 2000, '2017-05-01',NULL,NULL,NULL, 'LICENÇA', 5),
('MARIA ALICIA', '2001-01-01', 950, '2018-05-01',NULL,NULL,NULL, 'ATIVO', 4)

INSERT INTO TB_FUNC (NOME, DATANASCIMENTO,SALARIO,STATUS_FUNC, VALOR)


VALUES ('MARIA ALICIA', '2003-09-18', 950, 'ATIVO', 3)

196
Entendendo a estrutura de um comando SELECT
▪ O comando SELECT possui uma estrutura, e é ▪ Como escrever uma consulta simples
executado em uma ordem lógica para retornar as
informações.
SELECT
<* / campos_da_tabela>
▪ Cláusulas FROM <tabela/view/functions_tablevalue>
▫ SELECT – Selecionar a lista de resultados WHERE <Filtros>
▫ FROM – Aonde vou buscar meus dados ORDER BY <campos> ASC/DESC
▫ WHERE – O que eu quero filtras dos dados
▫ GROUP BY – Agrupa os dados
▫ HAVING – Filtra o valor do agrupamento
▫ ORDER BY – Ordena o resultado

197
Entendendo a estrutura de um comando SELECT
▪ Uma consulta é executada
logicamente na ordem como
é mostrada na imagem ao
lado.

198
Ordenando os dados
▪ ORDER BY: Maneira em que os dados são ▪ DESC – Descendente – Decrescente
ordenados após a realização de uma consulta a uma
tabela. Quando não for informado como se quer ▫ Ex.1:
ordenar, o SQL coloca como padrão o ASC.
▪ ASC – Ascendente – Crescente SELECT *
▫ Ex.1.: FROM TB_FUNC
SELECT * ORDER BY NOME DESC
FROM TB_FUNC
ORDER BY NOME ▫ Ex.2

▫ Ex.2: SELECT *
SELECT * FROM TB_FUNC
FROM TB_FUNC ORDER BY NOME ASC, SALARIO DESC
ORDER BY NOME , SALARIO

199
Operadores Lógicos
▪ São utilizados quando queremos trabalhar com o ▪ AND: E lógico. Avalia as condições e devolve
relacionamento de duas ou mais condições ao um valor verdadeiro caso ambos sejam
mesmo tempo. corretos. Ambos os valores devem ser
verdadeiros para que o operador AND traga o
resultado.
▪ Operadores Lógicos
▪ Ex.1:

Operador Descrição
SELECT
AND E lógico
MATRICULA, NOME, DATADEMISSAO, STATUS_FUNC
OR OU lógico FROM TB_FUNC

NOT Negação WHERE DATADEMISSAO IS NULL


AND STATUS_FUNC = 'ATIVO'

200
Operadores Lógicos
▪ OR: OU lógico. Avalia as condições e devolve um ▪ NOT: Negação lógica. Devolve o valor
valor verdadeiro se algum for correto. contrario de expressão, ou seja, a negação do
filtro. O NOT inverte o resultado lógico de uma
condição, ou seja se a condição for verdadeira
▪ Ex.1: Uma das condições pode ser verdadeira ou o resultado é falso, e se a condição for falsa o
não. resultado é verdadeiro.

SELECT
▪ Ex.1: Negando a condição do filtro utilizado
MATRICULA, NOME, DATADEMISSAO, STATUS_FUNC
FROM TB_FUNC
WHERE DATADEMISSAO IS NULL SELECT

OR STATUS_FUNC = 'ATIVO' MATRICULA, NOME, SALARIO, STATUS_FUNC


FROM TB_FUNC
WHERE NOT STATUS_FUNC = 'ATIVO'

201
Operadores Aritméticos
▪ São responsáveis pelas operações e pelos cálculos ▪ Ex.1: Utilizando operadores para realizar
matemáticos simples obtidos com T-SQL. operações com os campos da tabela

▪ Tabela de operadores aritméticos SELECT


NOME,
Operador Descrição SALARIO + 50 AS ADICAO,
SALARIO - 20 AS SUBTRACAO,
Adição +
SALARIO * 1.20 AS AJUSTE_20_PCENTO,
Subtração - SALARIO / 2 AS DIVISAO
FROM TB_FUNC
Multiplicação *
WHERE STATUS_FUNC = 'ATIVO'
Divisão /

Resto da divisão %

202
Operadores Relacionais
▪ São responsáveis pelo estabelecimento de ações ▪ Tabela de operadores relacionais
de comparação, são utilizadas para a definição
Operador Descrição
de condições em que há necessidade de
comparação entre dois ou mais valores. > Maior que
< Menor que
= Igual a

>= Maior ou igual a

<= Menor ou igual a


<> Ou != Diferente de

203
Operadores Relacionais
▪ Ex.1:

SELECT *
SELECT *
FROM TB_FUNC
FROM TB_FUNC
WHERE SALARIO >= 2000
WHERE STATUS_FUNC = 'ATIVO'
AND SALARIO <= 4000

SELECT *
SELECT *
FROM TB_FUNC
FROM TB_FUNC
WHERE DATANASCIMENTO >= '1999-01-01'
WHERE STATUS_FUNC <> 'ATIVO'

204
Operadores Auxiliares
▪ São operadores que facilitam a definição de ▪ Tabela de operadores Auxiliares
condições a serem utilizadas com o comando
DQL. Operador Descrição
IS NULL Verifica se o campo é nulo

IS NOT NULL Verifica se o campo não


esta nulo
BETWEEN Verifica se o valor esta
numa faixa de valores
IN Verifica se o valor existe
em uma lista de valores
LIKE Busca melhorada de
valores do tipo texto.

205
Operadores Auxiliares
▪ IS NULL: verifica se o campo em questão tem
valores nulos. SELECT *
FROM TB_FUNC
WHERE DATADEMISSAO IS NULL
▪ IS NOT NULL: verifica se o campo em questão não
possui valores nulos.
SELECT *
FROM TB_FUNC
▪ Vazio diferente de nulo. O campo vazio tem WHERE DATADEMISSAO IS NOT NULL
informação enquanto o nulo não.
▪ Quando um campo tem o valor nulo em um SGBD a
coluna é exibe o valor NULL.

206
Operadores Auxiliares
▪ BETWEEN: Utilizado para especificar um intervalo de SELECT *
valores. FROM TB_FUNC
▪ Ex.1: WHERE VALOR BETWEEN 5 AND 15

SELECT *
FROM TB_FUNC
WHERE DATAADMISSAO BETWEEN '2012-01-01' AND '2018-12-20'

SELECT *
FROM TB_FUNC
WHERE DATAADMISSAO NOT BETWEEN '2017-01-01' AND '2017-12-20'

207
Operadores Auxiliares
▪ IN: Utilizado para verificar se o valor procurado está dentro de
uma lista.
▫ Ex.1:
SELECT *
FROM TB_FUNC
WHERE STATUS_FUNC IN ('ATIVO','FERIAS')

SELECT *
FROM TB_FUNC
WHERE MONTH(DATAADMISSAO) IN (1,2)

SELECT *
FROM TB_FUNC
WHERE MONTH(DATAADMISSAO) NOT IN (10,11)

208
Operadores Auxiliares
▪ LIKE: Utilizado fazer busca em campos com valores SELECT *
texto. FROM TB_FUNC
WHERE NOME LIKE 'JOSE'
▪ Podemos utilizar a porcentagem para ajudar na
busca. É considerado um caractere coringa no LIKE. SELECT *
FROM TB_FUNC
WHERE NOME LIKE 'JOSE%'
▪ Palavra + % - trás todos registros que começam com
o nome da palavra passada. SELECT *
FROM TB_FUNC
▪ % + palavra – trás todos os registros que terminam WHERE NOME LIKE '%JOSE'
com a palavra passada.
▪ % + palavra + % - trás todos os registros que SELECT *
FROM TB_FUNC
contenham a palavra no inicio, meio ou final.
WHERE NOME LIKE '%JOSE%'

209
Extra – Cláusulas que podem ser utilizadas em um comando SELECT
▪ Cláusulas Extra
▪ Caso for utilizar ALIAS de tabela, o mesmo
deve ser utilizado durante toda a construção
▫ ALIAS (APELIDO PARA TABELAS E da consulta.
CAMPOS) ▫ Facilitam a leitura da query quando
▫ CASE utilizamos JOINS.
▫ DISTINCT
▫ TOP
▪ Em casos de ALIAS de coluna não se torna
obrigatório, pois são utilizados para exibir um
▪ ALIAS: São apelidos utilizados para renomear nome amigável para a coluna em questão.
tabelas e colunas a nível de consulta, ou seja,
somente no momento do SELECT. Os apelidos
▪ É possível utilizar os nomes atribuídos para as
colunas através no ALIAS na cláusula ORDER
ficam ativos durante a consulta assumindo o valor do
BY.
campo ou tabela

210
Extra – Cláusulas que podem ser utilizadas em um comando SELECT
▪ É possível realizar ALIAS de coluna de três maneiras
▪ Utilizado alias de coluna e tabela numa
diferentes:
consulta.

▫ COLUNA AS APELIDO SELECT


F.NOME AS 'NOME FUNCIONÁRIO',
NOME AS 'NOME FUNCIONARIO' 'DATA DE ADMISSÃO' = F.DATAADMISSAO,
F.SALARIO 'SALÁRIO FUNCIONÁRIO'
▫ APELIDO = COLUNA FROM TB_FUNC AS F
'NOME FUNCIONARIO' = NOME

▫ COLUNA APELIDO
NOME 'NOME FUNCIONARIO'

211
Extra – Cláusulas que podem ser utilizadas em um comando SELECT
▪ CASE: Utilizado para fazer uma analise lógica do SELECT NOME, SALARIO,
valor da coluna e retornar caso seja verdadeiro ou CASE
falso.
WHEN SALARIO > 1200 AND SALARIO <
SELECT NOME, STATUS_FUNC, 1500 THEN SALARIO * 1.1
CASE STATUS_FUNC
WHEN 'ATIVO' THEN 'A' WHEN SALARIO > 1501 AND SALARIO <
WHEN 'INATIVO' THEN 'I' 2000 THEN SALARIO * 1.2
WHEN 'FERIAS' THEN 'F'
ELSE WHEN SALARIO < 1000 THEN SALARIO
'O' END SALARIO_COM_REAJUSTE
END SIGLA_STATUS
FROM TB_FUNC FROM TB_FUNC

212
Extra – Cláusulas que podem ser utilizadas em um comando SELECT
▪ DISTINCT: Elimina linhas duplicadas de um SELECT DISTINCT NOME
determinado campo, retornando apenas 1 registro FROM TB_FUNC
daquele dados.
▪ Ao adicionar outra campo a consulta o DISTINCT ira SELECT DISTINCT NOME, SALARIO
somente remover as duplicatas caso os dois campos FROM TB_FUNC
possuam valores iguais.
SELECT DISTINCT NOME, SALARIO,
DATANASCIMENTO
FROM TB_FUNC

213
Extra – Cláusulas que podem ser utilizadas em um comando SELECT
▪ TOP: Objetivo permitir limitar o número de registros SELECT
que serão mostrados pela instrução SELECT. TOP 5 MATRICULA,
NOME
FROM TB_FUNC
▪ Obs.: A clausula ORDER BY irá influenciar
diretamente no retorno dos registros quando é
SELECT
utilizada a clausula TOP.
TOP 5 MATRICULA,
NOME
▪ O comando recebe como parâmetro o numero de FROM TB_FUNC
registros a serem mostrados na query. ORDER BY MATRICULA DESC

214
Joins

215
Joins
▪ A cláusula JOIN é utilizada para realizar a ▪ Temos os seguintes tipos de Joins
combinação das tabelas do banco de dados. Toda
essa combinação é baseada no processo de ▫ INNER JOIN
modelagem do negócio. A ligação das tabelas é ▫ LEFT OUTER JOIN
geralmente feita através dos campos de chave ▫ RIGHT OUTER JOIN
primária e chave estrangeira. ▫ FULL OUTER JOIN
▪ Os JOINs possuem uma cláusula chamada ON, ▫ CROSS JOIN
que é responsável iniciar a combinação dos ▫ SELF JOIN
campos utilizados na junção.

216
Formas de
utilizar as
junções no SQL

217
CREATE DATABASE BD_JOINS Script de criação
GO

USE BD_JOINS
GO

CREATE TABLE DEPARTAMENTO (


CODIGO INT PRIMARY KEY IDENTITY,
DESCRICAO VARCHAR(100) NOT NULL);
GO

CREATE TABLE FUNCAO (


CODIGO INT PRIMARY KEY IDENTITY,
DESCRICAO VARCHAR(100))
GO

CREATE TABLE FUNCIONARIO(


MATRICULA INT PRIMARY KEY IDENTITY,
NOME VARCHAR (255) NOT NULL,
DATANASCIMENTO DATE NOT NULL,
CPF CHAR(11) UNIQUE CHECK (LEN(CPF) = 11),
SALARIO MONEY NULL,
DATAADMISSAO DATE DEFAULT (GETDATE()),
DATADEMISSAO DATE NULL,
INICIOFERIAS DATE NULL,
FIMFERIAS DATE NULL,
STATUS_FUNC VARCHAR (20) CHECK (STATUS_FUNC IN ('ATIVO','INATIVO','FERIAS','LICENÇA','INSS')),
CODDEPTO INT FOREIGN KEY REFERENCES DEPARTAMENTO (CODIGO),
CODSUPERVISOR INT FOREIGN KEY REFERENCES FUNCIONARIO (MATRICULA),
CODFUNCAO INT FOREIGN KEY REFERENCES FUNCAO (CODIGO))
GO

218
Script de Insert
INSERT INTO DEPARTAMENTO
VALUES ('TECNOLOGIA DA INFORMACAO'),
('RECURSOS HUMANOS'),
('JURIDICO'),('SELEÇÃO'),
('CONTABILIDADE'),
('CONTAS A PAGAR E RECEBER'),
('DEPARTAMENTO PESSOAL')
GO

INSERT INTO FUNCAO


VALUES ('ESTAGIARIO'), ('ANALISTA JR'),('ANALISTA PL'),('ANALISTA SR'),('COORDENADOR'),('GERENTE')
GO

INSERT INTO FUNCIONARIO (NOME, DATANASCIMENTO,CPF, SALARIO,DATAADMISSAO,DATADEMISSAO,INICIOFERIAS,FIMFERIAS, STATUS_FUNC,


CODDEPTO, CODSUPERVISOR, CODFUNCAO)
VALUES
('ANA MARIA', '2000-01-01','12345678911', 1200.55, '2018-05-01',NULL,NULL,NULL, 'ATIVO', 1, 6, 2 ),
('JOSE HENRIQUE', '1998-11-20','12345678912', 2575.55, '2005-09-01','2017-12-01',NULL,NULL, 'INATIVO', 7, NULL, 3 ),
('ANA MARIA', '2002-08-21','12345678913', 950.00, '2019-01-01',NULL,NULL,NULL, 'ATIVO', 6, NULL, 1),
('LUAN FELIX', '1991-09-28','12345678914', 3500.00, '2013-04-01',NULL,NULL,NULL, 'ATIVO', 3,NULL,2),
('FELIPE JOSE DOS SANTOS', '1996-01-11','12345678915', 4000, '2011-05-01','2015-01-29',NULL,NULL, 'INATIVO', 2, NULL, 3),
('MARCELO JOSE', '1980-10-05','12345678916', 7000, '2000-05-01',NULL,'2019-05-01','2019-06-01', 'ATIVO', 1, NULL, 1),
('MARIANA MARIA', '1987-02-08','12345678917', 4500, '2010-01-01',NULL,NULL,NULL, 'INSS', 1, 6, 3 ),
('JULIANA MARIA DOS SANTOS', '2002-01-01','12345678918', 2000, '2017-05-01',NULL,NULL,NULL, 'LICENÇA', 5, NULL, 2 ),
('MARIA ALICIA', '2001-01-01','12345678919', 950, '2018-05-01',NULL,NULL,NULL, 'ATIVO', 1, 6, 1)
GO

INSERT INTO FUNCIONARIO (NOME, DATANASCIMENTO,CPF, SALARIO,STATUS_FUNC, CODDEPTO,CODSUPERVISOR,CODFUNCAO)


VALUES ('MARIA ALICIA', '2003-09-18','12345678920', 950, 'ATIVO', NULL, NULL,1)

219
Joins

▪ INNER JOIN: Retorna linhas quando há


uma correspondência em ambas as tabelas.
Somente exiba o que é correspondente
entre A e B

SELECT
F.NOME,
D.DESCRICAO
FROM FUNCIONARIO as F
INNER JOIN DEPARTAMENTO as D
ON F.CODDEPTO = D.CODIGO

220
Joins
▪ LEFT JOIN ou LEFT OUTER JOIN: Retorna todas
as linhas da tabela à esquerda (tabela de cima),
mesmo se não houver nenhuma correspondência
na tabela à direita. Exiba todas as linhas de A
que tenham ou não correspondente com B.

SELECT
F.NOME,
D.DESCRICAO
FROM FUNCIONARIO as F
LEFT JOIN DEPARTAMENTO as D
ON F.CODDEPTO = D.CODIGO

221
Joins
▪ Exibir somente registros de A que não possuem
correspondência com B.

SELECT
F.NOME,
D.DESCRICAO
FROM FUNCIONARIO as F
LEFT JOIN DEPARTAMENTO as D
ON F.CODDEPTO = D.CODIGO
WHERE D.CODIGO IS NULL

222
Joins
▪ RIGHT JOIN ou RIGHT OUTER JOIN: Retorna
todas as linhas da tabela da direita (tabela de
baixo), mesmo que não haja correspondências na
tabela à esquerda. Exiba todas as linhas de B
que tenham ou não correspondente com A.

SELECT
F.NOME,
D.DESCRICAO
FROM FUNCIONARIO as F
RIGHT JOIN DEPARTAMENTO as D
ON F.CODDEPTO = D.CODIGO

223
Joins
▪ Exibir somente registros de B que não possuem
correspondência com A.

SELECT
F.NOME,
D.DESCRICAO
FROM FUNCIONARIO as F
RIGHT JOIN DEPARTAMENTO as D
ON F.CODDEPTO = D.CODIGO
WHERE F.CODDEPTO IS NULL

224
Joins
▪ FULL JOIN ou FULL OUTER JOIN: Combina os
resultados de esquerda e direita. A tabela conterá
todos os registros de ambas as tabelas, Caso uma
linha de dados não esteja associada a qualquer
linha da outra tabela, os valores das colunas a lista
de seleção serão nulos.
SELECT
F.NOME,
D.DESCRICAO
FROM FUNCIONARIO as F
FULL JOIN DEPARTAMENTO as D
ON F.CODDEPTO = D.CODIGO

225
Joins
▪ Exibir registros de A e de B que não possuem
correspondência de chave.

SELECT
F.NOME,
D.DESCRICAO
FROM FUNCIONARIO as F
FULL JOIN DEPARTAMENTO as D
ON F.CODDEPTO = D.CODIGO
WHERE F.CODDEPTO IS NULL
OR D.CODIGO IS NULL

226
Joins
▪ CROSS JOIN: Combina os dados das duas
tabelas formando um produto cartesiano. Este tipo
de JOIN não utiliza a clausula ON. Ele faz uma
multiplicação dos registros de uma tabela com
outra.

SELECT
F.NOME,
D.DESCRICAO
FROM FUNCIONARIO as F
CROSS JOIN DEPARTAMENTO as D

227
Joins
▪ SELF JOIN: É um CONCEITO de join e não um
comando propriamente dito. Ele é caracterizado na
modelagem como auto relacionamento, ou seja, a
tabela se relacionando com ela mesma. Pode-se
utilizar qualquer tipo de JOIN.

SELECT
F.NOME AS FUNCIONARIO,
S.NOME AS SUPERVISOR
FROM FUNCIONARIO F
INNER JOIN FUNCIONARIO S
ON F.CODSUPERVISOR = S.MATRICULA

228
Trabalhando
com união de
consultas
229
UNIÃO DE CONSULTAS – SCRIPT DE CRIAÇÃO
CREATE DATABASE BD_UNIAO_CONSULTAS ▪ SELECT * FROM A
GO
▪ SELECT * FROM B
USE BD_UNIAO_CONSULTAS
GO
CREATE TABLE A(
ID INT NOT NULL,
NOME VARCHAR(10) NOT NULL)

CREATE TABLE B(
ID INT NOT NULL,
NOME VARCHAR(10) NOT NULL)

INSERT INTO A VALUES (1, 'José'), (2, 'Maria'), (3, 'João')


INSERT INTO B VALUES (2, 'Maria'), (3, 'Guilherme'), (4, 'Vitória')

230
UNION
▪ UNION / UNION ALL: Cria um único conjunto de ▪ SINTAXE:
resultados baseado na união de varias consultas.
SELECT coluna1, coluna2 FROM TABELA1
▪ Requisitos para utilização do Union
UNION / UNION ALL
▫ As duas consultas devem conter o mesmo
numero de colunas; SELECT coluna1, coluna2 FROM TABELA2
▫ Os tipos de dados devem corresponder para
cada coluna;
▫ A clausula ORDER BY deve-se ser utilizada
apenas no ultimo SELECT a ser feito;
▫ A primeira consulta é o cabeçalho do resultado;
▪ Principal diferença entre o UNION e o UNION ALL
▫ UNION: Remove qualquer linha duplicada no
conjunto de resultados. Ele possui um DISTINC
implícito
▫ UNION ALL: Inclui os registros duplicados.
231
Junções - UNION
▪ UNION

SELECT ID, NOME FROM A


UNION
SELECT ID, NOME FROM B

▪ UNION ALL
SELECT ID, NOME FROM A
UNION ALL
SELECT ID, NOME FROM B

232
EXCEPT
▪ EXCEPT: Realiza a diferença dos conjuntos A,B (A ▪ SINTAXE:
– B), ou seja, o conjunto de elementos que SELECT coluna1, coluna2 FROM TABELA1
pertencem a A e não pertencem a B.
EXCEPT
▪ O EXCEPT opera nos conjuntos de resultados de
SELECT coluna1, coluna2 FROM TABELA2
duas consultas de entrada e retorna as linhas que
aparecem na primeira entrada, mas não na
segunda, ou seja, quando se quer que apareçam
os registros da tabela A que não são iguais aos da
tabela B.
▪ O EXCEPT utiliza a mesma regra do UNION
referente numero de campos, cabeçalho e tipo de
dado.

233
EXCEPT

SELECT ID, NOME FROM A


EXCEPT
SELECT ID, NOME FROM B

234
INTERSECT

▪ INTERSECT retorna apenas linhas que são ▪ SINTAXE:


comuns a ambos os conjuntos. Em outras SELECT coluna1, coluna2 FROM TABELA1
palavras, se uma linha aparecer pelo menos uma
INTERSECT
vez no primeiro conjunto e pelo menos uma vez no
segundo conjunto, ela aparecerá uma vez no SELECT coluna1, coluna2 FROM TABELA2
resultado do operador INTERSECT;

▪ O INTERSECT assemelha-se ao INNER JOIN.

▪ O INTERSECT utiliza a mesma regra do UNION


referente numero de campos, cabeçalho e tipo de
dado.

235
INTERSECT

SELECT ID, NOME FROM A


INTERSECT
SELECT ID, NOME FROM B

236
Declarando
Variáveis

237
Variáveis
▪ Para declarar variáveis no SQL Server deve-se ▪ Sintaxe de declaração de uma variável
seguir alguns itens:
▫ Primeiro: Utilizar a palavra reservada DECLARE @NOME VARCHAR(20)
DECLARE SET @NOME = 'CURSO MTA DBF'
▫ Segundo: nome da variável que é composto
do Arroba + nome = @nome ▪ Exibindo o valor de uma variável
▫ Terceiro: Tipo da variável (int, varchar, date)
▫ Quarto: Valor que a variável ira receber,
SELECT @NOME
deve ser declarado com a palavra reservada
SET @nome = valor.

238
Funções T-SQL

239
Conversão de dados
▪ Funções de conversão são utilizadas quando ▪ A conversão para um tipo de dado de menor
precisamos transformar um tipo de dados em outro. precedência deve ser explicitada.

▪ Conversão implícita: Quando um determinado tipo


de dados é convertido sem a utilização das funções ▪ Exemplo de precedência (baixa para alta)
de conversão. ▫ Texto > Números > Data > XML
▫ Utiliza a precedência de tipos de dados ▫ Ex.: char > varchar > nvarchar > tinyint > int >
decimal > hora > data > datetime2 > xml
▪ A precedência do tipo de dados determina qual tipo ▫ Ex.: 10 + 2.20. Ele converte o tipo inteiro para decimal
de dados será escolhido quando expressões de ▪ Nem todas as combinações de tipos de dados têm uma
tipos diferentes forem combinadas. conversão
▪ Por padrão, o tipo de dados com a precedência
mais baixa é convertido no tipo de dados com a Conversão explicita: É necessário a utilização das funções
precedência mais alta. Isso é importante para cast e convert para alterar o tipo do dado.
entendermos as conversões implícitas

240
Datas e hora do sistema
▪ No SQL Server há algumas formas de sabermos a data SELECT GETDATE() as TEST_GETDATE
atual do sistema via comando SQL. SELECT CURRENT_TIMESTAMP as TEST_CURRENT
SELECT SYSDATETIME () as TEST_SYSUTCDATETIME
▪ GETDATE(): Data e hora atuais do sistema. Função da
engine do SQL Server

▪ CURRENT_TIMESTAMP - Data e hora atuais do


sistema. Padrão SQL ANSI.

▪ Outras funções para retornar a data do sistema -


SYSDATETIME(), SYSDATETIMEOFFSET(),
SYSUTCDATETIME(), GETUTCDATE()

241
Conversão de dados
▪ CAST: Função de conversão Padrão ANSI. DECLARE @DT DATETIME
▪ TRY_CAST: Realiza o tratamento dos dados retornando o SET @DT = GETDATE()
valor NULL quando não conseguem converter o valor para
o tipo desejado. A partir da versão 2012 do SQL Server.
▪ CAST é mais performático do que a função CONVERT. SELECT CAST(@DT AS DATE) TEST_CAST

▪ Ambas recebem 2 parâmetros: SELECT TRY_CAST(@DT AS tinyint) TEST_TRYCAST


▫ Primeiro parâmetro: campo a ser convertido
▫ Segundo parâmetro: tipo de dado para qual será
convertido o campo.
▪ Sintaxe
CAST (campo AS novo_tipo)
TRY_CAST (campo AS novo_tipo)

242
Conversão de dados
▪ CONVERT: Função de conversão da engine do SQL Server. DECLARE @DT DATETIME

▪ TRY_CONVERT: Realiza o tratamento dos dados retornando SET @DT = GETDATE()


o valor NULL quando não conseguem converter o valor para o
tipo desejado. A partir da versão 2012 do SQL Server. SELECT CONVERT(DATE, @DT) TEST_CONVERT
▪ Convert é ideal quando queremos converter data para string. SELECT CONVERT(VARCHAR, @DT,103) TEST_CONVERT_DT
▪ Ambas podem receber 2 ou 3 parâmetros: SELECT TRY_CONVERT(tinyint, @DT) TEST_TRYCCONVERT
▫ Primeiro parâmetro: tipo de dados para qual será
convertido o campo
▫ Segundo parâmetro: campo que será convertido
▫ Terceiro parâmetro: Opcional, utilizado para formatação
de campos de data.
▪ Sintaxe
CONVERT(TIPO_DE_DADO, parametro2, parametro3(opcional))
TRY_CONVERT(TIPO_DE_DADO, parametro2, parametro3(opcional))

243
CONVERT
Números para
formatação das
datas

244
Funções de Texto
▪ SUBSTRING: Extrai uma parte do texto de um texto DECLARE @TXT VARCHAR(10) = 'ABCDE'
existente.
SELECT SUBSTRING(@TXT,1,3) AS TEST_SUBSTRING

▪ Esta função utiliza 3 parâmetros:


▫ Primeiro parâmetro: texto que será extraído
▫ Segundo parâmetro: posição inicial do texto
▫ Terceiro parâmetro: posição final do texto.

▪ Sintaxe
SUBSTRING (TEXTO (OU CAMPO), PARAMETRO1, PARAMETRO2)

245
Funções de Texto
▪ LEFT e RIGHT: Retorna os caracteres solicitados da
DECLARE @TXT VARCHAR(10) = 'ABCDE'
esquerda ou da direita do parâmetro de entrada.

SELECT LEFT (@TXT, 2) TEST_LEFT


▪ Estas funções recebem 2 parâmetros:
▫ Primeiro parâmetro: texto ( ou campo) SELECT RIGHT(@TXT, 2) TEST_RIGHT
▫ Segundo parâmetro: número de palavras a
serem extraídas do texto.
▪ Sintaxe
LEFT (texto (ou campo), parâmetro2)
RIGHT (texto (ou campo), parâmetro2)

246
Funções de Texto
▪ LEN: retorna o número de caracteres de um texto DECLARE @TXT VARCHAR(10) = 'ABCDE'
passado como parâmetro de entrada.
SELECT LEN (@TXT) AS TEST_LEN

▪ O único parâmetro desta função é o texto a ser


contado

▪ Sintaxe

LEN(texto(campo))

247
Funções de Texto
▪ CHARINDEX: Retorna a posição da primeira
DECLARE @TXT VARCHAR(20) = 'CONSULTA BD'
ocorrência de uma palavra ( ou parte da palavra) de
uma texto completo.
SELECT CHARINDEX(' ', @TXT) TEST_CHARINDEX

▪ Recebe 2 parâmetros:
▫ primeiro parâmetro: texto o que queremos
encontrar
▫ Segundo parâmetro: palavra ou texto que será
realizada a pesquisa da item do parâmetro 1.
▪ Sintaxe
CHARINDEX(parametro1, texto(ou campo))

248
Funções de Texto
▪ REPLACE: Substitui todas as ocorrências de uma
DECLARE @TXT VARCHAR(50)
palavra com outra.
SET @TXT = 'APELIDO : PADAWAN'
▪ Recebe 3 parâmetros:
▫ Primeiro parâmetro: texto
SELECT REPLACE(@TXT, ':', '>>>') TEST_REPLACE
▫ Segundo parâmetro: palavra ou caractere que
será alterado na palavra
▫ Terceiro parâmetro: palavra, texto ou
informação que substituirá a palavra informado
no segundo parâmetro.
▪ Sintaxe
REPLACE (texto(ou campo),parametro2, parametro3)

249
Funções de Texto
▪ UPPER e LOWER: Retorna as palavras com todos DECLARE @TXT VARCHAR(10) = 't-SQL'
os caracteres maiúsculos ou minúsculos.

SELECT UPPER(@TXT) TEST_UPPER


▫ UPPER: Maiúsculo
▫ LOWER: Minúsculo SELECT LOWER(@TXT) TEST_LOWER

▪ Recebe como parâmetro somente o texto.

▪ Sintaxe
UPPER (texto(ou campo)
LOWER (texto(ou campo)

250
Funções de Texto
▪ RTRIM e LTRIM: Remove os espaços da esquerda ou direita DECLARE @TXT VARCHAR(20) = ' T-SQL '
da palavra passada como parâmetro.
▪ TRIM: remove os espaços em banco dos dois lados, mas esta SELECT RTRIM(@TXT) TEST_RTRIM
função só esta disponível a partir da versão 2017 do SQL SELECT LTRIM(@TXT) TEST_LTRIM
Server
SELECT RTRIM(LTRIM(@TXT)) TEST_RTRIM_LTRIM
SELECT TRIM (@TXT) TEST_TRIM
▪ Para remover dois espaços em branco em uma palavra
utilizando versões anteriores ao SQL Server 2017 deve-se
utilizar o LTRIM e o RTRIM juntos.

▪ Essa função recebe como parâmetro apenas o texto


▪ Sintaxe
TRIM, RTRIM ou LTRIM (texto(ou campo))

251
Funções de Texto – CONCATENANDO TEXTO
▪ CONCAT: Retorna uma cadeia de caracteres que é o ▪ Quando utilizamos o operador + para realizar
resultado da concatenação de dois ou mais valores. concatenação devemos atentar para a conversão
A partir da versão 2012 do SQL Server. dos tipos que são diferentes do tipo texto.

▪ Substitui o uso do + no momento de concatenar os SELECT CAMPO + ' ' + CAST (CAMPO2 AS VARCHAR(20))

campos numa consulta.

▪ Também reduz a utilização do Cast ou Convert, pois


ele converte os valores em string automaticamente.

▪ Sintaxe:
CONCAT ('valor1', 'valor2', valor3)

252
Funções de Texto – CONCATENANDO TEXTO
▪ Modo de concatenação com + e com o CONCAT
DECLARE @TXT VARCHAR(20) = 'SQL SERVER’

-->>Erro <<
SELECT @TXT + 2017 TEST_PLUS

SELECT @TXT + ' ' + CONVERT (VARCHAR (4), 2017)


TEST_PLUS_CONVERT

-->>Modo de concatenação com CONCAT<<


SELECT CONCAT(@TXT, ' ' ,2017) TEST_CONCAT

253
Funções de data
▪ Função DATEPART(): Retorna um fragmento da TABELA ABREVIAÇÕES DE FRAGMENTO DE
data de acordo com o DATEPART escolhido. Está DATA OU DATEPARTS
função retorna um valor inteiro, que representa o
valor que desejamos obter.

▪ Recebe 2 argumentos:

▫ Primeiro parâmetro: fragmento da data que


desejamos
▫ Segundo parâmetro: data propriamente dita.
▪ Sintaxe
DATEPART (parametro1, parametro2)

254
Funções de data
SELECT
DATEPART(YEAR, GETDATE()) AS 'ANO',
DATEPART(QUARTER, GETDATE() ) AS 'TRIMESTRE DO ANO',
DATEPART(MONTH, GETDATE()) AS 'MÊS',
DATEPART(DAYOFYEAR, GETDATE() ) AS 'DIA DO ANO (DE 1 A 365 )',
DATEPART(DAY, GETDATE() ) AS 'DIA',
DATEPART(WEEK, GETDATE() ) AS 'SEMANA',
DATEPART(WEEKDAY, GETDATE() ) AS 'DIA DA SEMANA',
DATEPART(HOUR, GETDATE() ) AS 'HORA',
DATEPART(MINUTE, GETDATE() ) AS 'MINUTO',
DATEPART(SECOND, GETDATE() ) AS 'SEGUNDO',
DATEPART(MILLISECOND, GETDATE() ) AS 'MILISEGUNDO',
DATEPART(MICROSECOND, GETDATE() ) AS 'MICROSEGUNDO',
DATEPART(NANOSECOND, GETDATE() ) AS 'NANOSEGUNDO'

255
Resultado dos
DATEPARTS

256
Funções de data
▪ Função DATEDIFF(): Retorna a diferença em um ▪ Sintaxe:
número inteiro de um intervalo de duas datas usando
como argumento o fragmento de comparação.
DATEDIFF(fragment,data1,data2)

▪ Recebe 3 parâmetros:
▫ Primeiro parâmetro: fragmento da data
(datepart) que desejamos
▫ Segundo parâmetro: data inicial que será feita
a diferença
▫ Terceiro parâmetro: data final que será feita a
diferença

257
Funções de data
SELECT
DATEDIFF(YEAR, '2018-01-01', GETDATE()) AS 'ANO',
DATEDIFF(MONTH, '2018-01-01' , GETDATE()) AS 'MÊS',
DATEDIFF(DAY, '2018-01-01' , GETDATE()) AS 'DIAS',
DATEDIFF(WEEK, '2018-01-01' , GETDATE()) AS 'SEMANA',
DATEDIFF(HOUR, '2018-01-01' , GETDATE()) AS 'HORA',
DATEDIFF(MINUTE, '2018-01-01' , GETDATE()) AS 'MINUTO'

258
Funções de data
▪ Função DATEADD() – Tem como propósito ▪ Sintaxe:
incrementar ou subtrair valores absolutos de uma
determinada data.
DATEADD(parametro1, parametro2, parametro3)

▪ Recebe 3 parâmetros:
▫ Primeiro parâmetro: fragmento da data
(datepart) que desejamos
▫ Segundo parâmetro: valor que será adicionado
ou subtraído da parte da data ou fragmento
▫ Terceiro parâmetro: data que será utilizada

259
Funções de data
SELECT
DATEADD(YEAR, 5, getdate() ) AS 'ANO ADICIONADO',
DATEADD(YEAR, -5, getdate() ) AS 'ANO SUBTRAIDO',
DATEADD(MONTH, 5, getdate() ) AS 'MÊS',
DATEADD(DAY, 5, getdate() ) AS 'DIA',
DATEADD(WEEK, 5, getdate() ) AS 'SEMANA',
DATEADD(HOUR, 5, getdate() ) AS 'HORA'

260
Funções de data
▪ Função DATENAME() – Tem como propósito SELECT
retornar o nome da uma determinada parte da data DATENAME(YEAR,GETDATE()) AS 'ANO',
passada . DATENAME(MONTH,GETDATE()) AS 'MES',
DATENAME(WEEKDAY,GETDATE()) AS 'DIA DA SEMANA'
▪ Recebe 2 parâmetros:
▫ Primeiro parâmetro: fragmento da data
(datepart) que desejamos
▫ Segundo parâmetro: data a ser utilizada.
▪ Sintaxe

DATENAME(fragmento, data)

261
Funções de data
▪ Funções YEAR(), MONTH(), DAY(): São extensões ▪ A função DAY retorna o dia da data passada
da função DATEPART, porém com os argumentos
▪ A função MONTH retorna o mês da data passada
de DATEPART suprimidos (implícitos).
▪ A função YEAR retorna o ano da data passada
▪ A função EOMONTH retorna o ultimo dia da data passada.
▪ Em vez de usar a função DATEPART (MONTH,
GETDATE()) para retornar o mês, apenas utilizamos
▪ As funções DAY, MONTH e YEAR tem somente um
a função MONTH (GETDATE()) que produzirá o parâmetro que é a data informada. Para a função
mesmo resultado. EOMOTH é possível passar um segundo parâmetro
opcional para incrementar ou decrementar a data.

▪ A função EOMONTH retorna o ultimo dia do mês da


▪ Sintaxe
▫ DAY, MONTH, YEAR (data)
data passada. A partir da versão 2012 do SQL ▫ EOMONTH (data, parâmetro opcional)
Server.

262
Funções de data

SELECT
GETDATE() DATA_SISTEMA,
YEAR(GETDATE() ) AS 'ANO',
MONTH(GETDATE() ) AS 'MÊS',
DAY(GETDATE() ) AS 'DIA',
EOMONTH(GETDATE()) AS 'ULTIMO DIA DO MES'

263
Funções de data
▪ ISDATE função que verifica se uma determinada SELECT ISDATE(GETDATE()) as TEST_DATE_VALID
data é valida ou não.
SELECT ISDATE('2018-13-01') as TEST_DATE_INVALID

▪ Recebe somente 1 parâmetro que é a data a ser


validada.

▪ Essa função retorna um tipo inteiro, aonde:


▫ 0: data inválida
▫ 1: data válida

▪ Sintaxe:
ISDATE (data)

264
Funções para tratamento de nulos
▪ ISNULL: Verifica se primeiro parâmetro é nulo e substituiu SELECT
pelo valor utilizado no segundo parâmetro.
ISNULL(NULL, 'SQL') AS TEST_ISNULL,
NULLIF('SQL','SQL') AS TEST_NULLIF,
▪ NULLIF: Retorna nulo se os dois parâmetros passados NULLIF('T-SQL','SQL') AS TEST_NULLIF2,
foram iguais, caso sejam diferentes, ele retorna o valor do
primeiro parâmetro. COALESCE(NULL, NULL, 'SQL') AS TEST_COALESCE,
COALESCE(NULL, 'T-SQL', 'SQL') AS TEST_COALESCE2

▪ COALESCE: É uma função do SQL ANSI, que retorna o


primeiro valor NÃO nulo em uma lista de valores.

▪ Sintaxe:
ISNULL (param_1, param_2)
NULLIF(param_1, param_2)
COALESCE (param_1, param_2, param_3, etc...)

265
Funções de agregação
▪ Objetivo é obter resultados sumarizados sobre os
registros de um banco de dados em uso.

▫ COUNT / COUNT(*)
▫ SUM
▫ MAX
▫ MIN
▫ AVG

266
Script para praticar as funções de agregação
CREATE DATABASE BD_AGREGACAO
GO

USE BD_AGREGACAO
GO

CREATE TABLE PRODUTO(


CODIGO INT PRIMARY KEY IDENTITY,
CATEGORIA VARCHAR(100),
TIPO VARCHAR(100),
NOME VARCHAR(100),
PRECO MONEY,
QTD_ESTOQUE INT)

267
Script para praticar as funções de agregação
INSERT INTO PRODUTO(CATEGORIA,TIPO,NOME,PRECO,QTD_ESTOQUE)
VALUES ('COZINHA', 'ARMARIO', 'ARMARIO MOGNO A1', 240.5, 10),
('COZINHA', 'ELETRODOMESTICO', 'GELADEIRA BRASTEMP 400 L', 1500.50, 5),
('INFORMATICA', 'SMARTPHONE', 'LG K10 POWER', 750.00, 50),
('INFORMATICA', 'NOTEBOOK', 'ACER GAMER I7', 7500.00, 3),
('INFORMATICA', 'NOTEBOOK', 'DELL I7 16 GB', 5800.00, 1),
('AUTOMOTIVO', 'PNEU', 'FIRESTON ARO 14', 199.99, 100),
('AUTOMOTIVO', 'PNEU', 'PIRELI ARO 16', 339.99, 100),
('AUTOMOTIVO', 'PNEU', 'MICHELAN ARO 15', 449.99, 50),
('INFORMATICA', 'SMARTPHONE', 'IOS 10' ,7000, 50),
('INFORMATICA', 'CONSOLE', 'PS 4', 2000, 20),
('INFORMATICA', 'CONSOLE', 'XBOX', 2200, 60),
('COZINHA', 'ELETRODOMESTICO', 'FOGÃO 8 BOCAS BRASTEMP', 1500, 240),
('INFORMATICA', 'ULTRABOOK', 'SAMSUNG I7 8GB', 3571, NULL)

268
Funções de agregação
▪ COUNT: Conta a quantidade de registros que um SELECT
campo especifico possui. COUNT(*) CONTA_TUDO,
COUNT(CATEGORIA) AS IGNORA_NULOS
▪ A função COUNT(CAMPO) ignora valores nulos FROM PRODUTO

▪ A função COUNT (*) conta todos os registros com


valores nulos

269
Funções de agregação
▪ SUM: Retorna o resultado da soma efetuada dos SELECT
valores de um campo numérico da tabela. Essa
SUM(PRECO) SOMANDO_PRECOS
função desconsidera na soma os valores do tipo
NULL. FROM PRODUTO
WHERE CATEGORIA = 'AUTOMOTIVO'

270
Funções de agregação
▪ MAX: Retorna o maior valor de uma lista de valores SELECT
numéricos ou de tipo data. MAX(QTD_ESTOQUE) MAIOR_ESTOQUE
FROM PRODUTO
▪ MIN: Retorna o menor valor de uma lista de valores
numéricos ou de tipo data.
SELECT
MIN(QTD_ESTOQUE) MENOR_ESTOQUE
FROM PRODUTO

271
Funções de agregação
▪ AVG: Retorna a média de valores numéricos de um SELECT
determinado campo, ou seja, ele soma os valores e AVG(QTD_ESTOQUE) MEDIA_AUTOMOTIVO
divide pela quantidade de linhas dele. Na existência
FROM PRODUTO
de valores do tipo NULL, eles são ignorados pela
função. WHERE CATEGORIA = 'AUTOMOTIVO'
▪ Ex.:
▫ soma dos valores: 10 + 20 + 30 = 60
▫ Quantidade de itens: 3
▫ Média: 60/3 = 20

272
Funções de agregação
▪ GROUP BY é responsável por determinar em quais SELECT
colunas devem ser colocadas às linhas de saída. CATEGORIA,
SUM(PRECO) SOMA_PRECO
FROM PRODUTO
▪ Caso a cláusula SELECT contenha funções
GROUP BY CATEGORIA
agregadas, a cláusula GROUP BY realiza um cálculo
a fim de chegar ao valor sumárizado para cada uma
das colunas, ou seja, agrupar os valores de acordo
com os dados especificados.

273
Funções de agregação
SELECT
CATEGORIA,
TIPO,
SUM(PRECO) SOMA_PRECO
FROM PRODUTO
GROUP BY CATEGORIA, TIPO
ORDER BY CATEGORIA, TIPO

274
Funções de agregação
▪ HAVING utilizado para filtrar os valores agrupados SELECT CATEGORIA,
das funções de agregação. É importante lembrar que SUM(PRECO) SOMA_PRECO
essa cláusula só pode ser usada em parceria com FROM PRODUTO
GROUP BY. GROUP BY CATEGORIA
HAVING SUM(PRECO) > 3500

▪ Obs.: O HAVING é diferente do WHERE.


▫ O WHERE restringe os resultados obtidos sempre
após o uso da cláusula FROM.
▫ A cláusula HAVING filtra o retorno do
agrupamento, sendo necessário a utilização do
GROUP BY.

275
Funções de agregação
SELECT
CATEGORIA,
TIPO,
SUM(PRECO) SOMA_PRECO
FROM PRODUTO
GROUP BY CATEGORIA, TIPO
HAVING SUM(PRECO) >= 3600
ORDER BY CATEGORIA, TIPO

276
Views

277
Views
▪ View: É um objeto (ou tabela virtual) cujo o ▪ Boas Praticas!
conjunto de resultados é extraído de uma query. ▪ Não se dever utilizar SELECT * em views.
▪ O mesmo somente é utilizado quando
▪ As views são usadas como uma camada de houver alguma alteração em algum campo
abstração por desenvolvedores de banco de da tabela, sendo replicado no código da
dados. Às vezes, também são usadas para dar view.
segurança aos dados de diversas maneiras.

▪ A cláusula ORDER BY não é valida em


views.
▪ Só será valida com o uso dos comandos
TOP ou OFFSET. Nesse caso, ORDER BY
é usado para determinar quais linhas serão
retornadas.

278
Views
▪ A criação de uma View: ▪ Sintaxe de criação
▫ Primeiro o comando CREATE VIEW,
▫ Seguido do nome da view CREATE VIEW uVW_NAME
▫ Após o nome o prefixo AS AS
▫ O ultimo item é a consulta que queremos QUERY
armazenar dentro da view.

▪ Consultando uma VIEW


▪ Boas práticas: Criar o nome dos objetos de
programação T-SQL com um prefixo seguido de SELECT * FROM uVW_NAME
Underline. Para View (uVW_), para Funcions
(uFN_), Triggers (uTR_) e Store Procedures
(uSP_).

279
Views
▪ Alteração na estrutura da view ▪ Visualizando código de uma view já
existente
ALTER VIEW uVW_NAME
AS ▫ SP_HELPTEXT uVW_NAME
QUERY

▪ Apagando objeto view

DROP VIEW uVW_NAME

280
Views
▪ Criando VIEW
CREATE VIEW uVW_DEMITIDOS
AS
SELECT
NOME AS 'NOME FUNCIONARIO',
DATAADMISSAO AS 'DATA ADMISSÃO',
DATADEMISSAO AS 'DATA DEMISSÃO'
FROM FUNCIONARIO
WHERE DATADEMISSAO IS NOT NULL

▪ Selecionando VIEW
SELECT * FROM uVW_DEMITIDOS

281
Stored
Procedure

282
Stored Procedure
▪ Stored Procedures (Procedimentos Armazenados): ▫ São fáceis de manter, pois as
São um conjunto de instruções (uma ou mais) SQL alterações são centralizadas, em vez
normalmente agrupadas para executar uma rotina de serem feitas com código.
específica.
▫ Oferecem um alto nível de segurança.
Pois em vez de o acesso ser
▪ As stored procedures são comparáveis com as concedido ao objeto, a permissão pode
funções, mas possuem flexibilidade e recursos ser dada somente para o stored
impossíveis dentro de funções. procedure.
▫ Aceitam clausulas de tratamento de
erro.
▪ Vantagens da utilização de Stored Procedures
▫ Possível realizar operações complexas
▫ Oferecem maior desempenho, devido ao com T-SQL.
código compilado.

283
Stored Procedure
▪ Basicamente, as stored procedures criam um ▪ Sintaxe de criação de uma procedure com parâmetro:

nível de abstração para permissões – em vez de CREATE PROC OU PROCEDURE uSP_NAME


se conceder ao usuário direitos SELECT, (@PARAMETER TYPE_PARAMETER)
INSERT, UPDATE ou DELETE, ele pode receber AS
direitos EXECUTE para um stored procedure. BEGIN
SQL_CODE

▪ As procedures podem receber ou não END

parâmetros. ▪ Sintaxe de criação de uma procedure sem parâmetro:

▪ Podemos criar procedures que irão nos retornar CREATE PROC OU PROCEDURE uSP_NAME

os dados de uma tabela (SELECT) ou para AS

inserir / atualizar / remover dados de uma tabela. BEGIN


SQL_CODE
END

284
Stored Procedure

▪ Sintaxe de alteração de uma procedure: ▪ Sintaxe para remover o objeto procedure:

DROP PROC OU PROCEDURE uSP_NAME


ALTER PROC OU PROCEDURE uSP_NAME
(@PARAMETER TYPE_PARAMETER)
AS
BEGIN
SQL_CODE
END

285
Stored Procedure
▪ Visualizando código de uma procedure já ▪ Sintaxe de como chamar a procedure
existente.
SP_HELPTEXT uSP_NAME EXEC | EXECUTE uSP_NAME
uSP_NAME
▪ Executando uma Stored Procedure
▫ Comando EXEC / EXECUTE + nome da
procedure criada + parâmetros passados na
▪ Passando parâmetro na procedure
criação se existirem. EXEC uSP_NAME 'TEXTO'
▫ Apenas passando o nome da Procedure e EXEC uSP_NAME @Param1 = 'TEXTO',
executando a mesma. @Param2 = 'TEXTO'

286
Stored Procedure
▪ Criando PROCEDURE
CREATE PROCEDURE uSP_INSERT_FUNCAO
(@FUNCAO VARCHAR(100))
AS
BEGIN
INSERT INTO FUNCAO
VALUES (@FUNCAO)
END

▪ Executando PROCEDURE
EXECUTE uSP_INSERT_FUNCAO 'DIRETOR'
SELECT * FROM FUNCAO

287
Trigger

288
Trigger
▪ Trigger: São procedimentos armazenados
(PROCEDURES), disparados pela execução de
comandos DML (insert, update ou delete), EXECUÇÃO DO
COMANDO
comandos DDL (create table, alter procedure, drop DML

index, etc) ou logon do usuário.

PROCESSAMENTO
▪ Trigger DML podem executados em views ou DA LÓGICA DA
TRIGGER
tabelas.
▪ Categorias de Triggers
▫ FOR / AFTER RELIZAR
▫ INSTEAD OF OPERAÇÃO
SOB A TABELA

289
Trigger
▪ FOR ou AFTER ▪ Caso o comando cause um erro, a trigger
▫ FOR é o valor padrão e faz com o que o não é disparada;
gatilho seja disparado junto da ação.

▫ AFTER faz com que o disparo se dê


▪ Podem ser utilizados apenas sobre tabelas;
somente após a ação que o gerou ser ▪ A trigger é apenas associada a UMA tabela.
concluída.

▪ Podem existir múltiplas triggers para cada


▪ Quando um comando insert/update/delete é comando DML (Insert,Update, Delete).
executado em uma tabela que tenha uma trigger
FOR ou AFTER associada, primeiro é feita a
▪ Pode-se ter os comandos INSERT, UPDATE
ou DELETE nas triggers FOR ou AFTER,
inserção/alteração/remoção na tabela, para que
sendo assim uma única trigger pode conter
depois a trigger seja disparada.
os três comandos.

290
Trigger
▪ Instead Of ▪ Podem ser utilizadas sobre tabelas e visões;

▫ INSTEAD OF faz com que o trigger seja ▪ Utilizada para permitir ou estender as
executado no lugar da ação que o gerou possibilidades de update sobre visões.

▫ Ou seja, se um UPDATE for executado em


uma tabela que tenha uma trigger associada,
antes de realizar a atualização na tabela, o
comando DML vai disparar a trigger, a
mesma vai realizar seus procedimentos
lógicos e ao final do processo, o comando
que disparou a trigger é realizado.

291
Trigger
▪ Algumas características da Trigger ▪ Ao executar o comando de insert, a trigger cria uma tabela
virtual temporária chamada INSERTED, que contem os
mesmos campos da tabela original. Ela armazena
▫ Podem ser utilizadas para realização de auditoria temporariamente os valores inseridos. Também é criada uma
de dados, salvando dados em tabelas de histórico. tabela chamada DELETED, porém a mesma esta vazia.

▫ Excesso de triggers no banco de dados podem


interferir diretamente na performance do mesmo. ▪ Ao executar uma update, ela cria uma tabela virtual
temporária chamada DELETED, que armazena o valor antigo
▫ Triggers podem ser habilitadas e desabilitadas
do registro e cria uma tabela virtual temporária INSERTED
com o novo valor do registro. Ambas populadas.
através do comando
▫ Habilitar:
▫ ENABLE TRIGGER < NOME TR > ▪ Ao executar uma delete, ela cria uma tabela virtual
ON <TABELA> temporária chamada DELETED, que contém o valor do
▫ Desabilitar: registro excluído. Ela armazena temporariamente os valores
▫ DISABLE TRIGGER < NOME TR > deletados. Também é criada a tabela INSERTED, porém a
ON <TABELA> mesma esta vazia.

292
Trigger
▪ Sintaxe de criação de uma trigger FOR/AFTER ▪ Sintaxe de criação de uma trigger INSTEAD OF

CREATE TRIGGER uTR_NAME CREATE TRIGGER uTR_NAME


ON NAME_TABLE ON NAME_TABLE OU NAME_VIEW
FOR ou AFTER INSERT, UPDATE , DELETE INSTEAD OF INSERT / UPDATE / DELETE
AS AS
BEGIN BEGIN
SQL_CODE SQL_CODE
END END

293
Trigger
▪ Sintaxe de alteração do código de uma trigger ▪ Sintaxe para visualizar do código da trigger
ALTER TRIGGER uTR_NAME existente
ON NAME_TABLE
▫ SP_HELPTEXT uTR_NAME
FOR ou AFTER INSERT, UPDATE , DELETE
AS
▪ Sintaxe de remoção objeto trigger
▫ DROP TRIGGER uTR_NAME
SQL_CODE

ALTER TRIGGER uTR_NAME


ON NAME_TABLE OU NAME_VIEW
INSTEAD OF INSERT / UPDATE / DELETE
AS
SQL_CODE

294
Trigger – Tabela de auditoria
CREATE TABLE [dbo].[AUDIT_FUNC]( CREATE TRIGGER uTR_AUDIT_FUNC

[MATRICULA] [int] NULL, ON FUNCIONARIO

[NOME] [varchar](255) NULL, AFTER DELETE

AS
[DATANASCIMENTO] [date] NULL,
BEGIN
[CPF] [char](11) NULL,
INSERT INTO AUDIT_FUNC
[SALARIO] [money] NULL,
SELECT * FROM deleted
[DATAADMISSAO] [date] NULL,
END
[DATADEMISSAO] [date] NULL,

[INICIOFERIAS] [date] NULL,


DELETE FROM FUNCIONARIO
[FIMFERIAS] [date] NULL, WHERE MATRICULA = 10
[STATUS_FUNC] [varchar](20) NULL,

[CODDEPTO] [int] NULL, SELECT * FROM AUDIT_FUNC

[CODSUPERVISOR] [int] NULL,

[CODFUNCAO] [int] NULL SELECT * FROM FUNCIONARIO

) WHERE MATRICULA = 10

295
Trigger - Exemplo
CREATE TABLE CAIXA
CREATE TRIGGER uTR_MSG_CAIXA INSERT INTO CAIXA
(
ON CAIXA VALUES (1,GETDATE(),100, 100)
NUMERO INT,
AFTER INSERT, UPDATE, DELETE GO
DATA_CAIXA DATE,
AS
SALDO_INICIAL MONEY,
BEGIN SELECT * FROM CAIXA
SALDO_FINAL MONEY
IF NOT EXISTS(SELECT * FROM INSERTED)
)
-- DELETE UPDATE CAIXA
GO
PRINT 'OCORREU UMA REMOÇÃO NA TABELA CAIXA'; SET SALDO_INICIAL = 150
ELSE WHERE NUMERO = 1
CREATE TABLE VENDAS
BEGIN
(
IF NOT EXISTS(SELECT * FROM DELETED) DELETE CAIXA
CODIGO INT,
-- INSERT WHERE NUMERO = 1
DATA_VENDA DATE,
PRINT 'OCORREU UMA INSERÇÃO NA TABELA CAIXA';
VALOR MONEY
ELSE
)
-- UPDATE
GO
PRINT 'OCORREU UMA ATUALIZAÇÃO NA TABELA CAIXA';

END

END;

296
Trigger - Exemplo
CREATE TRIGGER uTR_VENDAS_CREDITAR
CREATE TRIGGER uTR_VENDAS_DEBITAR --INSERINDO TABELA CAIXA
ON VENDAS
ON VENDAS INSERT INTO CAIXA
AFTER INSERT
AFTER DELETE VALUES (1,GETDATE(),100, 100)
AS
AS GO
BEGIN
BEGIN
DECLARE
DECLARE -- VERIFICANDO TABELA CAIXA
@VALOR MONEY,
@VALOR MONEY, SELECT * FROM CAIXA
@DATA DATE
@DATA DATE
SELECT @DATA = i.DATA_VENDA, @VALOR =
i.VALOR FROM INSERTED as i SELECT @DATA = DATA_VENDA, @VALOR = VALOR FROM --Testando trigger de Insert
DELETED
INSERT INTO VENDAS
UPDATE CAIXA

SET SALDO_FINAL = SALDO_FINAL + @VALOR VALUES (2, GETDATE(), 50)


UPDATE CAIXA
WHERE DATA_CAIXA = @DATA
SET SALDO_FINAL = SALDO_FINAL - @VALOR
END --Testando trigger de delete
WHERE DATA_CAIXA = @DATA
DELETE FROM VENDAS
GO
END
WHERE CODIGO = 2
GO

297
Trigger - Exemplo
CREATE TRIGGER uTR_VALIDA_NUMERO BEGIN TRAN

ON CAIXA INSERT INTO CAIXA

INSTEAD OF INSERT VALUES (1,GETDATE(),200, 100)

AS GO

BEGIN

IF EXISTS ROLLBACK

(SELECT * FROM CAIXA

WHERE NUMERO = (SELECT i.NUMERO FROM inserted i)) SELECT * FROM CAIXA

BEGIN

PRINT 'ERRO - O REGISTRO JÁ EXISTE NA SUA TABELA'

END

ELSE

BEGIN

INSERT INTO CAIXA

SELECT * FROM inserted

END

END

298
User Functions

299
User Functions
▪ User Functions traduzindo para o português ▪ Limitações das funções
significa funções de usuário.
▫ Não se pode usar um bloco Try…Catch
(tratamento de erros).
▪ Funções em T-SQL podem ou não aceitar
parâmetros, efetuar cálculos lógicos e complexos, ▫ Elas não podem retornar tipos de dados text,
e retornar dados. ntext, image, cursor ou timestamp.

▫ Funções definidas pelo usuário (FDU) não


▪ Tipos de funções de usuário do SQL Server podem mudar o estado do banco.

▫ Os uso de funções escalares dentro de um


▫ Escalares: Retornam um único valor. SELECT pode afetar negativamente o
desempenho da query. Pois ela será
▫ Table-Valued: Retornam um conjunto de executada 1 vez para cada registro.

resultados.

300
Functions

▪ Sintaxe de criação de uma Function Scalar ▪ Sintaxe de criação de Function Table – Valued

CREATE FUNCTION uFN_NAME CREATE FUNCTION uFN_NAME

(@PARAMETER_QUERY TYPE_PARAMETER) (@PARAMETER_QUERY TYPE_PARAMETER)

RETURNS INT RETURNS TABLE

AS AS

BEGIN RETURN

DECLARE @PARAMETER_RETURN TYPE_PARAMETER SELECT FIELD1,FIELD2,FIELD3

SELECT PARAMETER_RETURN = CALCULATION FROM TABLE/VIEW

RETURN @PARAMETER_RETURN WHERE FIELD1 = @PARAMETER_QUERY

END

301
Functions
▪ Sintaxe de alteração de uma Function Scalar ▪ Sintaxe de alteração de Function Table – Valued

ALTER FUNCTION uFN_NAME ALTER FUNCTION uFN_NAME

(@PARAMETER_QUERY TYPE_PARAMETER) (@PARAMETER_QUERY TYPE_PARAMETER)

RETURNS INT RETURNS TABLE

AS AS

BEGIN RETURN
DECLARE @PARAMETER_RETURN TYPE_PARAMETER SELECT FIELD1,FIELD2,FIELD3
SELECT PARAMETER_RETURN = CALCULATION FROM TABLE/VIEW
WHERE FIELD1 = @PARAMETER_QUERY
RETURN @PARAMETER_RETURN
END

302
Functions
▪ Sintaxe de remover o objeto Function ▪ OBS.: Lembrar sempre de colocar o schema nas
▫ DROP FUNCTION uFN_NAME funções escalares. Por padrão ao criar um
objeto sem schema, o banco de dados SQL
▪ Sintaxe para visualizar o código de uma function existente. SERVER os insere todos os objetos schema
▫ SP_HELPTEXT uFN_NAME
DBO.

▪ Executando uma Function

▫ Scalar:
SELECT DBO.uFN_NAME (FIELD_TABLE_VIEW) FROM TABLE

▫ Table-Valued:
SELECT * FROM uFN_NAME (PARAMETERS_FUNCTION)

303
Function Scalar
▪ Criando FUNCTION SCALAR
CREATE FUNCTION uFN_AGE
(@DTNASCIMENTO DATE)
RETURNS INT
AS
BEGIN
DECLARE @AGE INT
SET @AGE = DATEDIFF(YEAR, @DTNASCIMENTO,CONVERT(DATE,GETDATE()))
RETURN @AGE
END
▪ Executando FUNCTION SCALAR
SELECT NOME, DATANASCIMENTO, DBO.uFN_AGE(DATANASCIMENTO) AS IDADE
FROM FUNCIONARIO

304
Function Table Valued
▪ Criando FUNCTION TABLE VALUED
CREATE FUNCTION uFN_SALARIOS_MAIORES
(@SALARIO SMALLMONEY)
RETURNS TABLE
AS
RETURN
(
SELECT * FROM FUNCIONARIO
WHERE SALARIO >= @SALARIO
)

▪ Executando FUNCTION TABLE VALUED


SELECT * FROM uFN_SALARIOS_MAIORES (3000)

305
Function Table Valued
▪ Criando FUNCTION SCALAR para calcular uma nota ▪ Executando FUNCTION SCALAR para calcular
create function ufn_resultado_prova nota
(@n1 numeric(5,2), @n2 numeric(5,2))

returns varchar(20) select dbo.ufn_resultado_prova (5,5)


as

begin

declare @resultado varchar(20),

@media numeric(5,2)

set @media = (@n1 +@n2) /2

if (@media > = 7)

select @resultado = 'Aprovado'

else

select @resultado = 'Reprovado'

return @resultado

end

306
Prática

307
Lista de consultas

Executar o script Responder todas as Salvar as respostas


ProjectData.sql questões da lista: list of obtidas
Abrir o script no SQL Server questions ProjectData.pdf Levar as duvidas dos
e executa-lo sem fazer Tentar responder todas as resultados e quais questões
nenhuma alteração. O questões utilizando os teve dificuldade em
mesmo contém a estrutura conceitos aprendidos responder
das tabelas e os inserts

308
Lista de consultas

ProjectData.SQL List of questions Arquivos serão


ProjectData.pdf disponibilizados on-online

309
Conceitos de
administração
de banco de
dados
310
Índices

311
Índices
▪ Um índice é uma estrutura em disco, baseada em tabela
ou Views. Seu objetivo é tornar a recuperação dos dados
mais rápidas e eficientes, na maioria dos casos.
▪ Os índices trabalham sobre uma estrutura chamada B-
Tree ( Binary Tree - Árvore Binária). Uma B-Tree
identifica os dados semelhantes e os agrupa. O rápido
acesso aos dados proporcionado por um índice pode ser
atribuído ao fato de que as pesquisas feitas em uma B-
Tree são baseadas em valores de chave. Como uma B-
Tree agrupa registros com chaves semelhantes, o banco
de dados precisará navegar por apenas algumas
páginas para encontrar os registros.

▪ Os termos bitmap, b-tree, heap e hash são associados a


estruturas de índice.

312
Índices Clusterizados / Índices Não-Clusterizados
▪ Clustered: Só poderá existir um índice clusterizado por ▪ Non-Clustered: Podemos ter quantos forem necessários
tabela ou view. por tabela ou view.

▪ Um índice clusterizado muda o modo como os dados ▪ Quando colocamos uma coluna com a restrição do tipo
são armazenados e classificados. UNIQUE, ela cria um índice não clusterizado na tabela
automaticamente.

▪ Quando se cria uma chave primaria na tabela, ▪ Este tipo de índice não altera a ordem da tabela. Ao
invés disso, os registros estarão armazenados em uma
automaticamente o SQL Server cria um índice
ordem aleatória, entretanto, poderão ser facilmente
Clustered.
localizado através do ponteiro.

313
Índices
▪ Script ▪ Criando índice clusterizado

CREATE DATABASE BD_INDEX CREATE CLUSTERED INDEX CIX_ID


GO
ON DBO.TB_INDEX
(ID ASC )
USE BD_INDEX
GO
▪ Criando índice não clusterizado
CREATE TABLE TB_INDEX
(ID TINYINT,
CREATE NONCLUSTERED INDEX NCIX_NOME
NOME VARCHAR(20))
ON DBO.TB_INDEX
(NOME)

314
Índices
▪ Desabilitando um índice ▪ Apagando um índice

ALTER INDEX CIX_ID DROP INDEX CIX_ID


ON DBO.TB_INDEX DISABLE; ON DBO.TB_INDEX;

ALTER INDEX NCIX_NOME DROP INDEX NCIX_NOME


ON DBO.TB_INDEX DISABLE; ON DBO.TB_INDEX;

315
Backups

316
Backup
▪ O principal objetivo do backup é proteger o ▪ SQL Server possui 3 tipos de backup:
banco de dados contra perda de dados e
inatividade. Contendo em algum tipo de
▫ Backup Completo
repositório, uma copia funcional do banco de
dados.
▫ Backup Diferencial
▫ Backup de logs de transação

▪ Com eles, um DBA pode fazer uma


restauração a partir do último backup ou em
um ponto de tempo específico.

317
Backup

▪ Backup Completo ou Full: É realizado uma ▪ Backup de logs de transação: São utilizados
copia do banco de dados inteiro, ou seja, para restaurar todos as transações
realizadas no banco de dados, podendo ser
toda sua estrutura de criação e os dados.
utilizado para restaurar um ponto especifico
no tempo.
▪ Backup Diferencial: Os backups diferenciais
são menores do que os completos, pois ▫ Para os mesmos funcionarem de
capturam apenas o que foi alterado no forma efetiva, é necessário ter
realizado um backup full e o banco
banco de dados desde o seu último backup
deve estar em modo de recuperação
completo. Para realizar um backup
full ou bulk-logged
diferencial é necessário ter realizado um
backup full.

318
Modelos de recuperação
▪ O modelo determina a precisão que um banco de ▪ Modelo Bulk-logged: É o modelo
dados pode ser restaurado: menos usado. Permite um bom
desempenho enquanto utiliza o menor
▪ Modelo Simple: requer menos administração, pois espaço de log. No entanto, você não
os backups do log de transações são truncados pode fazer uma recuperação algum
regularmente. ponto no tempo.

▪ Modelo Full: permite restaurar em um determinado


momento, pois os arquivos de log registram todas
as transações SQL e a hora em que foram
executadas. As desvantagens do modelo full é que
os logs podem crescer muito.

319
Criando
Backups
no SQL Server

320
Verificando
compatibilidade e
modo de recuperação

Acessar a database >


botão direito >
Properties

321
Verificando
compatibilidade e
modo de
recuperação

Database
Properties >
Options

322
Realizando Backup Full

Selecionar o banco de dados


que será realizado o backup,
clicar com o botão direito,
selecionar a opção Tasks, na
lista que será aberta
selecionar a opção Back
Up…

323
Página General
Database selecionamos o banco
que realizaremos o backup;

Backup type definimos o tipo de


backup, selecionaremos Full;

Destination informamos o
caminho aonde será salvo o
arquivo de backup, também
informaremos o nome do arquivo.

O nome do arquivo deve contar a


extensão .BAK.
Ex: backup.bak

324
Página Media Options

Overwrite Media, selecionamos a opção Overwrite


all existing backup sets, ao selecionar ela
dizemos que vamos sobrescrever um arquivo de
backup já existente, caso a opção Append seja
escolhida, o backup ao invés de sobrescrever irá
salvar as informações dentro do backup já
existente; Reliabitity temos 3 opções:

Verify backup when finished: verifica se o backup


esta integro quando o mesmo for finalizado;

Perform Checksum Before Writing to Media:


Verifica se os dados foram gravados de forma
correta após serem gravados no backup;

Continue on Error: Caso ocorra um erro backup


deve continuar até ser finalizado. Deixamos essas
opções desmarcadas;

325
Página Backup Options

Backup sets: campo name informamos o nome


que o arquivo de backup terá logicamente ao ser
salvo.

backup set will expire: define em quantos dias o


arquivo de backup expira.

Compression definimos qual o tipo de compressão


para nosso arquivo de backup.

Na opção Set backup compression selecionamos


Use the default server setting.

326
Após terminar todo o processo de
configuração do backup clicamos em OK.

Esperamos processo de backup ser


finalizado, após concluído será exibida
uma caixa de mensagem avisando que o
mesmo foi completado com sucesso,
clicamos em OK e finalizamos a criação do
backup com o Management Studio.

327
Backup full na pasta de
destino

328
Backup Full com T-SQL
BACKUP DATABASE AUDITORIA ▪ Abrimos uma nova tela de consulta, selecionamos o
TO DISK = N ' folder\MTA_BACKUP_TSQL.bak' banco master

WITH ▪ Definimos o banco iremos realizar o backup


FORMAT, ▪ TO DISK: o caminho e o nome do arquivo;
INIT, ▪ WITH: especificamos quais configurações o backup
NAME = N'BACKUP FULL COM T-SQL', terá;
SKIP, ▪ FORMAT/NOFORMAT: Especifica que a operação
NOREWIND, de backup preserva o cabeçalho da mídia e os
conjuntos de backup existentes nos volumes de
NOUNLOAD,
mídia usados para esta operação de backup;
COMPRESSION,
STATS = 10,
▪ INIT : Se estiver especificado, qualquer conjunto de
backup existente naquele dispositivo será
CHECKSUM substituído, se as condições permitirem;
GO

329
Backup Full com T-SQL
▪ NAME: Especifica o nome do conjunto de backup; ▪ NOUNLOAD: Especifica que depois da operação
BACKUP a fita permanecerá carregada na unidade
de fita;
▪ SKIP: Desabilita a verificação de validade e nome ▪ COMPRESSION: Habilita explicitamente a
do conjunto de backup que normalmente é compactação de backup;
executada pela instrução BACKUP para impedir a
substituição de conjuntos de backup; ▪ STATS : Exibe uma mensagem sempre que outra
percentagem for concluída e é usada para medir o
progresso;
▪ NOREWIND: Especifica que o SQL Server
mantém a fita aberta após a operação de backup.
É possível usar essa opção para ajudar a melhorar ▪ CHECKSUM: Especifica que a operação de backup
verificará cada página para soma de verificação e
o desempenho ao executar várias operações de
página interrompida, se estiver habilitado e
backup em uma fita; disponível, e irá gera uma soma de verificação para
o backup inteiro.

330
Backup Diferencial

▪ Um backup diferencial captura todas as ▪ Um backup diferencial não é o mesmo


extensões que foram alteradas desde o que um backup incremental. Um
ultimo backup full. A principal finalidade de backup de log é um backup
uma backup diferencial é reduzir o número incremental, porque ele captura todas
de backup de log de transação que as alterações ocorridas desde o último
precisam ser restaurados. Um backup backup de log de transações. Um
diferencial precisar ser aplicado a um backup diferencial conterá todas as
backup full e não pode existir até que o páginas alteradas desde o último
backup full tenha sido criado. backup completo

331
Backup Diferencial

▪ Imaginem que foi realizado um backup ▪ Criar uma tabela na base de dados
completo a 00:00 e um backup diferencial a MTA_BACKUP.
cada 4 horas. No primeiro backup diferencial
realizado as 04:00 irá conter todas as Create table table_audit (
transações realizadas de 00:00 as 04:00. O Number int primary key identity,
Description varchar (50))
segundo backup diferencial é realizado as
08:00. O mesmo irá conter todas as
insert into table_audit(Description)
transações desde o ultimo backup completo,
values ('test 1'),('test 2'),('test 3'),('test 4')
ou seja, ele irá armazenar todas as
transações realizadas desde o ultimo
backup completo.

332
Exemplo Backup diferencial

333
Backup Diferencial

▪ Simulação – Management Studio

▫ Primeiro passo:
▫ excluir o registro de código 4

Delete from table_audit


Where number = 4

▫ Segundo passo:

▫ realizar o backup diferencial


utilizando o Management Studio

334
Realizando Backup Diferencial

Selecionar o banco de dados


que será realizado o backup,
clicar com o botão direito,
selecionar a opção Tasks, na
lista que será aberta selecionar
a opção Back Up…

335
Página General (1)
Source (2): Informar qual
database e no campo Backup
Type Differential.

Destination (3)> informaremos


o caminho e nome do arquivo
com a extensão .BAK

336
Após terminar todo o processo
de configuração do backup
clicamos em OK, esperamos o
processo de backup ser
finalizado, após concluído será
exibida uma caixa de
mensagem avisando que o
mesmo foi completado com
sucesso, clicamos em OK e
finalizamos a criação do
backup com o Management
Studio.

337
Backup diferencial na
pasta de destino

338
Backup Diferencial

▪ Simulação ▪ O procedimento é o mesmo dos passos


anteriores.

▫ Primeiro passo:
▫ Adicionar 2 registros a tabela

insert into table_audit(Description)


values ('test 5'),('test 6')

▫ Segundo passo:

▫ realizar outro backup diferencial.

339
Backup Diferencial com T-SQL

▪ Script para realizar um backup diferencial com T-SQL


▫ Todas as outras clausulas utilizadas após o nome DIFFERENTIAL,
são as mesmas utilizadas no backup completo.

BACKUP DATABASE AUDITORIA


TO DISK = N'D:\files_bd\files_bkp\BKP_MTA_BACKUP_DIF_TSQL.BAK'
WITH DIFFERENTIAL,
NAME = N' BACKUP DIFFERENTIAL TSQL'
GO

340
Backup de log de transação

▪ O log de transação contém um registro de ▪ Nas operações anteriores realizamos um


todas as transações realizadas em backup full da base, depois excluímos um
registro e realizamos o backup diferencial
determinado banco de dados, os backups
com o Management, após o backup
de logs de transação podem ser utilizados
inserimos 2 registros na tabela e realizamos
para restaurar um ponto especifico no outro backup diferencial.
tempo. Você precisa conhecer dois
requisitos importantes: deve ser feito um
backup completo antes de qualquer backup
▪ Iremos realizar uma inserção e realizar um
backup de log com o Management Studio,
de log de transação e o banco de dados depois iremos atualizar uma informação e
deve estar em modo de recuperação realizar um backup de log novamente.
completo ou bulk-logged.

341
Backup de log de transação

▪ Simulação – Management Studio ▪ Segundo passo: Realizar o backup de


log de transação utilizando o
▫ Primeiro Passo: inserindo registro na management studio.
tabela.

insert into table_audit (Description)


values ('test 22')

342
Realizando Backup de log
de transação

Selecionar o banco de
dados que será realizado
o backup, clicar com o
botão direito, selecionar a
opção Tasks, na lista que
será aberta selecionar a
opção Back Up…

343
Página General

Source : Informar qual


database e no campo
Backup Type Transaction
Log.

Destination >
informaremos o caminho e
nome do arquivo com a
extensão .TRN

344
Página Media Options

Overwrite media : Selecionamos a


opção overwrite all existing backup sets

Reliabity: Não marcamos nenhuma


opção.

Transaction log : Para fazer backups de


log rotineiros, mantenha a seleção
padrão truncate the transacion log
removendo entradas inativas.

Para fazer backup da parte final do log


(ou seja, o log ativo), marque back up
the tail of the log, and leave the
database in the restoring state.

345
Após terminar todo o processo de
configuração do backup clicamos
em OK , esperamos o processo de
backup ser finalizado , após
concluído será exibida uma caixa
de mensagem avisando que o
mesmo foi completado com
sucesso, clicamos em OK e
finalizamos a criação do backup
com o Management Studio.

346
Backup de log na pasta de
destino.

347
Backup de log de transação

▪ Simulação ▪ Segundo passo: Realizar um novo


▫ Primeiro Passo: Atualizar o registro da backup de log de transação
tabela ▪ O processo é o mesmo dos itens
anteriores.
update table_audit
set Description = 'test 7'
where Number = 7
and Description = 'test 22'

348
Backup de log de transação com T-SQL

▪ Script backup log T-SQL

BACKUP LOG MTA_BACKUP


TO DISK = N'D:\files_bd\files_bkp\BKP_LOG_MTA_BACKUP_TSQL.TRN'
WITH
NAME = N' BACKUP LOG TSQL'
GO

349
Restore

350
Restore
▪ É o processo de restauração de um backup em uma ▪ Podemos restaurar os arquivos de
instância do SQL Server. backup:
▪ É possível restaurar um backup para:
▫ Tornar disponível um banco inativo ou com ▫ Completo
anormalidades. ▫ Diferencial
▫ Criar um ambiente de testes / desenvolvimento. ▫ Logs de transação
▫ Realizar migração de ambientes.
▫ Restaurar dados que foram perdidos no
ambiente de produção.
▫ Entre outras coisas.

351
Cenários de restaurações possíveis no SQL Server:
▪ Restauração completa do banco de dados: ▪ Restauração do log de transações:
▫ restaura um banco de dados inteiro, começando com um ▫ no modelo de recuperação deve estar como full ou
backup full, que pode ser seguido pela restauração de um bulk-logged, uma vez que os logs registram cada
backup diferencial e posteriormente backups de log. transação realizada na base, é necessária a
▪ Restauração de arquivo: restauração dos backups de log para atingir o ponto
▫ restaura um arquivo ou grupo de arquivos em um banco de de recuperação desejado.
dados. Após uma restauração completa do arquivo, um ▪ Criar um banco de dados espelho:
backup diferencial de arquivos pode ser restaurado.
▫ quando você tem um banco de dados espelho, você
▪ Restauração de página: tem bancos de dados duplicados em vários
▫ restaura páginas individuais. servidores. Quando as informações são gravadas em
▪ Restauração fragmentada: um servidor, elas são replicadas automaticamente
▫ restaura um banco de dados em estágios, começando com o para o segundo servidor.
grupo de arquivos primário e um ou mais grupos de arquivos ▪ Criar e manter um servidor em espera:
secundários. ▫ quando você tem um servidor em espera, está
▪ Apenas recuperação: usando um cluster ativo-passivo que consiste em
▫ recupera dados que já são consistentes com o banco de dois ou mais servidores. Quando o servidor ativo
dados e precisam apenas ser disponibilizados. falha, o servidor passivo se torna o servidor ativo,
permitindo um tempo de inatividade mínimo

352
Restaurando
Backups
no SQL Server

353
Realizando Restore

Databases > botão direito


> Restore Database

354
Selecionar Device > Buscar o
arquivo do backup full realizado.

Informar que o Destino será numa


base chamada DEV_MTA_BACKUP

Clicar em Files

355
Verificar se os arquivos MDF e
LDF foram alterados, conforme
nome da nova base de dados.

Os arquivos devem possuir o


nome DEV_MTA_BACKUP.MDF
e DEV_MTA_BACKUP_log.LDF

Clicar em Options

356
Na opção Recovery State
selecionar a opção RESTORE
WITH NORECOVERY.

Selecionar também a opção


Close existing....

Clicar em OK.

357
O banco será criado e ficará no
status de Restoring. Esse
status é necessário para que
possamos realizar o backup
diferencial e de log.

358
Na opção Recovery State
clicamos no botão direito >
Tasks > Restore > Database...

359
Selecionamos Device e
escolhemos o backup
diferencial 01.

Informamos que a base destino


é DEV_MTA_BACKUP

Clicar em Files

360
Verificar se o arquivo esta
apontando para o caminho com
nome DEV_MTA_BACKUP....

Clicar em Options.

361
Marcar a opção Overwrite....

Selecionar a opção RESTORE


WITH NORECOVERY

Clicar em OK.

362
Selecionamos Device e
escolhemos o backup
diferencial 02.

Informamos que a base destino


é DEV_MTA_BACKUP

Clicar em Files

Verificar se os arquivos estão


no diretório e nomes certos.

363
Marcar a opção Overwrite....

Selecionar a opção RESTORE


WITH NORECOVERY

Clicar em OK.

364
Selecionamos Device e
escolhemos o backup de log
01.

Informamos que a base destino


é DEV_MTA_BACKUP

Clicar em Files

Verificar se os arquivos estão


no diretório e nomes certos.

365
Marcar a opção Overwrite....

Selecionar a opção RESTORE


WITH RECOVERY. Fazendo
isso o banco de dados torna-se
disponível novamente.

Clicar em OK.

366
Com o banco DEV_MTA_BACKUP
disponível novamente vamos
verificar se o mesmo esta com a
mesma estrutura do banco
MTA_BACKUP.

Abrir uma nova janela de query.

367
Na janela de query realizar as seguintes
consultas.

select *
from DEV_MTA_BACKUP.dbo.table_audit

select *
from MTA_BACKUP.dbo.table_audit

O valor test 7 esta contigo no backup de log 2,


como o mesmo não foi restaurado na base
DEV_MTA_BACKUP, não possuímos a
atualização do number 7 para test 7.

368
Restore com T-SQL
▪ VERIFICAR NOME DOS ARQUIVOS MDF E LDF
▪ PRIMEIRO: RECUPERAR ULTIMO BACKUP
FULL, COM A CLAUSULA NORECOVERY - O
DO BACKUP BANCO FICA INDISPONIVEL PARA UTILIZAÇÃO

RESTORE FILELISTONLY RESTORE DATABASE RESTORE_TSQL

FROM DISK ='FOLDER\backupfull_tsql.bak' FROM DISK = N'folder\backupfull_tsql.bak'


WITH
FILE = 1,
MOVE 'RESTORE_TSQL' TO 'folder\FILE_TSQL.mdf',
MOVE 'RESTORE_TSQL_LOG' TO
'folder\FILE_TSQL_log.ldf',
RECOVERY,
NOUNLOAD,
STATS = 10
GO

369
Restore com T-SQL
▪ VERIFICAR NOME DOS ARQUIVOS MDF E LDF ▪ PRIMEIRO RECUPERAR ULTIMO
DO BACKUP BACKUP FULL, COM A CLAUSULA
NORECOVERY - O BANCO FICA
INDISPONIVEL PARA UTILIZAÇÃO
RESTORE FILELISTONLY
FROM DISK ='FOLDER\FILE_BACKUP.bak' ▪ RESTAURAR OS ARQUIVOS
DIFERENCIAIS COM A CLAUSULA
NORECOVERY PARA CONTINUAR
DEIXANDO O BANCO INDISPONIVEL.
▪ RESTAURAR O BACKUP DE LOG COM
▪ A CLAUSULA RECOVERY PARA
TORNAR O BANCO DE DADOS
DISPONIVEL PARA USO.

370
Restore com T-SQL
▪ RESTAURANDO BACKUP FULL
▪ RESTAURANDO BACKUP DIFERENCIAL

RESTORE DATABASE TSQL_MTA_BACKUP


RESTORE DATABASE TSQL_MTA_BACKUP
FROM DISK = 'D:\files_bd\files_bkp\bkp_diff01.bak'
FROM DISK = N'D:\files_bd\files_bkp\bkp_full.bak'
WITH
WITH
NORECOVERY
FILE = 1,
GO
MOVE 'MTA_BACKUP' TO
'D:\files_bd\files_mdf\TSQL_MTA_BACKUP.mdf',
MOVE 'MTA_BACKUP_LOG' TO ▪ RESTAURANDO BACKUP DE LOG
'D:\files_bd\files_ldf\TSQL_MTA_BACKUP_log.ldf',
NORECOVERY, RESTORE LOG TSQL_MTA_BACKUP
NOUNLOAD, FROM DISK = 'D:\files_bd\files_bkp\bkp_log01.trn'
STATS = 10 WITH RECOVERY
GO GO

371
Conceitos de
segurança de
banco de dados

372
Segurança do SQL Server
▪ A utilidade de um banco de dados depende em grande ▪ Contas de serviço do SQL Server:
parte sobre a segurança das informações que ele ▫ Local account: Boa para ser utilizada
contém. Portanto, como um administrador de banco quando nenhum acesso a rede é
de dados, você deve ter uma compreensão clara de necessário, restrito a uma máquina local.
como as permissões são concedidas de modo que os
usuários possam acessar apenas certas tabelas ou ▫ System Account: Boa para ser utilizada
bases de dados. quando nenhum acesso a rede é
▪ Vamos entender alguns conceitos de segurança do necessário e é bom para instalações de
SQL Server. um único servidor.
▫ Um login ou logon é o processo pelo qual o acesso
individual a um sistema de computador é ▫ Domain account: Boa para ser utilizado
controlado por identificação do utilizador através em todos outros cenários e é geralmente
das credenciais que ele ou ela oferece. O método o recomendado para ambientes de
de login mais comum envolve o fornecimento produção.
tanto um nome de usuário e senha.

373
SEGURANÇA A NÍVEL DE SERVIDOR
▪ LOGIN
▫ Conecta você ao servidor e pode atribuir certos tipos de permissões a nível de servidor.

▫ As portas padrão para conexão com o SQL Server são: 1433 e 1434

▫ Existem dois tipos de autenticações para logins:


▫ Windows Authentication: Autenticação via Active Directory. Habilitada por padrão na
instalação do Sql Server e pode ser permitida para um usuário ou um grupo.
▫ SQL Authentication: Autenticado por logins criados diretamente no SQL Server.
Desabilitada por padrão na instalação. Nesse tipo de autenticação o SQL Server
mantêm sua própria política de segurança de senhas.

▫ Logins podem ter uma ou mais roles, que vão indicar quais as permissões e quais as
atividades podem ser feitas por eles.

374
SEGURANÇA A NÍVEL DE SERVIDOR
▪ SERVER ROLES:
▫ Bulkadmin: pode executar operações de inserção em massa (bulk insert).
▫ Dbcreator: pode criar, alterar, excluir e restaurar bancos de dados.
▫ Diskadmin: pode criar, alterar e excluir arquivos de disco.
▫ Processadmin: pode matar um processo do SQL Server em execução (KILL).
▫ Securityadmin: pode gerenciar os logins do servidor.
▫ Serveradmin: pode definir as configurações de todo o servidor, incluindo a pesquisa de texto completo
(full text search) e o desligamento do servidor.
▫ Setupadmin: pode configurar Linked Servers, Extended Stored Procedures e o inicializar Stored
Procedures.
▫ Sysadmin: pode executar qualquer atividade na instalação do SQL Server, independentemente de
qualquer outra configuração de permissão. Tem acesso a todas as permissões de servidor.

375
SEGURANÇA A NÍVEL DE BANCO DE DADOS
▪ DATABASE USER

▫ Logins são mapeados dentro de cada banco de dados como usuários.

▫ Um login pode mapear diferentes usuários em diferentes bancos de dados.

▫ Usuários dentro de banco de dados, recebem permissões para atuar dentro dos bancos de dados.

▫ Usuários podem receber atribuições de uma ou mais database roles ou user-defined roles.

376
SEGURANÇA A NÍVEL DE BANCO DE DADOS
▪ DATABASE ROLES

▫ db_accessadmin: autoriza um usuário a acessar o banco de dados, mas não a gerenciar a segurança no nível do banco de dados.

▫ db_backupoperator: permite que um usuário execute backups, pontos de verificação e comandos DBCC, mas não restaura. (Apenas

administradores de sistema do servidor podem executar restaurações.)

▫ db_datareader: autoriza um usuário a ler todos os dados no banco de dados.

▫ db_datawriter: permite que um usuário grave todos os dados no banco de dados.

▫ db_ddladmin: autoriza um usuário a executar comandos DDL (CREATE, ALTER, DROP).

▫ db_denydatareader: Bloqueia um usuário de ler qualquer tabela no banco de dados.

▫ db_denydatawriter: Bloqueia um usuário de modificar dados em qualquer tabela no banco de dados.

▫ db_owner: esta é uma função especial, que possui todas as permissões no banco de dados. Essa função inclui todos os recursos das

outras funções e difere da função de usuário dbo.

▫ db_securityadmin: permite que um usuário gerencie a segurança no nível do banco de dados, incluindo funções e permissões.

377
SEGURANÇA A NÍVEL DE BANCO DE DADOS
▪ Noções básicas sobre permissões de objeto:

▫ permitem que um usuário atue em objetos de banco de dados, como tabelas, stored procedures e views.
▪ Existem vários tipos específicos de permissões de objetos:

▫ SELECT: o direito de selecionar dados. A permissão de SELECT pode ser aplicada a colunas específicas.
▫ INSERT: o direito de inserir dados.
▫ UPDATE: o direito de modificar os dados existentes. Os direitos de atualização para os quais uma cláusula WHERE é usada
também exigem direitos de seleção. A permissão de atualização pode ser definida em colunas específicas.
▫ DELETE: o direito de excluir os dados existentes.
▫ DRI (REFERENCES): o direito de criar chaves estrangeiras com o DRI.
▫ EXECUTE: o direito de executar stored procedures ou funções definidas pelo usuário.
▪ As permissões de objeto são atribuídas com os comandos DCL: GRANT, REVOKE e DENY.

▪ USER-DEFINED ROLES
▫ Você pode criar novas roles e permissões de acordo com sua necessidade.
▪ SCHEMA DBO
▫ Database owner: é o schema padrão para criação de novos objetos.

378
Criação de
login, usuário e
definições de
regras no
SQL SERVER
379
Criando um login no SQL Server via Management Studio
▪ Acessar Instancia > Clicar na pasta Security >
Clicar com o botão direito na pasta Login >
Selecionar New Login.

380
Criando um login no SQL Server via Management Studio

▪ Informamos o nome do Login do usuário >


Como o mesmo irá fazer login > informamos
a senha > Selecionamos o Default
Database.
▪ Clicamos no item Server Roles da seleção
de página.

381
Criando um login no SQL Server via Management Studio

▪ Em Server Roles poderemos escolher quais


funções de servidor que o usuário pode
assumir. Por padrão a função public já vem
habilitada.
▪ Clicamos no item User Mapping da seleção
de página.

382
Criando um login no SQL Server via Management Studio
▪ Em User Mapping iremos determinar a quais
banco de dados o novo usuário terá acesso.
▪ Após selecionar a base, podemos associar a quais
funções de banco de dados ele irá pertencer.
▪ Clicamos no item Securables da seleção de
página.

383
Criando um login no SQL Server via Management Studio

▪ Nesta opção podemos ver a lista de itens


que podem ser protegidos e suas
correspondentes ou as permissões que
podem ser atribuídas a esse login.
▪ Normalmente, a segurança é definida em
nível de servidor ou banco de dados.
Contudo o SQL Server oferece a
capacidade de definir um nível de
segurança muito mais refinado.
▪ Clicamos no item Securables da seleção de
página.

384
Criando um login no SQL Server via Management Studio

▪ Na tela de Status deixamos marcado a


opção Grant para permitir conexão com a
instancia do banco de dados. Também
marcamos a opção Enabled para o Login.
▪ Clicamos em OK para finalizar o processo.

385
Criando um login no SQL Server via Management Studio

▪ Usuário criado pelo processo.


▪ O mesmo fica localizado dentro da pasta
Security > Login.

386
Configurando usuário no SQL Server via Management Studio

▪ Uma vez com o usuário criado, vamos no


banco de dados que estamos utilizando.
▪ Clicamos no mesmo > selecionamos a
pasta Security > selecionamos a pasta
Users.
▪ Percebam que o usuário já esta contido na
pasta. Clicamos com o botão direito em
cima do mesmo e selecionamos a opção
Properties.

387
Configurando usuário no SQL Server via Management Studio

▪ Vamos até a página Securables.


▪ Clicamos no botão Search...
▪ Uma tela será exibida ao clicar no mesmo.

388
Configurando usuário no SQL Server via Management Studio

▪ A tela Add Objects será exibida, devemos


escolher quais opções queremos. Para o
exemplo selecionamos a opção Specific
objects. Após seleção clicamos em OK.
▪ A tela Select Objects será exibida. Clicamos
no botão Object Types. Uma tela será
exibida ao executar o clique do botão.

389
Configurando usuário no SQL Server via Management Studio

▪ A tela Select Object Types mostrará uma


lista de objetos que podemos liberar para o
determinado usuário ter acesso. Estaremos
selecionando o objeto Tables. Clicar em OK.

390
Configurando usuário no SQL Server via Management Studio
▪ Após seleção dos objetos voltamos a tela
Select Objects. Clicamos no botão Browse para
selecionar quais tabelas o usuário pode ter
acesso. Após selecionarmos as mesmas
clicamos em OK. Voltaremos para a tela Select
Objects clicamos em OK novamente.

391
Configurando usuário no SQL Server via Management Studio

▪ Voltaremos para a tela Securables.


▪ Selecionamos a tabela em questão, abaixo
serão exibidas as permissões que o usuário
terá sobre a tabela. Marcaremos apenas a
permissão de realizar o comando Select.
Clicamos em OK para finalizar o processo.

392
Configurando usuário no SQL Server via Management Studio

▪ Acessamos a instancia com o novo usuário


criado.
▪ Percebam que apenas a tabela que foi
liberada no processo anterior fica visível
para o mesmo.
▪ Caso o novo usuário tente acessar outro
banco de dados que o mesmo não tenha
permissão, uma mensagem de erro é
exibida informando que o banco de dados
não esta acessível.

393
Configurando usuário no SQL Server via Management Studio

▪ Iremos abrir uma nova janela de Query.


▪ Realizaremos o comando Select na
tabela especifica para ver se as
permissões estão funcionando
corretamente.
▪ Após tentaremos executar um comando
de Insert para verificar se o usuário não
possui permissão para a mesma.

394
Utilizando T-SQL para criar um login do servidor

/*CRIANDO LOGIN BASEADO NO WINDOWS*/


USE [master]
CREATE LOGIN [DOMAIN\userTest1] FROM WINDOWS WITH DEFAULT_DATABASE=[master]

/*CRIANDO LOGIN BASEADO NA AUTENTICAÇÃO DO SQL SERVER*/


USE [master]
CREATE LOGIN [userTest2] WITH PASSWORD=N'123', DEFAULT_DATABASE=[master]

/*APAGANDO LOGIN DO USUARIO*/


USE [master]
DROP LOGIN [userTest2]

395
Utilizando T-SQL para criar um usuário na database
/*CRIANDO USUARIO NO DATABASE MTA_CURSO VINCULANDO AO LOGIN userTest*/
USE MTA_CURSO;
CREATE USER [userTest] FOR LOGIN [userTest] WITH DEFAULT_SCHEMA=[dbo]

USE MTA_CURSO
DROP USER [userTest]

/*DANDO APENAS PERMISSÃO DE SELECT AO USUARIO*/


USE MTA_CURSO
GRANT SELECT ON dbo.[PRODUTOS] TO [userTest]

/*NEGANDO PERMISSÃO DE SELECT AO USUARIO*/


DENY SELECT ON dbo.[PRODUTOS] TO [userTest]

396
Agendando a
prova

397
Marcando a prova
▪ Antes de tudo você deve possuir uma
conta da Microsoft para realização do
exame. Podendo ser hotmail.com.br,
outlook.com.br, hotmail.com ou
outlook.com.
▪ Acessar o site da Microsoft de
preferência com o navegador Edge ou
Internet Explorer.
▪ https://www.microsoft.com/pt-
br/learning/exam-98-364.aspx
▪ Clicar no botão Agendar com a Pearson
VUE. Você será encaminhado para uma
nova página.

398
Marcando a prova
▪ Preencher os dados do seu perfil na Microsoft. O Legal
name será o nome que virá no certificado em caso de
aprovação.
▪ Após preencher as informações, aceitar os termos de
uso e clicar no botão Save & continue.
▪ Os dados serão salvos e você será encaminhado para
uma nova página.

399
Marcando a prova
▪ Após todos os campos preenchidos na página anterior,
clicar no botão Continue to Pearson VUE.
▪ Você será encaminhado para a página da Pearson
VUE.

400
Marcando a prova
▪ Após todos os campos preenchidos na
página anterior, clicar no botão Continue to
Pearson VUE.
▪ Você será encaminhado para a página da
Pearson VUE.
▪ A primeira opção é para selecionar aonde
você quer realizar a prova.
▪ Selecione a opção e clicar em Next.
▪ Estamos simulando a marcação da prova em
um centro de teste.

401
Marcando a prova
▪ Após escolher aonde será realizada
a prova, você deverá escolher qual o
idioma da prova.
▪ Selecionar o idioma desejado e
clicar em Next.
▪ Estaremos simulando a prova sendo
realizada no idioma português.

402
Marcando a prova
▪ Após selecionar o idioma, você será
encaminhado para uma página com o
resumo das opções selecionadas.
▪ Clicar no botão Schedule this Exam.

403
Marcando a prova
▪ Primeiro item a ser selecionado na
marcação do exame é o local de realização
da prova.
▪ Selecione o local mais próximo de sua
residência ou trabalho e clique em Next.
▪ Em Recife/PE existe apenas um centro de
aplicação.

404
Marcando a prova
▪ Na tela seguinte você deverá selecionar o
dia e a hora de agendamento da prova.
▪ Primeiro selecionar o dia, após isso as
horas disponíveis serão carregadas em tela.
▪ Selecionar a hora, após seleção você será
encaminhado para outra página.

405
Marcando a prova
▪ Na tela My Order, serão exibidas todas as
informações selecionadas anteriormente.
▪ Rolar a página até o final e clicar no botão
Proceed to Checkout.

406
Marcando a prova
▪ Na etapa 1 de 5, será para checar os dados
de contato do usuário.
▪ Clicar em Next.

407
Marcando a prova
▪ Na etapa 2 de 5, será para aceitar as
politicas da Microsoft.
▪ Clicar em Next.

408
Marcando a prova
▪ Na etapa 3 de 5, você devera entrar com as
informações do seu cartão de crédito.
▪ Após informar os dados você deverá clicar
em Next.
▪ Na etapa 4 de 5, você confirmará as
informações para pagamento, clicar em
confirmar.
▪ Na etapa 5 de 5, será a exibição de todos os
itens selecionados desde o inicio do
processo. A Microsoft enviará um e-mail
com todos os dados da marcação da prova.

409
Portal Microsoft – Seu Painel

▪ No link abaixo você estará no Seu painel de controle. Nele você


consegue visualizar suas provas agendadas, remarcar provas, baixar e
compartilhar certificados, badges, títulos e transcript.

https://www.microsoft.com/pt-br/learning/dashboard.aspx

410
Portal Microsoft – Seu Painel

411
Portal Microsoft - Central de chamados
▪ Caso necessite ajustar algo em sua conta da ▪ Link Fórum MCP
Microsoft como ajustar o nome do certificado,
transferir o certificado de conta Microsoft, unificar
contas e etc, você deverá acessar o link abaixo. https://trainingsupport.microsoft.com/pt-
▪ Este é o fórum para Certificação da Microsoft. O br/mcp/forum?sort=LastReplyDate&dir=De
login deve ser realizado com sua conta da sc&tab=All&status=all&mod=&modAge=&a
Microsoft (outlook ou Hotmail). dvFil=&postedAfter=&postedBefore=&threa
▪ Quais quer problema, você deve realizar uma dType=All&isFilterExpanded=false&page=1
pergunta detalhando seu problema. Uma vez
aberto o chamado o mesmo será respondido pelo
suporte da Microsoft.

412
Portal Microsoft - Central de chamados

413
Simulado
On-line

414
Formas de realizar o simulado online

▪ Link ▪ QR Code

https://forms.office.com/Pages/ResponsePage.a
spx?id=DQSIkWdsW0yxEjajBLZtrQAAAAAAAA
AAAANAARzVM1pURDQ1MjVBS1pGNE1MSF
E3MDJDQTI2MjRGUC4u

415
Finalizamos o preparatório para a
certificação Microsoft MTA DB!!!

Muito Obrigado por sua participação


e boa sorte na prova!!!
Alguma dúvida, sugestão,
comentário ou reclamação?
Vocês podem me encontrar:
▪ LinkedIN: Luiz Santana
▪ luiz.santana@outlook.com.br
416

Você também pode gostar