Download - 1 - SQL Avancado - Parte 1
-
7/30/2019 1 - SQL Avancado - Parte 1
1/41
2008.2
SQL Avanado
Revisando SQL...
Renata [email protected]
-
7/30/2019 1 - SQL Avancado - Parte 1
2/41
2008.2
Objetivos
Revisando a sintaxe SQL SELECT, UPDATE, INSERT, DELETE
Manipulando expresses Funes matemticas, etc
Condies de Pesquisa Funes de Agregao e Agrupamento
Juno de tabelas
Subconsultas e tabelas temporrias
-
7/30/2019 1 - SQL Avancado - Parte 1
3/41
2008.2
Structured Query Language (SQL)
Linguagem no procedural que requer dousurio qual dado necessrio semespecificar como obt-lo
Poupa tempo de programao, mas exigetreino para se dominar
Suporte cliente-servidor
Controle de Acesso
-
7/30/2019 1 - SQL Avancado - Parte 1
4/41
2008.2
Structured Query Language (SQL)
Integridade dos Dados Independncia de fabricante: est
incorporada em quase todos os SGBDs em
seu padro ANSI, com extensesproprietrias de cada fabricante
-
7/30/2019 1 - SQL Avancado - Parte 1
5/41
2008.2
SELECT Consultando Dados
Sintaxe Bsica
SELECT lista_de_colunasFROM lista_de_tabelasWHERE condies
-
7/30/2019 1 - SQL Avancado - Parte 1
6/41
2008.2
SELECT Consultando Dados
Clusulas Adicionais INTO: especifica uma nova tabela que conter o
resultado da consulta
ORDER BY: classifica o resultado da consulta
GROUP BY: agrupa as linhas das consultas combase nos valores de uma ou mais colunas
HAVING: especifica as condies usadas para
filtrar agrupamento de dados no resultado daconsulta. S deve ser usado com o GROUP BY
-
7/30/2019 1 - SQL Avancado - Parte 1
7/41
2008.2
Consultas Simples
Exemplo 1: exibir todos os dados de todos osclientes
Exemplo 2: exibir cdigo, nome e telefone detodos os clientes
SELECT * FROMcliente
SELECT codigo, nome, foneFROMcliente
-
7/30/2019 1 - SQL Avancado - Parte 1
8/41
2008.2
Consultas Simples
Exemplo 3: exibir cdigo, nome e telefonedos 20 primeiros clientes cadastrados naempresa
SELECTTOP 20 codigo,nome,foneFROMcliente
SELECTTOP n [percent] FROM
-
7/30/2019 1 - SQL Avancado - Parte 1
9/41
2008.2
Consultas Simples
Exemplo 4: exibir cdigo, nome e preo devenda dos 10% primeiros produtoscadastrados
SELECTTOP 10 PERCENT codigo,
nome,preco
FROMproduto
-
7/30/2019 1 - SQL Avancado - Parte 1
10/41
2008.2
Consultas Simples
Exemplo 5: exibir cdigo, nome, telefone euma coluna contendo classificadopara todosos clientes
SELECT codigo,nome,fone,classificado
FROMcliente
-
7/30/2019 1 - SQL Avancado - Parte 1
11/41
2008.2
Consultas Simples
Exemplo 6: exibir cdigo, nome e uma colunacontendo classificado com o cabealhoClassificaopara todos os clientes
SELECT codigo,nome,
classificado Classificao
FROMcliente
-
7/30/2019 1 - SQL Avancado - Parte 1
12/41
2008.2
Consultas Simples
Exemplo 7: exibir nmero, descrio e preode um produto, renomeando a colunanmero para cdigo
SELECT numero asCodigo,
descricao, preco
FROMproduto
-
7/30/2019 1 - SQL Avancado - Parte 1
13/41
2008.2
Manipulando Expresses
Um comando SELECT tambm pode retornar comocoluna de resultado um valor calculado.
Exemplo 8: Exibir cdigo, quantidade em estoque,
preo da venda e valor total (quantidade * preo davenda) para cada produto
SELECT codigo, quantEst ASQuantidade, preco,
quantEst*preco Valor Total
FROMproduto
-
7/30/2019 1 - SQL Avancado - Parte 1
14/41
2008.2
Funes Matemticas
Alm de operadores aritmticos, podemosusar funes matemticas (consulte areferncia do SGBD)
ROUND (valor, n): arredonda o valor para ncasas decimais
POWER (valor, p): retorna o valor elevado potncia p
-
7/30/2019 1 - SQL Avancado - Parte 1
15/41
2008.2
Funes Matemticas
Exemplo 9: exiba cdigo, preo e valorarredondado do preo de cada produto para1 casa decimal
SELECT codigo,preco,
ROUND (preco,1)
FROMproduto
-
7/30/2019 1 - SQL Avancado - Parte 1
16/41
2008.2
Funes Matemticas
Exemplo 10: exiba o preo do produtoelevado a potncia de 3
SELECT POWER(preco,3)FROMproduto
-
7/30/2019 1 - SQL Avancado - Parte 1
17/41
2008.2
Funes de Caracteres
Aplicao: muito teis para manipular dadosdo tipo caractere
SUBSTRING(expr, inicio, tam): Extrai uma partede uma string desde inicio e com tam caracteres
LOWER(expr): converte para minsculo
-
7/30/2019 1 - SQL Avancado - Parte 1
18/41
2008.2
Funes de Caracteres
Exemplo 11: exiba os 10 primeiros caracteresdo ttulo de um livro em minsculo e seupreo da tabela livros
SELECT LOWER(SUBSTRING(titulo,1, 10))
Titulo, preco
FROMlivros
-
7/30/2019 1 - SQL Avancado - Parte 1
19/41
2008.2
Funes de Data e Hora
Aplicao: em colunas do tipo datetime, quearmazenam data e hora DatePart(parte,data): retorna a parte especificada da
data
yy O ano hh horas
qq o trimestre mi minutos
mm o ms ss segundos
dd dia do ms ms milisegundos
Argumento Parte
2008 2
-
7/30/2019 1 - SQL Avancado - Parte 1
20/41
2008.2
Funes de Data e Hora
Exemplo 12: Exiba o nome e ms deaniversrio de todos os funcionrios
SELECT nome,DatePart (mm,dataNasc)
FROMfuncionarios
2008 2
-
7/30/2019 1 - SQL Avancado - Parte 1
21/41
2008.2
Funes de Data e Hora
GetDate(): retorna a data e hora atuais Exemplo 13: exiba a data de aniversrio e o dia
atual para todos os funcionrios
SELECT dtNasc, GetDate() Dia
de Hoje
FROMfuncionarios
2008 2
-
7/30/2019 1 - SQL Avancado - Parte 1
22/41
2008.2
Funes de Converso
Aplicao: converso de um tipo de dado em outroCONVERT (tipo de dado, valor)
Exemplo 14: Exiba o preo de um produtoconvertido para string apenas no select
SELECT Convert( char(10), preco)
FROMproduto
2008 2
-
7/30/2019 1 - SQL Avancado - Parte 1
23/41
2008.2
Funes de Converso
Com valores datetime, convert pode ter umparmetro a mais que especifica o formatoda data a ser usado
Padro brasileiro: 3 (dd/mm/aa) e 103 (dd/mm/aaaa)
Padro americano: 1 (mm/dd/aa) e 101 (mm/dd/aaaa)
2008 2
-
7/30/2019 1 - SQL Avancado - Parte 1
24/41
2008.2
Funes de Converso
Exemplo 15: Exiba a data de hoje no formatobrasileiro
SELECT Convert( char(10),GetDate(), 103)
2008 2
-
7/30/2019 1 - SQL Avancado - Parte 1
25/41
2008.2
EXERCCIOS
Quer enriquecer suas expresses SQL? Pesquise asseguintes funes no SQL Server
Funes de Caracteres Upper(), Ltrim(), Rtrim(), Space(), Str()
Funes de Data e Hora DateAdd(), DateDiff(), DateName()
Traga na prxima aula instrues SELECTdemonstrando o uso destas funes !!
2008 2
-
7/30/2019 1 - SQL Avancado - Parte 1
26/41
2008.2
Eliminando Duplicao de Linhas
Sintaxe:SELECTDISTINCT
FROM
Exemplo 16: Exibir cdigo de todos os clientes quej fizeram pedido na empresa
SELECT DISTINCT cod_clienteFROMclientes
2008 2
-
7/30/2019 1 - SQL Avancado - Parte 1
27/41
2008.2
Ordenando Resultados Sintaxe:
SELECT FROM ORDER BY [ASC] [DESC]
Exemplo 17: Exibir cdigo, nome e telefone de todos os
clientes, ordenado pelo nome do cliente de formaascendente
SELECT cod_cliente, nome, tel
FROMclientes
ORDER BY nome
2008 2
-
7/30/2019 1 - SQL Avancado - Parte 1
28/41
2008.2
Ordenando Resultados
Exemplo 18: Exibir nome, cidade e sexo detodos os clientes ordenado por cidade emordem ascendente e sexo em ordemdescendente
SELECT nome, cidade, sexo
FROMclientes
ORDER BY cidade, sexo DESC
2008 2
-
7/30/2019 1 - SQL Avancado - Parte 1
29/41
2008.2
Filtrando os Dados Sintaxe:
SELECT FROM WHERE
Exemplo 19: Exibir todos os dados dos funcionrios que
nasceram a partir de 1950
SELECT *, Convert(varchar, dtNas,103)
FROMfuncionariosWHEREdtNasc > 31/12/1949
Qual outra maneira de fazer esta consultausando funes de data na clusula Where ??
2008 2
-
7/30/2019 1 - SQL Avancado - Parte 1
30/41
2008.2
Filtrando Dados Usando Intervalo
Sintaxe:
SELECT FROM WHERE
Exemplo 20: Exibir todos os dados de produtos cujoestoque esteja entre 10 e 30 unidades, ordenados pelo
nome do produto
SELECT * FROMprodutos
WHEREestoque_atualBETWEEN 10AND 30
ORDERBY nome
2008 2
-
7/30/2019 1 - SQL Avancado - Parte 1
31/41
2008.2
Filtrando Dados Usando Intervalo
Exemplo 21: Exibir todos os dados de funcionrios quenasceram na dcada de 60, ordenados pela data denascimento em ordem descendente, e pelo nome dofuncionrio em ordem ascendente.
SELECT * FROMfuncionarios
WHEREdataNascBETWEEN 01/01/1960
AND31/12/1969ORDERBY dataNasc DESC,nome
2008 2
-
7/30/2019 1 - SQL Avancado - Parte 1
32/41
2008.2
Filtrando Dados Usando Listas
Sintaxe:
SELECT FROM
WHERE
Exemplo 22: Exibir todos os dados dos funcionrios que
residam em Manara ou Bessa, ordenados pelo nome
SELECT * FROMfuncionarios
WHEREbairro IN(Manaira, Bessa)ORDERBY nome
2008 2
-
7/30/2019 1 - SQL Avancado - Parte 1
33/41
2008.2
Filtrando Dados Usando Listas
Exemplo 23: Exibir todos os produtos queno sejam do tipo 2 ou 4, ordenados pelotipo em ordem descendente
SELECT * FROMprodutos
WHEREtipoNOTIN(2,4)ORDERBY tipo DESC
2008 2
-
7/30/2019 1 - SQL Avancado - Parte 1
34/41
2008.2
Filtrando Dados com Valores Nulos
Sintaxe:SELECT FROM
WHERE IS[NOT]NULL
Significado
Valores no formatados ou desconhecidos
2008 2
-
7/30/2019 1 - SQL Avancado - Parte 1
35/41
2008.2
Filtrando Dados com Valores Nulos
Exemplo 24: Exibir os dados dos funcionrios queno tenham e-mail
SELECT * FROMfuncionarios
WHEREemail ISNULL
Exemplo 25: Exibir dados dos funcionrios cujonmero do telefone seja conhecido
SELECT * FROMfuncionarios
WHEREtelefone ISNOTNULL
2008.2
-
7/30/2019 1 - SQL Avancado - Parte 1
36/41
2008.2
Filtrando Dados com Valores Nulos
Voc acha que as linhas com valores NULLsero retornadas de acordo com o SELECTabaixo ??
SELECT * FROMfuncionariosWHEREestado PB
NO !!!
2008.2
-
7/30/2019 1 - SQL Avancado - Parte 1
37/41
2008.2
Filtrando Dados usando Strings
Sintaxe:SELECT FROM WHERE LIKE
Significado: Casamento de Padro: uma string contendo caracteresque podem ser combinados com parte de outra string
% (porcentagem): seqncia de caracteres_(sublinhado): Combina com um nico caractere
2008.2
-
7/30/2019 1 - SQL Avancado - Parte 1
38/41
2008.2
Filtrando Dados usando Strings
Outras combinaes:
[] (colchetes): combina uma faixa de caracteres ^ (circunflexo): significa negao
Como encontrar todos os nomes que comeam com A ou B? Usar LIKE[AB]%
Como encontrar todos os nomes que comeam com as letrasde A at E? Usar LIKE[A-E]%
E todos os nomes que no iniciam com V? Usar LIKE[^V]%
2008.2
-
7/30/2019 1 - SQL Avancado - Parte 1
39/41
008
Funes Agregadas
COUNT(): conta o nmero de valores de uma
coluna SUM(): soma os valores de uma coluna de dados
numricos AVG(): calcula a mdia de uma coluna de dados
numricos MAX(): determina o maior valor de uma coluna MIN() : determina o menor valor de uma coluna
2008.2
-
7/30/2019 1 - SQL Avancado - Parte 1
40/41
Funes Agregadas
Obs.: A clusula DISTINCT pode ser usada como parte do
argumento para eliminar linhas repetidas antes da aplicaoda funo
Exemplo 26: Exibir a quantidade de produtos vendidos com
preo maior que R$ 10,00SELECT COUNT (DISTINCT cod_p)
FROMprodutos
WHEREpreco > 10
2008.2
-
7/30/2019 1 - SQL Avancado - Parte 1
41/41
Para Pesquisar!! Clusula COMPUTE
Sintaxe:
SELECT FROM ORDER BY
COMPUTE BY
Para que serve? Gerar totalizadores que aparecem como colunas adicionais resumo no
final do conjunto resultado
O que devo fazer ?? Trazer 3 exemplos prticos desta clusula