Вы находитесь на странице: 1из 41

2008.

SQL Avanado Revisando SQL...

renatafviegas@gmail.com

Renata Viegas

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

2008.2

Structured Query Language (SQL)

Linguagem no procedural que requer do usurio qual dado necessrio sem especificar como obt-lo Poupa tempo de programao, mas exige treino para se dominar Suporte cliente-servidor Controle de Acesso

2008.2

Structured Query Language (SQL)

Integridade dos Dados Independncia de fabricante: est incorporada em quase todos os SGBDs em seu padro ANSI, com extenses proprietrias de cada fabricante

2008.2

SELECT Consultando Dados

Sintaxe Bsica

SELECT lista_de_colunas FROM lista_de_tabelas WHERE condies

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 com base nos valores de uma ou mais colunas HAVING: especifica as condies usadas para filtrar agrupamento de dados no resultado da consulta. S deve ser usado com o GROUP BY

2008.2

Consultas Simples

Exemplo 1: exibir todos os dados de todos os clientes SELECT * FROM cliente Exemplo 2: exibir cdigo, nome e telefone de todos os clientes SELECT codigo, nome, fone FROM cliente

2008.2

Consultas Simples

Exemplo 3: exibir cdigo, nome e telefone dos 20 primeiros clientes cadastrados na empresa
SELECT TOP 20 codigo,nome,fone FROM cliente

SELECT TOP n [percent] <lista_de_colunas> FROM <tabela>

2008.2

Consultas Simples

Exemplo 4: exibir cdigo, nome e preo de venda dos 10% primeiros produtos cadastrados SELECT TOP 10 PERCENT codigo, nome,preco FROM produto

2008.2

Consultas Simples

Exemplo 5: exibir cdigo, nome, telefone e uma coluna contendo classificado para todos os clientes
SELECT codigo,nome,fone, classificado FROM cliente

2008.2

Consultas Simples

Exemplo 6: exibir cdigo, nome e uma coluna contendo classificado com o cabealho Classificao para todos os clientes

SELECT codigo,nome, classificado Classificao FROM cliente

2008.2

Consultas Simples

Exemplo 7: exibir nmero, descrio e preo de um produto, renomeando a coluna nmero para cdigo

SELECT numero as Codigo, descricao, preco FROM produto

2008.2

Manipulando Expresses Um comando SELECT tambm pode retornar como coluna de resultado um valor calculado. Exemplo 8: Exibir cdigo, quantidade em estoque, preo da venda e valor total (quantidade * preo da venda) para cada produto
SELECT codigo, quantEst AS Quantidade, preco, quantEst*preco Valor Total FROM produto

2008.2

Funes Matemticas

Alm de operadores aritmticos, podemos usar funes matemticas (consulte a referncia do SGBD)
ROUND (valor, n): arredonda o valor para n casas decimais POWER (valor, p): retorna o valor elevado potncia p

2008.2

Funes Matemticas

Exemplo 9: exiba cdigo, preo e valor arredondado do preo de cada produto para 1 casa decimal
SELECT codigo,preco, ROUND (preco,1) FROM produto

2008.2

Funes Matemticas

Exemplo 10: exiba o preo do produto elevado a potncia de 3


SELECT POWER(preco,3) FROM produto

2008.2

Funes de Caracteres

Aplicao: muito teis para manipular dados do tipo caractere


SUBSTRING(expr, inicio, tam): Extrai uma parte de uma string desde inicio e com tam caracteres LOWER(expr): converte para minsculo

2008.2

Funes de Caracteres

Exemplo 11: exiba os 10 primeiros caracteres do ttulo de um livro em minsculo e seu preo da tabela livros
SELECT LOWER(SUBSTRING(titulo,1, 10)) Titulo, preco FROM livros

2008.2

Funes de Data e Hora Aplicao: em colunas do tipo datetime, que armazenam data e hora
DatePart(parte,data): retorna a parte especificada da data
Argumento Parte

yy
qq mm dd

O ano
o trimestre o ms dia do ms

hh
mi ss ms

horas
minutos segundos milisegundos

2008.2

Funes de Data e Hora

Exemplo 12: Exiba o nome e ms de aniversrio de todos os funcionrios


SELECT nome, DatePart (mm,dataNasc) FROM funcionarios

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 FROM funcionarios

2008.2

Funes de Converso Aplicao: converso de um tipo de dado em outro

CONVERT (tipo de dado, valor)


Exemplo 14: Exiba o preo de um produto convertido para string apenas no select
SELECT Convert( char(10), preco) FROM produto

2008.2

Funes de Converso

Com valores datetime, convert pode ter um parmetro a mais que especifica o formato da 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

Funes de Converso

Exemplo 15: Exiba a data de hoje no formato brasileiro


SELECT Convert( char(10), GetDate(), 103)

2008.2

