Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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
Sintaxe Bsica
2008.2
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 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
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
2008.2
Consultas Simples
Exemplo 7: exibir nmero, descrio e preo de um produto, renomeando a coluna nmero para cdigo
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
2008.2
Funes de Caracteres
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
yy
qq
O ano
o trimestre
hh
mi
horas
minutos
mm
dd
o ms
dia do ms
ss
ms
segundos
milisegundos
2008.2
2008.2
2008.2
Funes de Converso
Aplicao: converso de um tipo de dado em outro
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
2008.2
EXERCCIOS
Quer enriquecer suas expresses SQL? Pesquise as seguintes funes no SQL Server
Funes de Caracteres
Upper(), Ltrim(), Rtrim(), Space(), Str()
SELECT
2008.2
Sintaxe: SELECT DISTINCT <colunas> FROM <tabelas> Exemplo 16: Exibir cdigo de todos os clientes que j fizeram pedido na empresa
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
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
Exemplo 20: Exibir todos os dados de produtos cujo estoque esteja entre 10 e 30 unidades, ordenados pelo nome do produto
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
2008.2
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
Significado
Valores no formatados ou desconhecidos
2008.2
2008.2
Voc acha que as linhas com valores NULL sero retornadas de acordo com o SELECT abaixo ??
2008.2
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
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
2008.2
Para Pesquisar!! Clusula COMPUTE Sintaxe: SELECT <colunas> FROM <tabelas> ORDER BY <coluna> COMPUTE <lista de funes de agregao> BY <lista de colunas>
2008.2
Renata Viegas
2008.2
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
2008.2
Clusula COMPUTE
Gera totalizadores que aparecem como colunas adicionais resumo no final do conjunto resultado Quando utilizada com a clusula BY, ela gera sub-totais no conjunto resultado No padro SQL
2008.2
Clusula COMPUTE
SELECT <colunas> FROM <tabelas> ORDER BY <coluna> COMPUTE <lista de funes de agregao> BY <lista de colunas>
2008.2
Clusula COMPUTE
Exemplo: Mostrar uma soma sumarizada dos preos de custo e venda
SELECT p.codP, p.nome, p.tipo, p.preco_custo, p.preco_venda FROM produto p, pedido pe WHERE p.codP = pe.cod_produto ORDER BY codP COMPUTE SUM(preco_venda), SUM(preco_custo)
2008.2
Clusula COMPUTE
Exemplo com BY: Mostra uma soma sumarizada dos preos de custo e venda para cada tipo de produto
SELECT p.codP, p.nome, p.tipo, p.preco_custo, p.preco_venda FROM produto p, pedido pe WHERE p.codP = pe.cod_produto ORDER BY codP COMPUTE SUM(preco_venda), SUM(preco_custo) BY codP
2008.2
Sintaxe SELECT <colunas> FROM <tabelas> WHERE <condio> GROUP BY <coluna> HAVING <condio>
2008.2
GROUP BY: organiza as linhas de resultado em grupos de acordo com os valores das expresses informadas
Uso com funes agregadas
2008.2
2008.2
2008.2
2008.2
Exemplo: Exibir os cdigos dos pedidos que tem mais do que 4 produtos SELECT cod_pedido, COUNT(produto) FROM itens GROUP BY cod_pedido HAVING COUNT(produto)>4
2008.2
Exemplo: Exibir o valor total de cada pedido (valor total = quantidade*preo-desconto), onde a soma seja maior que R$1.000,00
SELECT cod_pedido, SUM((quant*preco)-desc) FROM itens GROUP BY cod_pedido HAVING SUM((quant*preco)-desc) > 1000
2008.2
Exemplo: Exibir a mdia de idade dos funcionrios de cada sexo, em cada setor da empresa. Exibir apenas os setores onde essa mdia de idade seja superior a 40 anos
SELECT setor, sexo, AVG(idade) FROM funcionario GROUP BY setor, sexo HAVING AVG(idade) > 40
2008.2
Sub-Consultas
Uma sub-consulta uma consulta SELECT aninhada dentro de outro comando SQL
Uma sub-consulta deve ser delimitada parnteses e avaliada apenas uma vez
entre
2008.2
Sub-Consultas
2008.2
Sub-Consultas
Exemplo: Exibir o nome e o valor da gratificao das funes que tm a menor gratificao da empresa SELECT nome, gratificacao FROM funcao WHERE gratificacao = (SELECT MIN(gratificacao) FROM funcao)
2008.2
Sub-Consultas
Exemplo: Exibir o cdigo, o nome e a quantidade em estoque do produto que tem a maior quantidade em, estoque da empresa
SELECT codigo, nome, quantEst FROM produto WHERE quantEst = (SELECT MAX(quantEst) FROM produto)
2008.2
Sub-Consultas
2008.2
Sub-Consultas
Uma sub-consulta pode retornar tambm uma lista de valores, que pode ser usada em comparaes com o operador IN
2008.2
Sub-Consultas
Exemplo: Exibir cdigo e nome de todos os clientes estrangeiros SELECT codigo, nome FROM cliente WHERE codPais IN (SELECT codigo FROM pais WHERE codigo <>BRA)
SELECT c.codigo, c.nome FROM cliente c, pais p WHERE c.codPais = p.codigo AND c.codPais <>BRA
2008.2
Sub-Consultas: Lista de Valores Especiais > ALL : maior que todos < ALL : menor que todos <> ALL : diferente de todos (igual a NOT IN) = ANY : igual a algum dos elementos da lista (o mesmo que IN) > ANY : maior que algum dos elementos da lista < ANY: menor que algum dos elementos da lista <> ANY : diferente de algum dos elementos da lista
2008.2
Sub-Consultas
Exemplo: exibir nome, tipo e preo de venda dos produtos que no sejam dos tipos 3, 4 ou 5, e que tenham preo de venda maior que pelo menos o preo de um destes produtos
SELECT nome, tipo, preco_venda FROM produto WHERE tipo NOT IN (3,4,5) AND preco_venda > ANY (SELECT preco_venda FROM produto WHERE tipo IN (3,4,5))
2008.2
Unio de Conjuntos
Clusula UNION
Utilizada para combinar resultado de dois comandos do tipo SELECT Os dois comandos podem at trazer dados de tabelas diferentes, desde que com o mesmo nmero de colunas e tipos de dados compatveis para cada coluna correspondente de um com o outro Na unio de conjuntos, os elementos repetidos so eliminados (como se utilizasse a clusula DISTINCT)
2008.2
Unio de Conjuntos
Exemplo: Exiba todas as cidades e estados onde existem autores ou editoras, ordenados pelo estado SELECT cidade, estado FROM autor UNION SELECT cidade, estado FROM editoras ORDER BY estado
2008.2
2008.2
Exemplo: Criar uma nova tabela que contenha o cdigo do pedido, nome e telefone do cliente que fez cada um deles.
SELECT p.codPedido Pedido, c.nomeCliente Cliente, C.fone Fone INTO Pedidos FROM compras p, cliente c WHERE p.codCli = c.CodCli
2008.2
A nova tabela chamada Pedidos ser criada no banco de dados (criao fsica), contendo o cdigo do pedido, o nome e telefone do cliente que fez cada um deles Para criar uma tabela temporria, necessrio colocar o caractere # iniciando o nome da tabela
#Pedidos Tabela Local ##Pedidos Tabela Golbal
2008.2
Tabelas Temporrias
Tabelas Temporrias Locais: Criadas com o prefixo #, e possuem visibilidade restrita para a conexo responsvel pela sua criao Tabelas Temporrias Globais: Criadas com o prefixo ##, e so visveis para todas as conexes
2008.2
Tabelas Temporrias
Os dois tipos de tabelas (locais e globais) s existem enquanto a conexo responsvel pela sua criao estiver ativa
So eliminadas automaticamente conexo desfeita quando a
2008.2
Tabelas Temporrias
Exemplo: Criar uma tabela com CREATE TABLE e inserir dados na mesma
2008.2
Tabelas Temporrias
Exemplo: selecione a quantidade de pedidos agrupados pela data para uma nova tabela temporria global SELECT data Data, COUNT(*) Quant INTO ##temp FROM pedidos GROUP BY data
2008.2
Tabelas Temporrias
Cuidado com a duplicao do nome da tabela temporria durante a criao! Se acontecer, teremos uma situao de erro S utilize tabelas temporrias quando necessrio!
Utilizao exige gravao em disco baixa performance