SlideShare uma empresa Scribd logo
1 de 81
Baixar para ler offline
UM BREVE TREINAMENTO SOBRE SQL E
SUAS FUNCIONALIDADES
WILLIAM COSTA
INTRODUÇÃO
O QUE VEREMOS?
▸ Introdução
▸ Por que saber SQL
▸ SQL e suas vantagens
▸ Subconjuntos da linguagem
▸ Linguagem de Consulta 

de Dados
▸ Query simples
▸ Funções agregadas
▸ Funções específicas

do SQL Server
▸ Conversão de dados
▸ Estrutura de repetição
▸ Query Elaborada
▸ Junções
▸ Agrupando dados
▸ Ordenando dados
▸ Cláusula HAVING
▸ Operadores Lógicos 

e Matemáticos
▸ Produto cartesiano
▸ Usando apelidos
▸ Subconsulta
▸ Linguagem de definição de Dados
▸ Triggers
▸ Tables
▸ Views
2
INTRODUÇÃO
O QUE É SQL
▸ Linguagem utilizada para
manipulação de dados
em banco de dados.
▸ Structured 

Query 

Language
3
POR QUE SABER SQL?
4
SQL E SUAS VANTAGENS
POR QUE SABER SQL?
▸ É uma linguagem simples;
▸ Largamente utilizada, seja em uma empresa de
pequeno ou médio porte ou no Google, sempre
existirá uma aplicação que utilize SQL;
▸ É uma linguagem "estática", isto é, poucas mudanças
ocorrem na linguagem;
5
SQL E SUAS VANTAGENS
MAS EM EMPRESAS DE PEQUENO E MÉDIO PORTE?
▸ SQL irá facilitar seu trabalho;
▸ Algumas funcionalidades de sistemas exigem que
você saiba SQL (como relatórios personalizados e
integração externa);
6
SQL > SUBCONJUNTOS DA LINGUAGEM
A LINGUAGEM PODE SER DIVIDIDA EM:
▸ DML - Linguagem de Manipulação de Dados
▸ DDL - Linguagem de Definição de Dados
▸ DCL - Linguagem de Controle de Dados
▸ DTL - Linguagem de Transação de Dados
▸ DQL - Linguagem de Consulta de Dados
7
SQL > SUBCONJUNTOS DA LINGUAGEM
DML - LINGUAGEM DE MANIPULAÇÃO DE DADOS
▸ INSERT
▸ UPDATE
▸ DELETE
8
SQL > SUBCONJUNTOS DA LINGUAGEM
DDL - LINGUAGEM DE DEFINIÇÃO DE DADOS
▸ CREATE
▸ Table
▸ Index
▸ View
▸ ...
▸ DROP
▸ Table
▸ Index
▸ View
▸ ...
9
▸ ALTER
▸ Table
▸ Index
▸ View
▸ ...
SQL > SUBCONJUNTOS DA LINGUAGEM
DQL - LINGUAGEM DE CONSULTA DE DADOS
▸ SELECT
10
SQL > LINGUAGEM DE CONSULTA DE DADOS
▸ Embora seja composto por apenas um comando,
este é o subconjunto mais utilizado
SELECT id, n_identificador, n_folha, nome FROM pessoas
SELECT * FROM pessoas
SELECT * FROM pessoas WHERE id = 1
SELECT * FROM pessoas ORDER BY nome DESC
SELECT * FROM pessoas WHERE id IN (1, 2, 3)
SELECT * FROM pessoas WHERE id IN (SELECT pessoa_id FROM eventos_acessos)
11
DQL - LINGUAGEM DE CONSULTA DE DADOS
SQL > LINGUAGEM DE CONSULTA DE DADOS
Esse comando possui as seguintes cláusulas:
▸ FROM
▸ WHERE
▸ GROUP BY
▸ HAVING
▸ ORDER BY
▸ DISTINCT
▸ UNION
12
SQL > LINGUAGEM DE CONSULTA DE DADOS
Veremos neste breve treinamento
▸ WHERE
▸ GROUP BY
▸ HAVING
▸ ORDER BY
13
SQL É QUASE COMO ESCREVER (EM INGLÊS)
O QUE O SGBD IRÁ FAZER, POR EXEMPLO:
14
SELECIONAR TUDO DA TABELA DE PESSOAS
ONDE O ID FOR MAIOR DO QUE 1, ORDENANDO
OS RESULTADOS POR NOME DE FORMA
DECRESCENTE
Descrição em português do que será feito
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES 15
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES 16
SELECT * FROM pessoas
WHERE id > 1
ORDER BY nome DESC
Instrução SQL
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES > FUNÇÕES AGREGADAS
▸ O SQL possui algumas funções que atuam sobre grupos de
registros, estas são chamadas de funções agregadas. Entre as
mais comuns podemos listar:
▸ COUNT: Retorna o número de linhas afetadas pelo comando.
▸ SUM: Retorna o somatório do valor das colunas especificadas.
▸ AVG: Retorna a média aritmética dos valores das colunas.
▸ MIN: Retorna o menor valor da coluna de um grupo de linhas.
▸ MAX: Retorna o maior valor da coluna de um grupo de linhas.
17
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES > FUNÇÕES AGREGADAS
Exemplos:
▸ COUNT: SELECT COUNT(*) FROM pessoas
▸ SUM: SELECT SUM(valor_refeicao) FROM eventos_acessos
▸ AVG: SELECT pessoa_id, AVG(valor_refeicao) FROM
eventos_acessos GROUP BY pessoa_id
▸ MIN: SELECT MIN(id) FROM pessoas
▸ MAX: SELECT MAX(id) FROM pessoas
18
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES > FUNÇÕES ESPECÍFICAS
O SQL Server possui algumas funções específicas, entre
elas podemos citar:
▸ LEN: Retorna a quantidade de caracteres da coluna indicada
▸ SUBSTRING: Retorna uma parte da string
▸ GETDATE: Retorna a data e hora do Windows
▸ ISNULL: Retorna um valor específico para todos os registros
cujo a expressão avaliada seja NULL
▸ ISNUMERIC: Verifica se a expressão avaliada é numérica
19
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES > FUNÇÕES ESPECÍFICAS
Exemplos:
▸ LEN: SELECT LEN(n_identificador) FROM pessoas
▸ SUBSTRING: SELECT SUBSTRING(n_identificador,1,10) FROM
pessoas
▸ GETDATE: SELECT GETDATE() | SELECT GETDATE() - 10
▸ ISNULL: SELECT ISNULL(valor_refeicao, 15) FROM eventos_acessos
▸ I S N U M E R I C : S E L E C T * F R O M p e s s o a s W H E R E
ISNUMERIC(n_identificador) = 0
20
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES > FUNÇÕES ESPECÍFICAS
Usando funções no WHERE:
▸ LEN: SELECT * FROM pessoas WHERE LEN(n_identificador) > 8
▸ GETDATE: SELECT * FROM eventos_acessos WHERE data =
CONVERT(datetime, CONVERT (varchar(10), GETDATE()-1, 120), 102)
▸ IS NULL: SELECT * FROM pessoas WHERE n_identificador IS NULL
▸ ISNUMERIC: SELECT * FROM pessoas WHERE
ISNUMERIC(n_identificador) = 0
21
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES > CONVERSÃO DE DADOS
Em alguns casos, é necessário realizar a conversão do valor de
uma coluna armazenada no banco de dados, para isso são utilizas
as funções CAST e CONVERT.
Ex.:
▸ SELECT SUM(CAST(n_identificador) AS INT) FROM pessoas WHERE
n_identificador IS NOT NULL
▸ SELECT * FROM eventos_acessos WHERE data = CONVERT(datetime,
CONVERT (varchar(10), GETDATE()-1, 120), 102)
22
+ info: https://msdn.microsoft.com/pt-br/library/ms187928.aspx
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES > ESTRUTURA DE REPETIÇÃO
Em alguns casos, precisamos executar uma mesma query diversas vezes, para
isso podemos utilizar uma estrutura de repetição, como no exemplo abaixo:
23
DECLARE @contador INT,
@fim INT
SET @contador = 1
SET @fim = (SELECT MAX (id) FROM pessoas)
WHILE @contador <= @fim
BEGIN
PRINT (@contador)
SET @contador = @contador + 1
END
{Neste bloco pode ser inserida qualquer
instrução SQL, seja SELECT, UPDATE ou DELETE
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES > ESTRUTURA DE REPETIÇÃO
Exemplo:
DECLARE @i INT
SET @i = 1
WHILE @i <= 1200
BEGIN
INSERT INTO pessoas(n_identificador, nome, empresa_id, horario_id, estado, classificacao_id, criacao_usu_id,
criacao_data) VALUES (@i, CONCAT('teste ', @i), 1, 1, 2 , 1, 2, GETDATE())
SET @i = @i + 1
END
24
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA
▸ Existem algumas consultas que necessitam de
informações que estão em mais de uma tabela ou
que necessitam de resultado de outras operações
para obter os resultados desejados.
25
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA
▸ Estas consultas pode incluir o que chamamos de
junções ou ainda de subconsultas, como nos
seguintes exemplos:
SELECT *
FROM pessoas
WHERE id IN
(SELECT pessoa_id
FROM eventos_acessos
)
SELECT pessoas.nome, eventos_acessos.data
FROM eventos_acessos
JOIN pessoas ON pessoas.id = eventos_acessos.pessoa_id
SELECT pessoas.nome, eventos_acessos.data
FROM eventos_acessos, pessoas
WHERE pessoas.id = eventos_acessos.pessoa_id
26
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA
SELECT *
FROM pessoas
WHERE id IN
(SELECT pessoa_id
FROM eventos_acessos
)
SELECT pessoas.nome, eventos_acessos.data
FROM eventos_acessos
JOIN pessoas ON pessoas.id = eventos_acessos.pessoa_id
SELECT pessoas.nome, eventos_acessos.data
FROM eventos_acessos, pessoas
WHERE pessoas.id = eventos_acessos.pessoa_id
Subconsulta Junção
27
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÃO
SELECT pessoas.nome, eventos_acessos.data
FROM eventos_acessos
JOIN pessoas ON pessoas.id = eventos_acessos.pessoa_id
SELECT pessoas.nome, eventos_acessos.data
FROM eventos_acessos, pessoas
WHERE pessoas.id = eventos_acessos.pessoa_id
}
RETORNAMOMESMORESULTADO
28
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÃO
SELECT pessoas.nome, eventos_acessos.data
FROM eventos_acessos
JOIN pessoas ON pessoas.id = eventos_acessos.pessoa_id
}
Chave primária da tabela pessoas
}
Chave estrangeira da tabela eventos_acessos para tabela pessoas
Para realizar a junção das tabelas, sempre será utilizada a chave
primária e a chave estrangeira das tabelas envolvidas, conforme o
exemplo abaixo:
29
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÃO
IMPORTANTE: A ordem da chave primárias (PK) e estrangeira 