EXERCCIOS Quer enriquecer suas expresses SQL? Pesquise as seguintes 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 demonstrando o uso destas funes !!

SELECT

2008.2

Eliminando Duplicao de Linhas

Sintaxe: SELECT DISTINCT <colunas> FROM <tabelas>

Exemplo 16: Exibir cdigo de todos os clientes que j fizeram pedido na empresa

SELECT DISTINCT cod_cliente FROM clientes

2008.2

Ordenando Resultados
Sintaxe: SELECT <colunas> FROM <tabelas> ORDER BY <coluna> [ASC] [DESC] Exemplo 17: Exibir cdigo, nome e telefone de todos os clientes, ordenado pelo nome do cliente de forma ascendente

SELECT cod_cliente, nome, tel FROM clientes ORDER BY nome

2008.2

Ordenando Resultados

Exemplo 18: Exibir nome, cidade e sexo de todos os clientes ordenado por cidade em ordem ascendente e sexo em ordem descendente

SELECT nome, cidade, sexo FROM clientes ORDER BY cidade, sexo DESC

2008.2

Filtrando os Dados
Sintaxe: SELECT <colunas> FROM <tabelas> WHERE <coluna operador expresso> Exemplo 19: Exibir todos os dados dos funcionrios que nasceram a partir de 1950

SELECT *, Convert(varchar, dtNas, 103) FROM funcionarios WHERE dtNasc > 31/12/1949
Qual outra maneira de fazer esta consulta usando funes de data na clusula Where ??

2008.2

Filtrando Dados Usando Intervalo


Sintaxe: SELECT <colunas> FROM <tabelas> WHERE <coluna BETWEEN expresso>

Exemplo 20: Exibir todos os dados de produtos cujo estoque esteja entre 10 e 30 unidades, ordenados pelo nome do produto

SELECT * FROM produtos WHERE estoque_atual BETWEEN 10 AND 30 ORDER BY nome

2008.2

Filtrando Dados Usando Intervalo Exemplo 21: Exibir todos os dados de funcionrios que nasceram na dcada de 60, ordenados pela data de nascimento em ordem descendente, e pelo nome do funcionrio em ordem ascendente.

SELECT * FROM funcionarios WHERE dataNasc BETWEEN 01/01/1960 AND 31/12/1969 ORDER BY dataNasc DESC,nome

2008.2

Filtrando Dados Usando Listas Sintaxe: SELECT <colunas> FROM <tabelas> WHERE <coluna IN lista> Exemplo 22: Exibir todos os dados dos funcionrios que residam em Manara ou Bessa, ordenados pelo nome

SELECT * FROM funcionarios WHERE bairro IN (Manaira, Bessa) ORDER BY nome

2008.2

Filtrando Dados Usando Listas

Exemplo 23: Exibir todos os produtos que no sejam do tipo 2 ou 4, ordenados pelo tipo em ordem descendente SELECT * FROM produtos WHERE tipo NOT IN (2,4) ORDER BY tipo DESC

2008.2

Filtrando Dados com Valores Nulos

Sintaxe: SELECT <colunas> FROM <tabelas> WHERE <coluna> IS [NOT] NULL Significado
Valores no formatados ou desconhecidos

2008.2

Filtrando Dados com Valores Nulos

Exemplo 24: Exibir os dados dos funcionrios que no tenham e-mail

SELECT * FROM funcionarios WHERE email IS NULL


Exemplo 25: Exibir dados dos funcionrios cujo nmero do telefone seja conhecido

SELECT * FROM funcionarios WHERE telefone IS NOT NULL

2008.2

Filtrando Dados com Valores Nulos

Voc acha que as linhas com valores NULL sero retornadas de acordo com o SELECT abaixo ??

SELECT * FROM funcionarios WHERE estado <> PB


NO !!!

2008.2

Filtrando Dados usando Strings

Sintaxe: SELECT <colunas> FROM <tabelas> WHERE <coluna> LIKE <string> Significado:
Casamento de Padro: uma string contendo caracteres que podem ser combinados com parte de outra string % (porcentagem): seqncia de caracteres _ (sublinhado): Combina com um nico caractere

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 letras de A at E?


Usar LIKE [A-E]%

E todos os nomes que no iniciam com V?


Usar LIKE [^V]%

2008.2

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

Funes Agregadas
Obs.: A clusula DISTINCT pode ser usada como parte do argumento para eliminar linhas repetidas antes da aplicao da funo Exemplo 26: Exibir a quantidade de produtos vendidos com preo maior que R$ 10,00

SELECT COUNT (DISTINCT cod_p) FROM produtos WHERE preco > 10

2008.2

Para Pesquisar!! Clusula COMPUTE Sintaxe: SELECT <colunas> FROM <tabelas> ORDER BY <coluna> COMPUTE <lista de funes de agregao> BY <lista de colunas> 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

Вам также может понравиться