81
UM BREVE TREINAMENTO SOBRE SQL E SUAS FUNCIONALIDADES WILLIAM COSTA

um breve treinamento sobre SQL e suas funcionalidades

Embed Size (px)

Citation preview

Page 1: um breve treinamento sobre SQL e suas funcionalidades

UM BREVE TREINAMENTO SOBRE SQL E SUAS FUNCIONALIDADES

WILLIAM COSTA

Page 2: um breve treinamento sobre SQL e suas funcionalidades

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íficasdo 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

Page 3: um breve treinamento sobre SQL e suas funcionalidades

INTRODUÇÃO

O QUE É SQL

▸ Linguagem utilizada para manipulação de dados em banco de dados.

▸ Structured Query Language

3

Page 4: um breve treinamento sobre SQL e suas funcionalidades

POR QUE SABER SQL?

4

Page 5: um breve treinamento sobre SQL e suas funcionalidades

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

Page 6: um breve treinamento sobre SQL e suas funcionalidades

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

Page 7: um breve treinamento sobre SQL e suas funcionalidades

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

Page 8: um breve treinamento sobre SQL e suas funcionalidades

SQL > SUBCONJUNTOS DA LINGUAGEM

DML - LINGUAGEM DE MANIPULAÇÃO DE DADOS

▸ INSERT

▸ UPDATE

▸ DELETE

8

Page 9: um breve treinamento sobre SQL e suas funcionalidades

SQL > SUBCONJUNTOS DA LINGUAGEM

DDL - LINGUAGEM DE DEFINIÇÃO DE DADOS

▸ CREATE

▸ Table

▸ Index

▸ View

▸ ...

▸ DROP

▸ Table

▸ Index

▸ View

▸ ...

9

▸ ALTER

▸ Table

▸ Index

▸ View

▸ ...

Page 10: um breve treinamento sobre SQL e suas funcionalidades

SQL > SUBCONJUNTOS DA LINGUAGEM

DQL - LINGUAGEM DE CONSULTA DE DADOS

▸ SELECT

10

Page 11: um breve treinamento sobre SQL e suas funcionalidades

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

Page 12: um breve treinamento sobre SQL e suas funcionalidades

SQL > LINGUAGEM DE CONSULTA DE DADOS

Esse comando possui as seguintes cláusulas:▸ FROM

▸ WHERE

▸ GROUP BY

▸ HAVING

▸ ORDER BY

▸ DISTINCT

▸ UNION

12

Page 13: um breve treinamento sobre SQL e suas funcionalidades

SQL > LINGUAGEM DE CONSULTA DE DADOS

Veremos neste breve treinamento

▸ WHERE

▸ GROUP BY

▸ HAVING

▸ ORDER BY

13

Page 14: um breve treinamento sobre SQL e suas funcionalidades

SQL É QUASE COMO ESCREVER (EM INGLÊS) O QUE O SGBD IRÁ FAZER, POR EXEMPLO:

14

Page 15: um breve treinamento sobre SQL e suas funcionalidades

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

Page 16: um breve treinamento sobre SQL e suas funcionalidades

SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY SIMPLES 16

SELECT * FROM pessoas WHERE id > 1 ORDER BY nome DESC

Instrução SQL

Page 17: um breve treinamento sobre SQL e suas funcionalidades

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

Page 18: um breve treinamento sobre SQL e suas funcionalidades

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

Page 19: um breve treinamento sobre SQL e suas funcionalidades

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

Page 20: um breve treinamento sobre SQL e suas funcionalidades

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

Page 21: um breve treinamento sobre SQL e suas funcionalidades

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

Page 22: um breve treinamento sobre SQL e suas funcionalidades

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

Page 23: um breve treinamento sobre SQL e suas funcionalidades

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

Page 24: um breve treinamento sobre SQL e suas funcionalidades

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

Page 25: um breve treinamento sobre SQL e suas funcionalidades

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

Page 26: um breve treinamento sobre SQL e suas funcionalidades

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

Page 27: um breve treinamento sobre SQL e suas funcionalidades

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

Page 28: um breve treinamento sobre SQL e suas funcionalidades

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 }

RETORNAM O M

ESMO RESULTADO

28

Page 29: um breve treinamento sobre SQL e suas funcionalidades

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

Page 30: um breve treinamento sobre SQL e suas funcionalidades

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 }RETORNAM

O MESM

O RESULTADO

30

Page 31: um breve treinamento sobre SQL e suas funcionalidades

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:

Page 32: um breve treinamento sobre SQL e suas funcionalidades

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:

Page 33: um breve treinamento sobre SQL e suas funcionalidades

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

Page 34: um breve treinamento sobre SQL e suas funcionalidades

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

Page 35: um breve treinamento sobre SQL e suas funcionalidades

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

Page 36: um breve treinamento sobre SQL e suas funcionalidades

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

Page 37: um breve treinamento sobre SQL e suas funcionalidades

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

Page 38: um breve treinamento sobre SQL e suas funcionalidades

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