não afeta o resultado, isto é:
SELECT pessoas.nome, eventos_acessos.data
FROM eventos_acessos
JOIN pessoas ON eventos_acessos.pessoa_id = pessoas.id
SELECT pessoas.nome, eventos_acessos.data
FROM eventos_acessos
JOIN pessoas ON pessoas.id = eventos_acessos.pessoa_id
}
RETORNAMOMESMORESULTADO
30
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÃO
Em alguns casos, necessitamos agrupar os dados, isso é bastante comum em relatórios ou para
facilitar a análise dos dados, para isso usamos a instrução GROUP BY
Exemplo:
SELECT COUNT(*) AS qtd_batidas, f.nome FROM batidas b
JOIN funcionarios f ON f.id = b.funcionario_id
GROUP BY f.nome
31
AGRUPANDO DADOS:
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÃO
AGRUPANDO DADOS:
Em alguns casos, quando utilizamos funções agregadas
é necessário utilizar o GROUP BY
32
Exemplo:
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÃO
ORDENANDO DADOS:
Em alguns casos, é necessário ordenar os dados por
uma coluna, por exemplo, uma listagem em ordem
decrescente (baseada no nome). Para isso, utilizamos o
comando ORDER BY
Exemplo:
SELECT * FROM pessoas 

ORDER BY nome DESC
33
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÃO
ORDENANDO DADOS:
O comando ORDER BY pode receber mais de uma
coluna para "em caso de empate" ordenar com base na
segunda coluna
Exemplo:
SELECT * FROM pessoas 

ORDER BY nome DESC, n_identificador ASC
34
SQL > LINGUAGEM DE CONSULTA DE DADOS > CLÁUSULA HAVING
CLÁUSULA HAVING:
A cláusula HAVING se comporta como
uma espécie de WHERE para o GROUP
BY. Através desta cláusula filtramos os
resultados obtidos pela consulta.
35
SQL > LINGUAGEM DE CONSULTA DE DADOS > CLÁUSULA HAVING
CLÁUSULA HAVING:
Exemplo:
SELECT p.nome,COUNT(*) FROM eventos_acessos e
JOIN pessoas p ON p.id = e.pessoa_id
GROUP BY p.nome
HAVING COUNT(*) > 2
36
SQL > LINGUAGEM DE CONSULTA DE DADOS > CLÁUSULA HAVING
MAS POR QUE NÃO USAR O WHERE?
Quando é utilizada uma função agregada, o uso do
WHERE não é permitido
37
SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES
OPERADORES LÓGICOS E MATEMÁTICOS:
O SQL possui alguns operadores lógicos e
matemáticos que podem ser úteis em
consultas entre eles:
38
SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES MATEMÁTICOS
> (maior)
< (menor)
= (igual)
39
>= (maior ou igual)
<= (menor ou igual)
<> (diferente)
SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES LÓGICOS
AND: Usado quando o registro deve ser selecionado ao
cumprir duas ou mais condições, exemplo:
Selecionar todos os dados das pessoas que tenham
identificador maior que 10 e que o número folha não seja
nulo.
SELECT * FROM pessoas 

WHERE n_identificador > 10 AND n_folha IS NOT NULL
40
SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES LÓGICOS
OR: Usado quando o registro deve ser selecionado ao
cumprir uma ou outra condição, exemplo:
Selecionar todos os dados das pessoas que tenham
identificador maior que 10 ou cujo número folha não seja
nulo.
SELECT * FROM pessoas 

WHERE n_identificador > 10 OR n_folha IS NOT NULL
41
SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES LÓGICOS
LIKE: Usado buscar um padrão em uma determinada
coluna, exemplo:
Selecionar todos as pessoas cujo nome inicie com
"Mar"
SELECT * FROM pessoas 

WHERE nome LIKE 'Mar%'
42
SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES LÓGICOS
O % usado no LIKE indica que serão exibidos todos os
registros cujo a coluna nome inicie por 'Mar'.
Existem outras formas de utiliza-lo, como por exemplo:
buscar um padrão em no início, no final ou no meio de
uma determinada coluna, conforme os exemplos a
seguir:
43
SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES LÓGICOS
Listar todos os registros da tabela de pessoas que
possuam a string "Silva" no final da coluna Nome.
SELECT * FROM pessoas 

WHERE nome LIKE '%Silva'
44
Serão listados todos os nomes que não iniciem com 'Silva', mas
que possuem essa string, isto é, irá selecionar todas as pessoas
cujo nome seja <QUALQUER COISA> Silva. 

Exemplo:
João da Silva Maria Silvana Maria Silva de Oliveira
SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES LÓGICOS
Listar todos os registros da tabela de pessoas que
possuam a string "da" em alguma da coluna Nome.
SELECT * FROM pessoas 

WHERE nome LIKE '%da%'
45
Serão listados todos os nomes que não iniciem com 'Silva', mas que possuem
essa string, isto é, irá selecionar todas as pessoas cujo nome seja
<QUALQUER COISA>da<QUALQUER COISA>. 

Exemplo:
João da Silva Eduarda Daiana
SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES LÓGICOS
BETWEEN: Usado para indicar que a consulta será
realizada entre dois valores, exemplo:
Selecionar todos as pessoas cujo n_identificador esteja
entre 1 e 100
SELECT * FROM pessoas 

WHERE n_identificador BETWEEN 1 AND 100
46
SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES LÓGICOS
O comando BETWEEN pode ser substituído por uma
comparação de maior que e menor que, exemplo:

SELECT * FROM pessoas 

WHERE n_identificador BETWEEN 1 AND 10

SELECT * FROM pessoas 

