Escolar Documentos
Profissional Documentos
Cultura Documentos
T-SQL
Olá!
Sou Luiz Santana seu Professor.
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
3 3
Minhas Bagdes
4 4
Dicas de estudo – Rotina de estudo
5 5
Dicas de estudo - Livros
6 6
Dicas de estudo - Aplicativos
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
10 10
Conteúdo do curso
11 11
Certificação
MTA
12
MTA Database Fundamentals
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%)
16
MTA Database Fundamentals
▪ Criar objetos do banco de dados (20-25%)
▫ Criar exibições
▫ Compreender como usar as exibições e como criar exibições usando T-SQL ou um designer gráfico
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 í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%)
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.
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:
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.
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.
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.
26
Modelo de Dados
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;
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).
40
Generalização
▪ Generalização: Quando duas entidades
podem ser agrupadas, em virtude de
suas semelhanças (atributos em
comum), gerando uma superentidade.
41
Especialização
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.
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.
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).
53
Atributos Multivalorados
▪ São atributos que podem assumir mais de um
valor por ocorrência.
54
Atributos Determinantes
▪ É um atributo ou conjunto de atributos que têm
a capacidade de identificar unicamente uma
ocorrência em uma entidade.
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.
69
Passos para Transformação
70
Passo 1: Tradução inicial de entidades e respectivos atributos
▫ Cada entidade é traduzida para uma
tabela.
71
Passo 1: Tradução inicial de entidades e respectivos atributos
▪ Atributo multivalorado
72
Transformação do modelo conceitual em fisico
▪ Atributo composto
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.
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
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.
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
84
Aplicando engenharia reversa
▪ A tela ao lado contém os registros dos
alunos e os cursos em que ele se
matriculou.
85
Aplicando engenharia reversa
▪ Esquema descrevendo os dados do aluno em uma tabela não normalizada:
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
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:
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.
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:
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:
104
Exercício 06 – Construir um projeto de banco de dados
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
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
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
119
Baixando o SQL Server
120
Baixando o SQL Server
121
Instalando o
SQL Server
122
Instalando o SQL Server
123
Instalando o SQL Server
124
Instalando o SQL Server
125
Instalando o SQL Server
126
Instalando o SQL Server
127
Instalando o SQL Server
128
Instalando o SQL Server
129
Instalando o SQL Server
130
Instalando o SQL Server
131
Instalando o SQL Server
Na tela Database Engine Configuration,
vamos configurar a aba Server
Configuration.
132
Instalando o SQL Server
133
Instalando o SQL Server
134
Instalando o SQL Server
Aguardar em torno de 30 a 40
minutos para que o processo seja
finalizado.
135
Instalando o SQL Server
136
Acessando o SQL Server
137
Acessando o SQL Server
138
Acessando o SQL Server
139
Acessando o SQL Server
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
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)
148
Tipo de Dado Descrição Tamanho (bytes)
149
Tipo de Dado Descrição Tamanho (bytes)
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.
150
Tipo de Dado Descrição Tamanho (bytes)
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
cursor Armazena uma referência a um cursor usado para operações de banco de dados
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
▪ 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.
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.
163
DQL: DATA QUERY LANGUAGE
O DQL é usado para a consultar dados no
banco.
Seu comando é:
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.
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))
▪ 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;
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
168
Comandos DDL
▪ TRUNCATE
▫ Sintaxe
▫ TRUNCATE TABLE NOMETABELA;
169
SCRIPT DML, DCL, DQL, DTL
CREATE DATABASE BD_DML
USE BD_DML
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')
172
Comandos DML
▪ UPDATE ▪ Atualizando o registro de um campo da tabela
▫ Sintaxe: funcionário
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
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
176
Comandos DCL
▪ GRANT / REVOKE / DENY ▪ Desfazendo permissão dada do comando GRANT
▫ Sintaxe
REVOKE INSERT ON DBO.TB_DML TO USER_DCL
USER_DCL REVERT;
177
Permissões para os comandos DCL
▪ Lista de privilégios
Privilégio Descrição
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)
)
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.
▪ Apagando constraint
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
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 )
189
Default
▪ Adicionando default em uma coluna já criada ▪ Apagando constraint DEFAULT
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
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
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)
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
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
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
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
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
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 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
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
219
Joins
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)
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
▪ 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
234
INTERSECT
235
INTERSECT
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.
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
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
242
Conversão de dados
▪ CONVERT: Função de conversão da engine do SQL Server. DECLARE @DT DATETIME
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
▪ 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.
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
▪ 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.
▪ 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.
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))
▪ 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
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:
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.
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
▪ 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
▪ 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
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
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
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.
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.
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
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:
▪ Podemos criar procedures que irão nos retornar CREATE PROC OU PROCEDURE uSP_NAME
284
Stored Procedure
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
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.
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.
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.
292
Trigger
▪ Sintaxe de criação de uma trigger FOR/AFTER ▪ Sintaxe de criação de uma trigger INSTEAD OF
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
294
Trigger – Tabela de auditoria
CREATE TABLE [dbo].[AUDIT_FUNC]( CREATE TRIGGER uTR_AUDIT_FUNC
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,
) 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
297
Trigger - Exemplo
CREATE TRIGGER uTR_VALIDA_NUMERO BEGIN TRAN
AS GO
BEGIN
IF EXISTS ROLLBACK
WHERE NUMERO = (SELECT i.NUMERO FROM inserted i)) SELECT * FROM CAIXA
BEGIN
END
ELSE
BEGIN
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.
resultados.
300
Functions
▪ Sintaxe de criação de uma Function Scalar ▪ Sintaxe de criação de Function Table – Valued
AS AS
BEGIN RETURN
END
301
Functions
▪ Sintaxe de alteração de uma Function Scalar ▪ Sintaxe de alteração de Function Table – Valued
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.
▫ 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
)
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))
begin
@media numeric(5,2)
if (@media > = 7)
else
return @resultado
end
306
Prática
307
Lista de consultas
308
Lista de consultas
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.
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
314
Índices
▪ Desabilitando um índice ▪ Apagando um índice
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
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.
319
Criando
Backups
no SQL Server
320
Verificando
compatibilidade e
modo de recuperação
321
Verificando
compatibilidade e
modo de
recuperação
Database
Properties >
Options
322
Realizando Backup Full
323
Página General
Database selecionamos o banco
que realizaremos o backup;
Destination informamos o
caminho aonde será salvo o
arquivo de backup, também
informaremos o nome do arquivo.
324
Página Media Options
325
Página Backup Options
326
Após terminar todo o processo de
configuração do backup clicamos em OK.
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
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
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
▫ Primeiro passo:
▫ excluir o registro de código 4
▫ Segundo passo:
334
Realizando Backup Diferencial
335
Página General (1)
Source (2): Informar qual
database e no campo Backup
Type Differential.
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
▫ Primeiro passo:
▫ Adicionar 2 registros a tabela
▫ Segundo passo:
339
Backup Diferencial com T-SQL
340
Backup de log de transação
341
Backup de log de transação
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
Destination >
informaremos o caminho e
nome do arquivo com a
extensão .TRN
344
Página Media Options
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
348
Backup de log de transação com T-SQL
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
354
Selecionar Device > Buscar o
arquivo do backup full realizado.
Clicar em Files
355
Verificar se os arquivos MDF e
LDF foram alterados, conforme
nome da nova base de dados.
Clicar em Options
356
Na opção Recovery State
selecionar a opção RESTORE
WITH NORECOVERY.
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.
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....
Clicar em OK.
362
Selecionamos Device e
escolhemos o backup
diferencial 02.
Clicar em Files
363
Marcar a opção Overwrite....
Clicar em OK.
364
Selecionamos Device e
escolhemos o backup de log
01.
Clicar em Files
365
Marcar a opção Overwrite....
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.
367
Na janela de query realizar as seguintes
consultas.
select *
from DEV_MTA_BACKUP.dbo.table_audit
select *
from MTA_BACKUP.dbo.table_audit
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
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
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
▫ 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
▫ 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
▫ 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
▫ 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
381
Criando um login no SQL Server via Management Studio
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
384
Criando um login no SQL Server via Management Studio
385
Criando um login no SQL Server via Management Studio
386
Configurando usuário no SQL Server via Management Studio
387
Configurando usuário no SQL Server via Management Studio
388
Configurando usuário no SQL Server via Management Studio
389
Configurando usuário no SQL Server via Management Studio
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
392
Configurando usuário no SQL Server via Management Studio
393
Configurando usuário no SQL Server via Management Studio
394
Utilizando T-SQL para criar um login do servidor
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]
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
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!!!