Page 39: um breve treinamento sobre SQL e suas funcionalidades

SQL > LINGUAGEM DE CONSULTA DE DADOS > OPERADORES MATEMÁTICOS

> (maior) < (menor) = (igual)

39

>= (maior ou igual) <= (menor ou igual) <> (diferente)

Page 40: um breve treinamento sobre SQL e suas funcionalidades

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

Page 41: um breve treinamento sobre SQL e suas funcionalidades

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

Page 42: um breve treinamento sobre SQL e suas funcionalidades

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

Page 43: um breve treinamento sobre SQL e suas funcionalidades

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

Page 44: um breve treinamento sobre SQL e suas funcionalidades

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

Page 45: um breve treinamento sobre SQL e suas funcionalidades

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

Page 46: um breve treinamento sobre SQL e suas funcionalidades

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

Page 47: um breve treinamento sobre SQL e suas funcionalidades

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

Page 48: um breve treinamento sobre SQL e suas funcionalidades

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

Page 49: um breve treinamento sobre SQL e suas funcionalidades

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

Page 50: um breve treinamento sobre SQL e suas funcionalidades

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

Page 51: um breve treinamento sobre SQL e suas funcionalidades

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

Page 52: um breve treinamento sobre SQL e suas funcionalidades

SQL > LINGUAGEM DE CONSULTA DE DADOS > QUERY ELABORADA > PRODUTO CARTESIANO

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

SELECT clientes.nome, carros.nome FROM clientesJOIN carros ON carros.cliente_id = clientes.id;

Resultado correto da consulta ao realizar a junção entre as tabelas

52

Page 53: um breve treinamento sobre SQL e suas funcionalidades

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 caWHERE ca.cliente_id = c.id;

SELECT c.nome, ca.nome FROM clientes cJOIN carros ca ON ca.cliente_id = c.id;

53

Page 54: um breve treinamento sobre SQL e suas funcionalidades

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 caWHERE ca.cliente_id = c.id;

SELECT clientes.nome, carros.nomeFROM clientes, carrosWHERE carros.cliente_id = clientes.id;

Com o uso de apelidos para tabelas e colunas

Sem o uso de apelidos para tabelas e colunas

54

Page 55: um breve treinamento sobre SQL e suas funcionalidades

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

Page 56: um breve treinamento sobre SQL e suas funcionalidades

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

Page 57: um breve treinamento sobre SQL e suas funcionalidades

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

Page 58: um breve treinamento sobre SQL e suas funcionalidades

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

Page 59: um breve treinamento sobre SQL e suas funcionalidades

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

Page 60: um breve treinamento sobre SQL e suas funcionalidades

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

Page 61: um breve treinamento sobre SQL e suas funcionalidades

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> ASBEGIN

<Instruções SQL>

END

61

Sintaxe básica:

SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > TRIGGERS

Page 62: um breve treinamento sobre SQL e suas funcionalidades

CREATE TRIGGER TGR_FILTRO1_INSERTON filtro1AFTER INSERT ASBEGIN

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

Page 63: um breve treinamento sobre SQL e suas funcionalidades

CREATE TRIGGER TGR_FILTRO1_DELETEON filtro1AFTER DELETE ASBEGIN

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

Page 64: um breve treinamento sobre SQL e suas funcionalidades

CREATE TRIGGER TGR_FILTRO1_UPDATEON filtro1AFTER UPDATE ASBEGIN

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

Page 65: um breve treinamento sobre SQL e suas funcionalidades

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

Page 66: um breve treinamento sobre SQL e suas funcionalidades

CREATE TRIGGER TGR_FILTRO1_UPDATEON filtro1AFTER UPDATE ASBEGIN

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

Page 67: um breve treinamento sobre SQL e suas funcionalidades

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

Page 68: um breve treinamento sobre SQL e suas funcionalidades

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

Page 69: um breve treinamento sobre SQL e suas funcionalidades

TIPOS DE DADOSOs 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

Page 70: um breve treinamento sobre SQL e suas funcionalidades

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

Page 71: um breve treinamento sobre SQL e suas funcionalidades

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

Page 72: um breve treinamento sobre SQL e suas funcionalidades

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

Page 73: um breve treinamento sobre SQL e suas funcionalidades

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

Page 74: um breve treinamento sobre SQL e suas funcionalidades

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

Page 75: um breve treinamento sobre SQL e suas funcionalidades

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

Page 76: um breve treinamento sobre SQL e suas funcionalidades

SINTAXE BÁSICABanco 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

Page 77: um breve treinamento sobre SQL e suas funcionalidades

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

Page 78: um breve treinamento sobre SQL e suas funcionalidades

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

Page 79: um breve treinamento sobre SQL e suas funcionalidades

SINTAXE BÁSICA

CREATE VIEW <Nome da View>

AS

<Consulta SQL>

79SQL > LINGUAGEM DE DEFINIÇÃO DE DADOS > VIEW

Page 80: um breve treinamento sobre SQL e suas funcionalidades

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

Page 81: um breve treinamento sobre SQL e suas funcionalidades

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