WHERE n_identificador > 0 AND n_identificador < 11
47
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > PRODUTO CARTESIANO
PRODUTO CARTESIANO
▸ É um problema bastante comum ao utilizar junções
(principalmente quando envolve 3 ou mais tabelas).
▸ Ocorre quando a junção não foi feita ou foi realizada
de forma incorreta.
▸ Consiste em listar na consulta um registro para cada
combinação possível.
48
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > PRODUTO CARTESIANO
CREATE TABLE clientes(

id int IDENTITY(1,1) NOT NULL, 

nome varchar(50) NOT NULL 

CONSTRAINT PK_clientes PRIMARY KEY (id)

) 



CREATE TABLE carros(

id int IDENTITY(1,1) NOT NULL, 

nome varchar(50) NOT NULL, 

cliente_id int NOT NULL 

FOREIGN KEY (cliente_id) REFERENCES clientes (id) 

CONSTRAINT PK_carros PRIMARY KEY (id)

)
49
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > PRODUTO CARTESIANO
INSERT INTO clientes (nome) VALUES ('João');

INSERT INTO clientes (nome) VALUES ('Jeremias');

INSERT INTO clientes (nome) VALUES ('Maria');



INSERT INTO carros (nome, cliente_id) VALUES ('Monza', 1);

INSERT INTO carros (nome, cliente_id) VALUES ('Corsa', 2);

INSERT INTO carros (nome, cliente_id) VALUES ('Voyage', 3);
50
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > PRODUTO CARTESIANO
SELECT clientes.nome, carros.nome FROM clientes, carros;
Ocorrência de produto cartesiano ao realizar a consulta.
51
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > PRODUTO CARTESIANO
SELECT clientes.nome, carros.nome FROM clientes, carros

WHERE carros.cliente_id = clientes.id;
SELECT clientes.nome, carros.nome FROM clientes

JOIN carros ON carros.cliente_id = clientes.id;
Resultado correto da consulta ao realizar a junção entre as tabelas
52
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÕES> USANDO APELIDOS
SELECT c.nome AS pessoa, ca.nome AS modelo

FROM clientes c, carros ca

WHERE ca.cliente_id = c.id;
SELECT c.nome, ca.nome FROM clientes c

JOIN carros ca ON ca.cliente_id = c.id;
53
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÕES> USANDO APELIDOS
SELECT c.nome AS pessoa, ca.nome AS modelo

FROM clientes c, carros ca

WHERE ca.cliente_id = c.id;
SELECT clientes.nome, carros.nome

FROM clientes, carros

WHERE carros.cliente_id = clientes.id;
Com o uso de apelidos para tabelas e colunas
Sem o uso de apelidos para tabelas e colunas
54
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÕES
PARA REALIZAR A CONSULTA USANDO A JUNÇÃO VOCÊ DEVE:
▸ Indicar as colunas que serão selecionadas, lembrando que sempre será
necessário indicar o nome da tabela(ou apelido) e o nome da coluna que
deseja que seja listada.

Ex.:

SELECT p.nome, e.data FROM eventos_acessos e

JOIN pessoas p ON p.id = e.pessoa_id



SELECT pessoa.nome, eventos_acessos.data FROM eventos_acessos

JOIN pessoas ON pessoas.id = eventos_acessos.pessoa_id
55
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > SUBCONSULTA
▸ As subconsultas são um recurso interessante em querys que necessitam de
informações de valores que referenciam os registros da tabela desejada.
▸ Elas podem ser utilizadas em todas as instruções SQL (SELECT, UPDATE e
Delete).
▸ Seu funcionamento é bastante simples, consiste em realizar uma consulta e
com os valores obtidos desta consulta realizar uma nova consulta, porém, sem
que seja necessário executar dois processos individualmente
56
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > SUBCONSULTA
▸ IN: Faz com que a consulta principal afete somente os valores cujo a
subconsulta retorna. É usado juntamente com a cláusula WHERE
▸ NOT IN: Faz o contrário da instrução IN, isto é, afeta somente os valores não
retornados pela subconsulta.
57
SUBCONSULTA: O USO DO IN E NOT IN
SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > SUBCONSULTA
▸ Usamos IN ou NOT IN quando as colunas a serem mostradas como resultado de uma consulta
provém de uma tabela, mas a condição de seleção vem de outra.
Ex.: Listar o nome e identificador de todas as pessoas que realizaram acessos em uma
determinada data.
SELECT nome, n_identificador FROM eventos_acessos WHERE id in (SELECT pessoa_id
FROM eventos_acessos WHERE data = '2017-08-02')
‣ Estas instruções também são usadas quando queremos exibir uma coluna resultante de
consulta que utiliza uma função SQL, mas que não é a coluna usada na função
Ex.: Listar somente os acessos cujo o valor da coluna valor_refeicao seja o maior existente.
SELECT * FROM eventos_acessos WHERE valor_refeicao = (SELECT MAX(valor_refeicao)
FROM eventos_acessos)
58
QUANDO USAR IN OU NOT IN
SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS
▸ Utilizada para criação de objetos dentro do SQL
(tables, views, indexs, triggers e procedures)
▸ As instruções disponíveis são:
▸ Create: Usada para criar
▸ Drop: Usada para excluir
▸ Alter: Usada para alterar.
59
LINGUAGEM DE DEFINIÇÃO DE DADOS
SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TRIGGERS
TRIGGERS
▸ Triggers é um mecanismo de automatização de
processos e procedimentos no banco de dados.
▸ É utilizada para N situações, as mais comuns são
integrações via Banco de Dados e atualização de
dados em tabelas (produtos e estoque, por
exemplo), auditoria, etc.
60
+ INFO: https://msdn.microsoft.com/pt-BR/library/ms189799.aspx
CREATE TRIGGER <Nome da Trigger>

ON <tabela que irá ser "observada">

[AFTER | FOR | INSTEAD OF] <instrução sobre a tabela que irá disparar a trigger> 

AS

BEGIN
<Instruções SQL>
END
61
Sintaxe básica:
SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TRIGGERS
CREATE TRIGGER TGR_FILTRO1_INSERT

ON filtro1

AFTER INSERT 

AS

BEGIN
DECLARE @descricao VARCHAR(100), @id INT
SELECT @descricao = descricao, @id = id FROM INSERTED
PRINT (CONCAT('Novos inseridos - ID:', @id , ' Descrição:' , @descricao))
END
62
Exemplo:
SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TRIGGERS
CREATE TRIGGER TGR_FILTRO1_DELETE

ON filtro1

AFTER DELETE 

AS

BEGIN
DECLARE @descricao VARCHAR(100), @id INT
SELECT @descricao = descricao, @id = id FROM DELETED
PRINT (CONCAT('Dados excluídos - ID:', @id , ' Descrição:' , @descricao))
END
63
Exemplo:
SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TRIGGERS
CREATE TRIGGER TGR_FILTRO1_UPDATE

ON filtro1

AFTER UPDATE 

AS

BEGIN
DECLARE @descricao VARCHAR(100), @id INT, @descricao_ant VARCHAR(100), @id_ant INT
SELECT @descricao_ant = descricao, @id_ant = id FROM DELETED
SELECT @descricao = descricao, @id = id FROM INSERTED
PRINT (CONCAT('Dados anteriores - ID:', @id_ant , ' Descrição:' , @descricao_ant))
PRINT (CONCAT('Novos dados - ID:', @id , ' Descrição:' , @descricao))
END
64
Exemplo:
SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TRIGGERS
65
No SQL Server, existem as "tabelas" INSERTED e DELETED que
armazenam os valores que foram inseridos ou deletados da
tabela, isto é, através desta tabela é possível obter os valores de
colunas em que a trigger foi criada.
SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TRIGGERS
CREATE TRIGGER TGR_FILTRO1_UPDATE

ON filtro1

AFTER UPDATE 

AS

BEGIN
DECLARE @descricao VARCHAR(100), @id INT, @descricao_ant VARCHAR(100), @id_ant INT
SELECT @descricao_ant = descricao, @id_ant = id FROM DELETED
SELECT @descricao = descricao, @id = id FROM INSERTED
PRINT (CONCAT('Dados anteriores - ID:', @id_ant , ' Descrição:' , @descricao_ant))
PRINT (CONCAT('Novos dados - ID:', @id , ' Descrição:' , @descricao))
END
66
Analisando o exemplo anterior...
} Aqui obtenho o valor
anterior o novo valor 

das colunas id e descrição
SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TRIGGERS
IMPORTANTE:
Tecnicamente, o update consiste em deletar o registro
anterior e recriar este com os novos valores.
Isso é feito pelo próprio SQL Server de maneira
implícita.
Por isso, quando criamos uma trigger ON UPDATE, é
necessário utilizar as tabelas DELETED e INSERTED.
67SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TRIGGERS
SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE
TABLE
A criação de tabelas é um tema bastante extenso, pois,
para isso é necessário conhecermos os tipos de dados
existentes no SQL Server, para que possamos utilizar o
tipo de dado correto para armazenar as informações
desejada no banco de dados.
68
TIPOS DE DADOS
Os tipos mais comuns são:
int: Usado para armazenar valores inteiros dentro do seguinte
intervalo:
De -2³¹ (-2.147.483.648) a 2³¹ -1 (2.147.483.647)
smalldatetime: Usado para armazenar datas dentro do seguinte
intervalo:
De 1º de janeiro de 1900 a 6 de junho de 2079
69SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE > TIPOS DE DADOS
TIPOS DE DADOS
char: Usado para armazenar cadeia de caracteres não
Unicode de comprimento fixo.
varchar: Usado para armazenar cadeia de caracteres não
Unicode de comprimento variável.
‣ Ambos permitem armazenar de 1 a 8000 caracteres.
70SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE > TIPOS DE DADOS
TIPOS DE DADOS
‣ Use char quando os tamanhos das entradas de
dados de coluna são consistentes.
‣ Use varchar quando os tamanhos das entradas de
dados de coluna variarem consideravelmente.
71SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE > TIPOS DE DADOS
TIPOS DE DADOS
Money: Usado para armazenar valores inteiros dentro do
seguinte intervalo:
De -922.337.203.685.477,58 a 922.337.203.685.477,58
bit: Usado para armazenar valores do tipo Boolean (True ou
False).
True é armazenado como 1.
False é armazenado como 0.
72SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE > TIPOS DE DADOS
TIPOS DE DADOS
‣ Existem muitos tipos de dados disponíveis, caberá a
você escolher o que melhor se adequa ao que você
deseja armazenar.
73
+ info: https://technet.microsoft.com/en-us/library/ms187752(v=sql.105).aspx
SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE > TIPOS DE DADOS
SINTAXE BÁSICA
CREATE TABLE <nome da tabela>
(
nome_coluna1 tipo_dado(tamanho),
nome_coluna2 tipo_dado(tamanho),
nome_coluna3 tipo_dado(tamanho),
...
)
74SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE
SINTAXE BÁSICA
CREATE TABLE pessoas
(
id int,
nome varchar(100),
sobrenome varchar(100),
endereco varchar(255)
)
75SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE
SINTAXE BÁSICA
Banco de dados relacionais são orientados com base em referências entre
tabelas, para isso, é necessário que exista chave primária e chave estrangeira.
76
CREATE TABLE a

(

id int PRIMARY KEY identity (1,1),
nome varchar(100),
sobrenome varchar(100),
endereco varchar(255)

)
O comando identity serve para que o 

controle do ID seja de responsabilidade 

do banco de dados
}
SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE
EXEMPLO DE REFERENCIA ENTRE TABELAS:
77
CREATE TABLE a

(

id int PRIMARY KEY identity (1,1),
nome varchar(100),
sobrenome varchar(100),
endereco varchar(255)

)
CREATE TABLE b

(

id int PRIMARY KEY identity (1,1),
a_id int constraint FK_a
FOREIGN KEY REFEREBCES a(id),
outro_dado varchar(100),
obs varchar(255)

)
SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE
SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > VIEW
VIEW
É uma “tabela virtual” cujo conteúdo é definido por uma
query.
As principais vantagens de utilizar uma view são:
‣ Possibilitar restringir o acesso ao banco de dados;
‣ Para tornar simples consultas complexas;
‣ Para apresentar visões diferentes dos mesmos dados;
78
SINTAXE BÁSICA
CREATE VIEW <Nome da View>
AS
<Consulta SQL>
79SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > VIEW
EXEMPLO
CREATE VIEW Pessoas_DataAcesso
AS
SELECT p.nome, e.data FROM eventos_acessos e
JOIN pessoas p ON p.id = e.pessoa_id
80SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > VIEW
SQL > FONTE PARA CONSULTA
FONTE PARA CONSULTA
Tudo que vimos neste treinamento é apenas uma breve
explanação sobre SQL, recomendo que releiam esta
apresentação, façam os exercícios e consulte outras
fontes, como por exemplo a W3Schools, segue link
para a seção sobre SQL:
https://www.w3schools.com/sql
81

Mais conteúdo relacionado

Mais procurados

Desenvolvimento de um CRUD utilizando Stored Procedure
Desenvolvimento de um CRUD utilizando Stored ProcedureDesenvolvimento de um CRUD utilizando Stored Procedure
Desenvolvimento de um CRUD utilizando Stored ProcedureFernando Roberto Proença
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggersDaniel Maia
 
Utilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggersUtilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggersDaniel Maia
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBCEduardo Mendes
 
Aplicativos II - MySQL_part1
Aplicativos II - MySQL_part1Aplicativos II - MySQL_part1
Aplicativos II - MySQL_part1fabriciodenis
 
Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggersflaviognm
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCLuiz Ricardo Silva
 
Manipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBCManipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBCAntonio Passos
 
Banco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLBanco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLDaniel Brandão
 
Sql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumoSql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumoHelder Lopes
 
Curso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosCurso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosMarcos Thomaz
 
UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6Wagner Bianchi
 

Mais procurados (20)

Desenvolvimento de um CRUD utilizando Stored Procedure
Desenvolvimento de um CRUD utilizando Stored ProcedureDesenvolvimento de um CRUD utilizando Stored Procedure
Desenvolvimento de um CRUD utilizando Stored Procedure
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggers
 
Utilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggersUtilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggers
 
Acesso a banco de dados com JDBC
Acesso a banco de dados com JDBCAcesso a banco de dados com JDBC
Acesso a banco de dados com JDBC
 
Hands on Labs - SQL Server 2008
Hands on Labs - SQL Server 2008Hands on Labs - SQL Server 2008
Hands on Labs - SQL Server 2008
 
JDBC
JDBCJDBC
JDBC
 
Aplicativos II - MySQL_part1
Aplicativos II - MySQL_part1Aplicativos II - MySQL_part1
Aplicativos II - MySQL_part1
 
Stored Procedures and Triggers
Stored Procedures and TriggersStored Procedures and Triggers
Stored Procedures and Triggers
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBC
 
Sql proficiente
Sql proficienteSql proficiente
Sql proficiente
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Manipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBCManipulando Bancos de Dados com JDBC
Manipulando Bancos de Dados com JDBC
 
Banco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQLBanco de dados - Aula 1 SQL
Banco de dados - Aula 1 SQL
 
Sql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumoSql básico - Teoria e prática: Um grande resumo
Sql básico - Teoria e prática: Um grande resumo
 
Documentacao automatica
Documentacao automaticaDocumentacao automatica
Documentacao automatica
 
Apostila de sql
Apostila de sqlApostila de sql
Apostila de sql
 
Design patterns
Design patternsDesign patterns
Design patterns
 
PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
 
Curso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosCurso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos Comandos
 
UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6
 

Semelhante a um breve treinamento sobre SQL e suas funcionalidades

Banco de dados aula 4
Banco de dados aula 4Banco de dados aula 4
Banco de dados aula 4Ed W. Jr
 
Conceitos Basicos em Banco de Dados
Conceitos Basicos em Banco de DadosConceitos Basicos em Banco de Dados
Conceitos Basicos em Banco de DadosAlefe Variani
 
Uso de estatísticas pelo postgre sql
Uso de estatísticas pelo postgre sqlUso de estatísticas pelo postgre sql
Uso de estatísticas pelo postgre sqlLocaweb
 
Refactoring Databases - Estrategias
Refactoring Databases - EstrategiasRefactoring Databases - Estrategias
Refactoring Databases - EstrategiasIsmael
 
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont....Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...iMasters
 
Oracle 11g - Fundamentos
Oracle 11g - FundamentosOracle 11g - Fundamentos
Oracle 11g - FundamentosGustavo Sávio
 
BD I - Aula 13 B - Agrupando Dados - Parte 04
BD I - Aula 13 B - Agrupando Dados  - Parte 04BD I - Aula 13 B - Agrupando Dados  - Parte 04
BD I - Aula 13 B - Agrupando Dados - Parte 04Rodrigo Kiyoshi Saito
 
TechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de DesempenhoTechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de DesempenhoFabrício Catae
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - TabelasDalton Martins
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...iMasters
 
Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Como funciona um banco de dados? (Worldwide Online TechDay 2010)Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Como funciona um banco de dados? (Worldwide Online TechDay 2010)Fabrício Catae
 
Net Coders Ladies SQL
Net Coders Ladies SQL Net Coders Ladies SQL
Net Coders Ladies SQL Aline Lavorato
 

Semelhante a um breve treinamento sobre SQL e suas funcionalidades (20)

Modulo 15 PSI
Modulo 15 PSIModulo 15 PSI
Modulo 15 PSI
 
Banco de dados aula 4
Banco de dados aula 4Banco de dados aula 4
Banco de dados aula 4
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
Aprofundamento de DDL e DML
Aprofundamento de DDL e DMLAprofundamento de DDL e DML
Aprofundamento de DDL e DML
 
Conceitos Basicos em Banco de Dados
Conceitos Basicos em Banco de DadosConceitos Basicos em Banco de Dados
Conceitos Basicos em Banco de Dados
 
Uso de estatísticas pelo postgre sql
Uso de estatísticas pelo postgre sqlUso de estatísticas pelo postgre sql
Uso de estatísticas pelo postgre sql
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
Refactoring Databases - Estrategias
Refactoring Databases - EstrategiasRefactoring Databases - Estrategias
Refactoring Databases - Estrategias
 
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont....Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...
.Net Community Summit 2018 - Aplicações .NET inteligentes com escala horizont...
 
Oracle 11g - Fundamentos
Oracle 11g - FundamentosOracle 11g - Fundamentos
Oracle 11g - Fundamentos
 
BD I - Aula 13 B - Agrupando Dados - Parte 04
BD I - Aula 13 B - Agrupando Dados  - Parte 04BD I - Aula 13 B - Agrupando Dados  - Parte 04
BD I - Aula 13 B - Agrupando Dados - Parte 04
 
TechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de DesempenhoTechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
TechEd 2010: SQL Server com Foco em Diagnóstico de Desempenho
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - Tabelas
 
Aula 10 banco de dados
Aula 10   banco de dadosAula 10   banco de dados
Aula 10 banco de dados
 
Web app flaws
Web app flawsWeb app flaws
Web app flaws
 
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...Elasticidade e engenharia de banco de dados para alta performance  - Rubens G...
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
 
Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Como funciona um banco de dados? (Worldwide Online TechDay 2010)Como funciona um banco de dados? (Worldwide Online TechDay 2010)
Como funciona um banco de dados? (Worldwide Online TechDay 2010)
 
Net Coders Ladies SQL
Net Coders Ladies SQL Net Coders Ladies SQL
Net Coders Ladies SQL
 
Views Oracle Database
Views Oracle DatabaseViews Oracle Database
Views Oracle Database
 

um breve treinamento sobre SQL e suas funcionalidades

  • 1. UM BREVE TREINAMENTO SOBRE SQL E SUAS FUNCIONALIDADES WILLIAM COSTA
  • 2. INTRODUÇÃO O QUE VEREMOS? ▸ Introdução ▸ Por que saber SQL ▸ SQL e suas vantagens ▸ Subconjuntos da linguagem ▸ Linguagem de Consulta 
 de Dados ▸ Query simples ▸ Funções agregadas ▸ Funções específicas
 do SQL Server ▸ Conversão de dados ▸ Estrutura de repetição ▸ Query Elaborada ▸ Junções ▸ Agrupando dados ▸ Ordenando dados ▸ Cláusula HAVING ▸ Operadores Lógicos 
 e Matemáticos ▸ Produto cartesiano ▸ Usando apelidos ▸ Subconsulta ▸ Linguagem de definição de Dados ▸ Triggers ▸ Tables ▸ Views 2
  • 3. INTRODUÇÃO O QUE É SQL ▸ Linguagem utilizada para manipulação de dados em banco de dados. ▸ Structured 
 Query 
 Language 3
  • 4. POR QUE SABER SQL? 4
  • 5. SQL E SUAS VANTAGENS POR QUE SABER SQL? ▸ É uma linguagem simples; ▸ Largamente utilizada, seja em uma empresa de pequeno ou médio porte ou no Google, sempre existirá uma aplicação que utilize SQL; ▸ É uma linguagem "estática", isto é, poucas mudanças ocorrem na linguagem; 5
  • 6. SQL E SUAS VANTAGENS MAS EM EMPRESAS DE PEQUENO E MÉDIO PORTE? ▸ SQL irá facilitar seu trabalho; ▸ Algumas funcionalidades de sistemas exigem que você saiba SQL (como relatórios personalizados e integração externa); 6
  • 7. SQL > SUBCONJUNTOS DA LINGUAGEM A LINGUAGEM PODE SER DIVIDIDA EM: ▸ DML - Linguagem de Manipulação de Dados ▸ DDL - Linguagem de Definição de Dados ▸ DCL - Linguagem de Controle de Dados ▸ DTL - Linguagem de Transação de Dados ▸ DQL - Linguagem de Consulta de Dados 7
  • 8. SQL > SUBCONJUNTOS DA LINGUAGEM DML - LINGUAGEM DE MANIPULAÇÃO DE DADOS ▸ INSERT ▸ UPDATE ▸ DELETE 8
  • 9. SQL > SUBCONJUNTOS DA LINGUAGEM DDL - LINGUAGEM DE DEFINIÇÃO DE DADOS ▸ CREATE ▸ Table ▸ Index ▸ View ▸ ... ▸ DROP ▸ Table ▸ Index ▸ View ▸ ... 9 ▸ ALTER ▸ Table ▸ Index ▸ View ▸ ...
  • 10. SQL > SUBCONJUNTOS DA LINGUAGEM DQL - LINGUAGEM DE CONSULTA DE DADOS ▸ SELECT 10
  • 11. SQL > LINGUAGEM DE CONSULTA DE DADOS ▸ Embora seja composto por apenas um comando, este é o subconjunto mais utilizado SELECT id, n_identificador, n_folha, nome FROM pessoas SELECT * FROM pessoas SELECT * FROM pessoas WHERE id = 1 SELECT * FROM pessoas ORDER BY nome DESC SELECT * FROM pessoas WHERE id IN (1, 2, 3) SELECT * FROM pessoas WHERE id IN (SELECT pessoa_id FROM eventos_acessos) 11 DQL - LINGUAGEM DE CONSULTA DE DADOS
  • 12. SQL > LINGUAGEM DE CONSULTA DE DADOS Esse comando possui as seguintes cláusulas: ▸ FROM ▸ WHERE ▸ GROUP BY ▸ HAVING ▸ ORDER BY ▸ DISTINCT ▸ UNION 12
  • 13. SQL > LINGUAGEM DE CONSULTA DE DADOS Veremos neste breve treinamento ▸ WHERE ▸ GROUP BY ▸ HAVING ▸ ORDER BY 13
  • 14. SQL É QUASE COMO ESCREVER (EM INGLÊS) O QUE O SGBD IRÁ FAZER, POR EXEMPLO: 14
  • 15. SELECIONAR TUDO DA TABELA DE PESSOAS ONDE O ID FOR MAIOR DO QUE 1, ORDENANDO OS RESULTADOS POR NOME DE FORMA DECRESCENTE Descrição em português do que será feito SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES 15
  • 16. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES 16 SELECT * FROM pessoas WHERE id > 1 ORDER BY nome DESC Instrução SQL
  • 17. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES > FUNÇÕES AGREGADAS ▸ O SQL possui algumas funções que atuam sobre grupos de registros, estas são chamadas de funções agregadas. Entre as mais comuns podemos listar: ▸ COUNT: Retorna o número de linhas afetadas pelo comando. ▸ SUM: Retorna o somatório do valor das colunas especificadas. ▸ AVG: Retorna a média aritmética dos valores das colunas. ▸ MIN: Retorna o menor valor da coluna de um grupo de linhas. ▸ MAX: Retorna o maior valor da coluna de um grupo de linhas. 17
  • 18. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES > FUNÇÕES AGREGADAS Exemplos: ▸ COUNT: SELECT COUNT(*) FROM pessoas ▸ SUM: SELECT SUM(valor_refeicao) FROM eventos_acessos ▸ AVG: SELECT pessoa_id, AVG(valor_refeicao) FROM eventos_acessos GROUP BY pessoa_id ▸ MIN: SELECT MIN(id) FROM pessoas ▸ MAX: SELECT MAX(id) FROM pessoas 18
  • 19. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES > FUNÇÕES ESPECÍFICAS O SQL Server possui algumas funções específicas, entre elas podemos citar: ▸ LEN: Retorna a quantidade de caracteres da coluna indicada ▸ SUBSTRING: Retorna uma parte da string ▸ GETDATE: Retorna a data e hora do Windows ▸ ISNULL: Retorna um valor específico para todos os registros cujo a expressão avaliada seja NULL ▸ ISNUMERIC: Verifica se a expressão avaliada é numérica 19
  • 20. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES > FUNÇÕES ESPECÍFICAS Exemplos: ▸ LEN: SELECT LEN(n_identificador) FROM pessoas ▸ SUBSTRING: SELECT SUBSTRING(n_identificador,1,10) FROM pessoas ▸ GETDATE: SELECT GETDATE() | SELECT GETDATE() - 10 ▸ ISNULL: SELECT ISNULL(valor_refeicao, 15) FROM eventos_acessos ▸ I S N U M E R I C : S E L E C T * F R O M p e s s o a s W H E R E ISNUMERIC(n_identificador) = 0 20
  • 21. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES > FUNÇÕES ESPECÍFICAS Usando funções no WHERE: ▸ LEN: SELECT * FROM pessoas WHERE LEN(n_identificador) > 8 ▸ GETDATE: SELECT * FROM eventos_acessos WHERE data = CONVERT(datetime, CONVERT (varchar(10), GETDATE()-1, 120), 102) ▸ IS NULL: SELECT * FROM pessoas WHERE n_identificador IS NULL ▸ ISNUMERIC: SELECT * FROM pessoas WHERE ISNUMERIC(n_identificador) = 0 21
  • 22. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES > CONVERSÃO DE DADOS Em alguns casos, é necessário realizar a conversão do valor de uma coluna armazenada no banco de dados, para isso são utilizas as funções CAST e CONVERT. Ex.: ▸ SELECT SUM(CAST(n_identificador) AS INT) FROM pessoas WHERE n_identificador IS NOT NULL ▸ SELECT * FROM eventos_acessos WHERE data = CONVERT(datetime, CONVERT (varchar(10), GETDATE()-1, 120), 102) 22 + info: https://msdn.microsoft.com/pt-br/library/ms187928.aspx
  • 23. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES > ESTRUTURA DE REPETIÇÃO Em alguns casos, precisamos executar uma mesma query diversas vezes, para isso podemos utilizar uma estrutura de repetição, como no exemplo abaixo: 23 DECLARE @contador INT, @fim INT SET @contador = 1 SET @fim = (SELECT MAX (id) FROM pessoas) WHILE @contador <= @fim BEGIN PRINT (@contador) SET @contador = @contador + 1 END {Neste bloco pode ser inserida qualquer instrução SQL, seja SELECT, UPDATE ou DELETE
  • 24. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES > ESTRUTURA DE REPETIÇÃO Exemplo: DECLARE @i INT SET @i = 1 WHILE @i <= 1200 BEGIN INSERT INTO pessoas(n_identificador, nome, empresa_id, horario_id, estado, classificacao_id, criacao_usu_id, criacao_data) VALUES (@i, CONCAT('teste ', @i), 1, 1, 2 , 1, 2, GETDATE()) SET @i = @i + 1 END 24
  • 25. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA ▸ Existem algumas consultas que necessitam de informações que estão em mais de uma tabela ou que necessitam de resultado de outras operações para obter os resultados desejados. 25
  • 26. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA ▸ Estas consultas pode incluir o que chamamos de junções ou ainda de subconsultas, como nos seguintes exemplos: SELECT * FROM pessoas WHERE id IN (SELECT pessoa_id FROM eventos_acessos ) SELECT pessoas.nome, eventos_acessos.data FROM eventos_acessos JOIN pessoas ON pessoas.id = eventos_acessos.pessoa_id SELECT pessoas.nome, eventos_acessos.data FROM eventos_acessos, pessoas WHERE pessoas.id = eventos_acessos.pessoa_id 26
  • 27. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA SELECT * FROM pessoas WHERE id IN (SELECT pessoa_id FROM eventos_acessos ) SELECT pessoas.nome, eventos_acessos.data FROM eventos_acessos JOIN pessoas ON pessoas.id = eventos_acessos.pessoa_id SELECT pessoas.nome, eventos_acessos.data FROM eventos_acessos, pessoas WHERE pessoas.id = eventos_acessos.pessoa_id Subconsulta Junção 27
  • 28. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÃO SELECT pessoas.nome, eventos_acessos.data FROM eventos_acessos JOIN pessoas ON pessoas.id = eventos_acessos.pessoa_id SELECT pessoas.nome, eventos_acessos.data FROM eventos_acessos, pessoas WHERE pessoas.id = eventos_acessos.pessoa_id } RETORNAMOMESMORESULTADO 28
  • 29. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÃO SELECT pessoas.nome, eventos_acessos.data FROM eventos_acessos JOIN pessoas ON pessoas.id = eventos_acessos.pessoa_id } Chave primária da tabela pessoas } Chave estrangeira da tabela eventos_acessos para tabela pessoas Para realizar a junção das tabelas, sempre será utilizada a chave primária e a chave estrangeira das tabelas envolvidas, conforme o exemplo abaixo: 29
  • 30. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÃO IMPORTANTE: A ordem da chave primárias (PK) e estrangeira 
 não afeta o resultado, isto é: SELECT pessoas.nome, eventos_acessos.data FROM eventos_acessos JOIN pessoas ON eventos_acessos.pessoa_id = pessoas.id SELECT pessoas.nome, eventos_acessos.data FROM eventos_acessos JOIN pessoas ON pessoas.id = eventos_acessos.pessoa_id } RETORNAMOMESMORESULTADO 30
  • 31. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÃO Em alguns casos, necessitamos agrupar os dados, isso é bastante comum em relatórios ou para facilitar a análise dos dados, para isso usamos a instrução GROUP BY Exemplo: SELECT COUNT(*) AS qtd_batidas, f.nome FROM batidas b JOIN funcionarios f ON f.id = b.funcionario_id GROUP BY f.nome 31 AGRUPANDO DADOS:
  • 32. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÃO AGRUPANDO DADOS: Em alguns casos, quando utilizamos funções agregadas é necessário utilizar o GROUP BY 32 Exemplo:
  • 33. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÃO ORDENANDO DADOS: Em alguns casos, é necessário ordenar os dados por uma coluna, por exemplo, uma listagem em ordem decrescente (baseada no nome). Para isso, utilizamos o comando ORDER BY Exemplo: SELECT * FROM pessoas 
 ORDER BY nome DESC 33
  • 34. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÃO ORDENANDO DADOS: O comando ORDER BY pode receber mais de uma coluna para "em caso de empate" ordenar com base na segunda coluna Exemplo: SELECT * FROM pessoas 
 ORDER BY nome DESC, n_identificador ASC 34
  • 35. SQL > LINGUAGEM DE CONSULTA DE DADOS > CLÁUSULA HAVING CLÁUSULA HAVING: A cláusula HAVING se comporta como uma espécie de WHERE para o GROUP BY. Através desta cláusula filtramos os resultados obtidos pela consulta. 35
  • 36. SQL > LINGUAGEM DE CONSULTA DE DADOS > CLÁUSULA HAVING CLÁUSULA HAVING: Exemplo: SELECT p.nome,COUNT(*) FROM eventos_acessos e JOIN pessoas p ON p.id = e.pessoa_id GROUP BY p.nome HAVING COUNT(*) > 2 36
  • 37. SQL > LINGUAGEM DE CONSULTA DE DADOS > CLÁUSULA HAVING MAS POR QUE NÃO USAR O WHERE? Quando é utilizada uma função agregada, o uso do WHERE não é permitido 37
  • 38. SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES OPERADORES LÓGICOS E MATEMÁTICOS: O SQL possui alguns operadores lógicos e matemáticos que podem ser úteis em consultas entre eles: 38
  • 39. SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES MATEMÁTICOS > (maior) < (menor) = (igual) 39 >= (maior ou igual) <= (menor ou igual) <> (diferente)
  • 40. SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES LÓGICOS AND: Usado quando o registro deve ser selecionado ao cumprir duas ou mais condições, exemplo: Selecionar todos os dados das pessoas que tenham identificador maior que 10 e que o número folha não seja nulo. SELECT * FROM pessoas 
 WHERE n_identificador > 10 AND n_folha IS NOT NULL 40
  • 41. SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES LÓGICOS OR: Usado quando o registro deve ser selecionado ao cumprir uma ou outra condição, exemplo: Selecionar todos os dados das pessoas que tenham identificador maior que 10 ou cujo número folha não seja nulo. SELECT * FROM pessoas 
 WHERE n_identificador > 10 OR n_folha IS NOT NULL 41
  • 42. SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES LÓGICOS LIKE: Usado buscar um padrão em uma determinada coluna, exemplo: Selecionar todos as pessoas cujo nome inicie com "Mar" SELECT * FROM pessoas 
 WHERE nome LIKE 'Mar%' 42
  • 43. SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES LÓGICOS O % usado no LIKE indica que serão exibidos todos os registros cujo a coluna nome inicie por 'Mar'. Existem outras formas de utiliza-lo, como por exemplo: buscar um padrão em no início, no final ou no meio de uma determinada coluna, conforme os exemplos a seguir: 43
  • 44. SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES LÓGICOS Listar todos os registros da tabela de pessoas que possuam a string "Silva" no final da coluna Nome. SELECT * FROM pessoas 
 WHERE nome LIKE '%Silva' 44 Serão listados todos os nomes que não iniciem com 'Silva', mas que possuem essa string, isto é, irá selecionar todas as pessoas cujo nome seja <QUALQUER COISA> Silva. 
 Exemplo: João da Silva Maria Silvana Maria Silva de Oliveira
  • 45. SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES LÓGICOS Listar todos os registros da tabela de pessoas que possuam a string "da" em alguma da coluna Nome. SELECT * FROM pessoas 
 WHERE nome LIKE '%da%' 45 Serão listados todos os nomes que não iniciem com 'Silva', mas que possuem essa string, isto é, irá selecionar todas as pessoas cujo nome seja <QUALQUER COISA>da<QUALQUER COISA>. 
 Exemplo: João da Silva Eduarda Daiana
  • 46. SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES LÓGICOS BETWEEN: Usado para indicar que a consulta será realizada entre dois valores, exemplo: Selecionar todos as pessoas cujo n_identificador esteja entre 1 e 100 SELECT * FROM pessoas 
 WHERE n_identificador BETWEEN 1 AND 100 46
  • 47. SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES LÓGICOS O comando BETWEEN pode ser substituído por uma comparação de maior que e menor que, exemplo:
 SELECT * FROM pessoas 
 WHERE n_identificador BETWEEN 1 AND 10
 SELECT * FROM pessoas 
 WHERE n_identificador > 0 AND n_identificador < 11 47
  • 48. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > PRODUTO CARTESIANO PRODUTO CARTESIANO ▸ É um problema bastante comum ao utilizar junções (principalmente quando envolve 3 ou mais tabelas). ▸ Ocorre quando a junção não foi feita ou foi realizada de forma incorreta. ▸ Consiste em listar na consulta um registro para cada combinação possível. 48
  • 49. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > PRODUTO CARTESIANO CREATE TABLE clientes(
 id int IDENTITY(1,1) NOT NULL, 
 nome varchar(50) NOT NULL 
 CONSTRAINT PK_clientes PRIMARY KEY (id)
 ) 
 
 CREATE TABLE carros(
 id int IDENTITY(1,1) NOT NULL, 
 nome varchar(50) NOT NULL, 
 cliente_id int NOT NULL 
 FOREIGN KEY (cliente_id) REFERENCES clientes (id) 
 CONSTRAINT PK_carros PRIMARY KEY (id)
 ) 49
  • 50. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > PRODUTO CARTESIANO INSERT INTO clientes (nome) VALUES ('João');
 INSERT INTO clientes (nome) VALUES ('Jeremias');
 INSERT INTO clientes (nome) VALUES ('Maria');
 
 INSERT INTO carros (nome, cliente_id) VALUES ('Monza', 1);
 INSERT INTO carros (nome, cliente_id) VALUES ('Corsa', 2);
 INSERT INTO carros (nome, cliente_id) VALUES ('Voyage', 3); 50
  • 51. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > PRODUTO CARTESIANO SELECT clientes.nome, carros.nome FROM clientes, carros; Ocorrência de produto cartesiano ao realizar a consulta. 51
  • 52. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > PRODUTO CARTESIANO SELECT clientes.nome, carros.nome FROM clientes, carros
 WHERE carros.cliente_id = clientes.id; SELECT clientes.nome, carros.nome FROM clientes
 JOIN carros ON carros.cliente_id = clientes.id; Resultado correto da consulta ao realizar a junção entre as tabelas 52
  • 53. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÕES> USANDO APELIDOS SELECT c.nome AS pessoa, ca.nome AS modelo
 FROM clientes c, carros ca
 WHERE ca.cliente_id = c.id; SELECT c.nome, ca.nome FROM clientes c
 JOIN carros ca ON ca.cliente_id = c.id; 53
  • 54. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÕES> USANDO APELIDOS SELECT c.nome AS pessoa, ca.nome AS modelo
 FROM clientes c, carros ca
 WHERE ca.cliente_id = c.id; SELECT clientes.nome, carros.nome
 FROM clientes, carros
 WHERE carros.cliente_id = clientes.id; Com o uso de apelidos para tabelas e colunas Sem o uso de apelidos para tabelas e colunas 54
  • 55. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > JUNÇÕES PARA REALIZAR A CONSULTA USANDO A JUNÇÃO VOCÊ DEVE: ▸ Indicar as colunas que serão selecionadas, lembrando que sempre será necessário indicar o nome da tabela(ou apelido) e o nome da coluna que deseja que seja listada.
 Ex.:
 SELECT p.nome, e.data FROM eventos_acessos e
 JOIN pessoas p ON p.id = e.pessoa_id
 
 SELECT pessoa.nome, eventos_acessos.data FROM eventos_acessos
 JOIN pessoas ON pessoas.id = eventos_acessos.pessoa_id 55
  • 56. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > SUBCONSULTA ▸ As subconsultas são um recurso interessante em querys que necessitam de informações de valores que referenciam os registros da tabela desejada. ▸ Elas podem ser utilizadas em todas as instruções SQL (SELECT, UPDATE e Delete). ▸ Seu funcionamento é bastante simples, consiste em realizar uma consulta e com os valores obtidos desta consulta realizar uma nova consulta, porém, sem que seja necessário executar dois processos individualmente 56
  • 57. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > SUBCONSULTA ▸ IN: Faz com que a consulta principal afete somente os valores cujo a subconsulta retorna. É usado juntamente com a cláusula WHERE ▸ NOT IN: Faz o contrário da instrução IN, isto é, afeta somente os valores não retornados pela subconsulta. 57 SUBCONSULTA: O USO DO IN E NOT IN
  • 58. SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > SUBCONSULTA ▸ Usamos IN ou NOT IN quando as colunas a serem mostradas como resultado de uma consulta provém de uma tabela, mas a condição de seleção vem de outra. Ex.: Listar o nome e identificador de todas as pessoas que realizaram acessos em uma determinada data. SELECT nome, n_identificador FROM eventos_acessos WHERE id in (SELECT pessoa_id FROM eventos_acessos WHERE data = '2017-08-02') ‣ Estas instruções também são usadas quando queremos exibir uma coluna resultante de consulta que utiliza uma função SQL, mas que não é a coluna usada na função Ex.: Listar somente os acessos cujo o valor da coluna valor_refeicao seja o maior existente. SELECT * FROM eventos_acessos WHERE valor_refeicao = (SELECT MAX(valor_refeicao) FROM eventos_acessos) 58 QUANDO USAR IN OU NOT IN
  • 59. SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS ▸ Utilizada para criação de objetos dentro do SQL (tables, views, indexs, triggers e procedures) ▸ As instruções disponíveis são: ▸ Create: Usada para criar ▸ Drop: Usada para excluir ▸ Alter: Usada para alterar. 59 LINGUAGEM DE DEFINIÇÃO DE DADOS
  • 60. SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TRIGGERS TRIGGERS ▸ Triggers é um mecanismo de automatização de processos e procedimentos no banco de dados. ▸ É utilizada para N situações, as mais comuns são integrações via Banco de Dados e atualização de dados em tabelas (produtos e estoque, por exemplo), auditoria, etc. 60 + INFO: https://msdn.microsoft.com/pt-BR/library/ms189799.aspx
  • 61. CREATE TRIGGER <Nome da Trigger>
 ON <tabela que irá ser "observada">
 [AFTER | FOR | INSTEAD OF] <instrução sobre a tabela que irá disparar a trigger> 
 AS
 BEGIN <Instruções SQL> END 61 Sintaxe básica: SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TRIGGERS
  • 62. CREATE TRIGGER TGR_FILTRO1_INSERT
 ON filtro1
 AFTER INSERT 
 AS
 BEGIN DECLARE @descricao VARCHAR(100), @id INT SELECT @descricao = descricao, @id = id FROM INSERTED PRINT (CONCAT('Novos inseridos - ID:', @id , ' Descrição:' , @descricao)) END 62 Exemplo: SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TRIGGERS
  • 63. CREATE TRIGGER TGR_FILTRO1_DELETE
 ON filtro1
 AFTER DELETE 
 AS
 BEGIN DECLARE @descricao VARCHAR(100), @id INT SELECT @descricao = descricao, @id = id FROM DELETED PRINT (CONCAT('Dados excluídos - ID:', @id , ' Descrição:' , @descricao)) END 63 Exemplo: SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TRIGGERS
  • 64. CREATE TRIGGER TGR_FILTRO1_UPDATE
 ON filtro1
 AFTER UPDATE 
 AS
 BEGIN DECLARE @descricao VARCHAR(100), @id INT, @descricao_ant VARCHAR(100), @id_ant INT SELECT @descricao_ant = descricao, @id_ant = id FROM DELETED SELECT @descricao = descricao, @id = id FROM INSERTED PRINT (CONCAT('Dados anteriores - ID:', @id_ant , ' Descrição:' , @descricao_ant)) PRINT (CONCAT('Novos dados - ID:', @id , ' Descrição:' , @descricao)) END 64 Exemplo: SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TRIGGERS
  • 65. 65 No SQL Server, existem as "tabelas" INSERTED e DELETED que armazenam os valores que foram inseridos ou deletados da tabela, isto é, através desta tabela é possível obter os valores de colunas em que a trigger foi criada. SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TRIGGERS
  • 66. CREATE TRIGGER TGR_FILTRO1_UPDATE
 ON filtro1
 AFTER UPDATE 
 AS
 BEGIN DECLARE @descricao VARCHAR(100), @id INT, @descricao_ant VARCHAR(100), @id_ant INT SELECT @descricao_ant = descricao, @id_ant = id FROM DELETED SELECT @descricao = descricao, @id = id FROM INSERTED PRINT (CONCAT('Dados anteriores - ID:', @id_ant , ' Descrição:' , @descricao_ant)) PRINT (CONCAT('Novos dados - ID:', @id , ' Descrição:' , @descricao)) END 66 Analisando o exemplo anterior... } Aqui obtenho o valor anterior o novo valor 
 das colunas id e descrição SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TRIGGERS
  • 67. IMPORTANTE: Tecnicamente, o update consiste em deletar o registro anterior e recriar este com os novos valores. Isso é feito pelo próprio SQL Server de maneira implícita. Por isso, quando criamos uma trigger ON UPDATE, é necessário utilizar as tabelas DELETED e INSERTED. 67SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TRIGGERS
  • 68. SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE TABLE A criação de tabelas é um tema bastante extenso, pois, para isso é necessário conhecermos os tipos de dados existentes no SQL Server, para que possamos utilizar o tipo de dado correto para armazenar as informações desejada no banco de dados. 68
  • 69. TIPOS DE DADOS Os tipos mais comuns são: int: Usado para armazenar valores inteiros dentro do seguinte intervalo: De -2³¹ (-2.147.483.648) a 2³¹ -1 (2.147.483.647) smalldatetime: Usado para armazenar datas dentro do seguinte intervalo: De 1º de janeiro de 1900 a 6 de junho de 2079 69SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE > TIPOS DE DADOS
  • 70. TIPOS DE DADOS char: Usado para armazenar cadeia de caracteres não Unicode de comprimento fixo. varchar: Usado para armazenar cadeia de caracteres não Unicode de comprimento variável. ‣ Ambos permitem armazenar de 1 a 8000 caracteres. 70SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE > TIPOS DE DADOS
  • 71. TIPOS DE DADOS ‣ Use char quando os tamanhos das entradas de dados de coluna são consistentes. ‣ Use varchar quando os tamanhos das entradas de dados de coluna variarem consideravelmente. 71SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE > TIPOS DE DADOS
  • 72. TIPOS DE DADOS Money: Usado para armazenar valores inteiros dentro do seguinte intervalo: De -922.337.203.685.477,58 a 922.337.203.685.477,58 bit: Usado para armazenar valores do tipo Boolean (True ou False). True é armazenado como 1. False é armazenado como 0. 72SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE > TIPOS DE DADOS
  • 73. TIPOS DE DADOS ‣ Existem muitos tipos de dados disponíveis, caberá a você escolher o que melhor se adequa ao que você deseja armazenar. 73 + info: https://technet.microsoft.com/en-us/library/ms187752(v=sql.105).aspx SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE > TIPOS DE DADOS
  • 74. SINTAXE BÁSICA CREATE TABLE <nome da tabela> ( nome_coluna1 tipo_dado(tamanho), nome_coluna2 tipo_dado(tamanho), nome_coluna3 tipo_dado(tamanho), ... ) 74SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE
  • 75. SINTAXE BÁSICA CREATE TABLE pessoas ( id int, nome varchar(100), sobrenome varchar(100), endereco varchar(255) ) 75SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE
  • 76. SINTAXE BÁSICA Banco de dados relacionais são orientados com base em referências entre tabelas, para isso, é necessário que exista chave primária e chave estrangeira. 76 CREATE TABLE a
 (
 id int PRIMARY KEY identity (1,1), nome varchar(100), sobrenome varchar(100), endereco varchar(255)
 ) O comando identity serve para que o 
 controle do ID seja de responsabilidade 
 do banco de dados } SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE
  • 77. EXEMPLO DE REFERENCIA ENTRE TABELAS: 77 CREATE TABLE a
 (
 id int PRIMARY KEY identity (1,1), nome varchar(100), sobrenome varchar(100), endereco varchar(255)
 ) CREATE TABLE b
 (
 id int PRIMARY KEY identity (1,1), a_id int constraint FK_a FOREIGN KEY REFEREBCES a(id), outro_dado varchar(100), obs varchar(255)
 ) SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TABLE
  • 78. SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > VIEW VIEW É uma “tabela virtual” cujo conteúdo é definido por uma query. As principais vantagens de utilizar uma view são: ‣ Possibilitar restringir o acesso ao banco de dados; ‣ Para tornar simples consultas complexas; ‣ Para apresentar visões diferentes dos mesmos dados; 78
  • 79. SINTAXE BÁSICA CREATE VIEW <Nome da View> AS <Consulta SQL> 79SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > VIEW
  • 80. EXEMPLO CREATE VIEW Pessoas_DataAcesso AS SELECT p.nome, e.data FROM eventos_acessos e JOIN pessoas p ON p.id = e.pessoa_id 80SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > VIEW
  • 81. SQL > FONTE PARA CONSULTA FONTE PARA CONSULTA Tudo que vimos neste treinamento é apenas uma breve explanação sobre SQL, recomendo que releiam esta apresentação, façam os exercícios e consulte outras fontes, como por exemplo a W3Schools, segue link para a seção sobre SQL: https://www.w3schools.com/sql 81