2008.1
SQL - Consultas
2008.1
Manipulando Dados
CONSULTA
SELECT
INCLUSÃO
INSERT
ALTERAÇÃO
UPDATE
EXCLUSÃO
DELETE
2008.1
Consultas SQL
• Realização de consultas em tabelas
SELECT atributo1, atributo2, ...
FROM tabela 1, tabela 2, ...
WHERE condição
2008.1
Consultas SQL
Select
Especifica as colunas e expressões
resultado da consulta.
exibidas no
From
Especifica as tabelas que contêm os dados exibidos nos
resultado da consulta.
Where
Especifica as condições usadas para filtrar registros no
resultado da consulta.
Order
by
Classifica os resultados da consulta com base nos
dados de uma ou mais colunas.
Group
By
Agrupa as linhas da consulta com base nos valores de
uma das colunas.
Having
Especifica
as
condições
usadas
para
filtrar
agrupamentos de dados no resultado da consulta. Só
deve ser usado com GROUP BY.
2008.1
Consultas SQL
• Exibir todos os dados de todos os clientes.
SELECT * FROM cliente
• Exibir todos os dados de todos os funcionários.
SELECT * FROM funcionário
• Exibir todos os dados de todos os produtos.
SELECT * FROM produto
2008.1
Selecionando Colunas
• Exibir código, nome e telefone de todos os clientes.
SELECT código, nome, fone FROM cliente
• Exibir código, nome, estado civil e data de nascimento de
todos os funcionários.
SELECT código, nome, estcivil, datanasc
FROM funcionário
• Exibir código, nome, preço de custo e preço de venda de
todos os produtos.
SELECT código, nome, custo, venda
FROM produto
2008.1
Eliminando Duplicação na Seleção
• Sintaxe:
SELECT DISTINCT <lista de colunas> FROM <tabela>
• Exibir o código de todos os clientes que já fizeram pedido
na empresa.
SELECT DISTINCT cliente FROM pedido
• Exibir todos os bairros com os respectivos códigos da cidade
dos funcionários da empresa.
SELECT
DISTINCT
bairro,
cidade
FROM
funcionário
• Exibir o código de todos os tipos de produtos existentes na
empresa.
SELECT DISTINCT cod FROM produto
2008.1
Exibir colunas calculadas
• Sintaxe:
SELECT
<lista
<tabela>
de
colunas,expressão>
FROM
• Exibir código, quantidade em estoque, preço de venda e
valor total (quantidade X preço de venda) para cada
produto.
SELECT código, quantest, venda, ‘ValorTotal’ =
quantest*venda
FROM produto
• Exibir código, nome, salário e o salário com 32% de
aumento para todos os funcionários.
SELECT código, nome, salário,
‘Novosalário’=salário*1.32
FROM funcionário
2008.1
Exibir colunas calculadas
• SUM – função que soma valores de um
atributo
SELECT SUM(salario) FROM clientes
• AVG – função que calcula a média dos
valores de um atributo
SELECT AVG(salario) FROM clientes
• MAX – função que exibe o maior valor de um
atributo
SELECT MAX(salario) FROM clientes
2008.1
Exibir colunas calculadas
• MIN – função que exibe o menor valor de um atributo
SELECT MIN(salario) FROM clientes
• AS – usado para dar nome a uma coluna resultante do
uso de uma função agregada (COUNT, SUM, AVG, MAX,
MIN, etc)
SELECT AVG(salario) AS media_salarial
FROM clientes
2008.1
Exibir colunas calculadas
• Exibir a soma de todos os salários da empresa.
SELECT SUM(salário)
FROM funcionário
• Exibir a média dos salários da empresa.
SELECT AVG(salário)
FROM funcionário
• Exibir o preço médio de venda dos produtos do tipo
1
SELECT AVG(venda)
FROM produto WHERE tipo=1
2008.1
Exibir colunas calculadas
• Exibir o preço do produto mais caro vendido na empresa.
SELECT MAX(venda) Preço FROM produto
• Exibir a data de nascimento do homem mais novo da
empresa.
SELECT
MIN(datanasc)
FROM
funcionário
WHERE sexo=‘M’
• Exibir o maior salário pago a uma funcionária.
SELECT MAX(salário) FROM funcionário
WHERE sexo=‘F’
• Exibir o menor preço de custo dos produtos do tipo 1.
SELECT MIN(custo) FROM produto WHERE tipo =
1
2008.1
Contando os Registros
• Exibir quantos clientes têm cadastro na empresa.
SELECT COUNT(*) FROM cliente
• Exibir quantos funcionário têm e_mail.
SELECT COUNT(e_mail) FROM funcionário
• Exibir a quantas cidades a empresa atende.
SELECT COUNT(DISTINCT cidade)
FROM cliente
• Exibir quantos vendedores já atenderam pedido.
SELECT COUNT(DISTINCT vendedor)
FROM pedido
2008.1
Cláusula From
• Selecionar dados de uma única tabela
SELECT nome FROM clientes
• Para cruzar dados que estão em tabelas diferentes, é
preciso listar as tabelas na cláusula FROM e usar o
mesmo princípio da operação produto cartesiano da
álgebra relacional para selecionar apenas as linhas com
códigos correspondentes
SELECT nome, cod_f, data
FROM locacoes, clientes
WHERE locacoes.cod_c = clientes.cod_c
2008.1
Cláusula From
• Para atributos que possuem o mesmo nome em mais
de uma tabela, é preciso incluir o nome da tabela
antes do nome do atributo
SELECT clientes.cod_c
FROM locacoes, clientes
WHERE locacoes.cod_c = clientes.cod_c
• É possível definir apelidos para as tabelas e usá-los
em vez dos nomes das tabelas
SELECT C.cod_c
FROM locacoes L, clientes C
WHERE L.cod_c = C.cod_c
2008.1
Cláusula Where
• Os operadores <, <=, >, >=, =, <> podem ser
usados para testar valores de atributos
SELECT * FROM clientes WHERE salario > 100
SELECT * FROM fitas WHERE titulo = ‘Matrix’
• Os operadores lógicos AND, NOT, OR podem ser
usados para combinar condições
SELECT * FROM clientes
WHERE salario > 100 AND sexo = ‘F’
2008.1
Cláusula Where
• BETWEEN – usado para verificar se o valor de um
atributo está em um intervalo de valores
 dados dos clientes com salário entre 500 e 1500
SELECT * FROM clientes
WHERE salario BETWEEN 500 AND 1500
• IN – usado para verificar se o valor de um atributo está
em um conjunto de valores
 dados dos clientes com salário igual a 500 OU
1500
SELECT * FROM clientes
WHERE salario IN (500,1500)
2008.1
Operando strings
• Exibir código e nome de todos os funcionários que
tenham o nome começando por “M”
SELECT código, nome FROM funcionário
WHERE nome LIKE ‘M%’
• Exibir código e nome de todos os funcionários que
tenham o nome terminando por “Silva”
SELECT código, nome FROM funcionário
WHERE nome LIKE ‘%Silva’
2008.1
Cláusula Where
• Exibir código e nome de todos os funcionários que
tenham “Costa” em qualquer parte do nome.
SELECT código, nome FROM funcionário
WHERE nome LIKE ‘%Costa%’
• Exibir código e nome de todos os funcionários que
tenham o nome começando por “Mar” seguido de
um caractere qualquer e terminando por “a”
SELECT código, nome FROM funcionário
WHERE nome LIKE 'Mar_a%'
2008.1
Ordenando os resultados
• Sintaxe:
SELECT <lista de colunas> FROM <tabela>
ORDER BY <coluna> [ASC] [DESC]
• Exibir código, nome e telefone de todos os clientes,
ordenados pelo nome do cliente em ordem ascendente.
SELECT código, nome, fone FROM cliente
ORDER BY nome
• Exibir código, nome, estado civil e data de nascimento de
todos os funcionários, ordenados pela data de nascimento
em ordem descendente.
SELECT código, nome, estcivil, datanasc
FROM funcionário
ORDER BY datanasc DESC
2008.1
Ordenando os resultados
• Exibir código, nome e tipo de todos os
produtos existentes na empresa, ordenados
pelo tipo em ordem ascendente e pelo
nome do produto em ordem descendente.
SELECT código, nome, tipo
FROM produto
ORDER BY nome DESC
2008.1
Agrupando Informações
• Sintaxe:
SELECT <lista de colunas> FROM <tabela>
GROUP BY <coluna> HAVING <condição>
• Exibir a quantidade de homens e mulheres da empresa.
SELECT sexo, COUNT(*) Quantidade
FROM funcionário GROUP BY sexo
• Exibir a quantidade de funcionários e o total e salários de
cada setor da empresa.
SELECT setor, COUNT(*) Funcionários,
SUM(salário)Total FROM funcionário
GROUP BY setor
2008.1
Consultas com várias tabelas
• Exibir o código de cada pedido e o nome do
cliente que realizou cada um deles.
SELECT
pedido.código,
cliente.nome
FROM pedido, cliente
WHERE cliente.código = pedido.cliente
2008.1
Consultas com várias tabelas
• Exibir o nome do setor, nome do funcionário, salário
e função exercida por cada funcionário, ordenados
pelo nome do setor
SELECT s.nome, f.nome , f.salario, fu.funcao
FROM setor s, funcionario f, funcao fu
WHERE s.sigla = f.setor and f.função =
fu.código
ORDER BY f.nome
2008.1
Sub-Consultas
• Uma sub-consulta é uma consulta cujo
resultado é utilizado por uma outra consulta
mais externa, de forma encadeada e contida
no mesmo comando SELECT.
• A consulta mais externa depende da
avaliação da sub-consulta.
2008.1
Sub-Consultas
• Quando há necessidade de cruzar informações de
duas ou mais tabelas, além do produto cartesiano,
pode-se usar as sub-consultas
• Ou seja, uma consulta mais interna retorna
parâmetros para a execução de uma consulta mais
externa
 Nome de todos os clientes que realizaram locações
SELECT nome
FROM clientes
WHERE cod_c IN (SELECT cod_c FROM locacoes)
2008.1
Sub-Consultas
• Exibir o código, o nome e a quantidade em
estoque do produto que tem a maior
quantidade em estoque da empresa.
SELECT código, nome, quantest
FROM produto
WHERE quantest = (SELECT MAX
(quantest)
FROM produto)
2008.1
Sub-Consultas
• Exibir o código, o nome e o telefone dos clientes
estrangeiros.
– Usando sub-consulta
SELECT código,nome,fone FROM cliente
WHERE cidade IN
(SELECT código FROM
cidade WHERE país <> ‘BRA’)
• Usando Junção
SELECT c.código,c.nome,c.fone
FROM cliente c, cidade ci
WHERE ci.código = c.cidade and ci.país <> ‘BRA’
2008.1
Sub-Consultas
• Exibir o código, o nome e o preço de venda de todos os produtos
que não sejam do tipo “Bebidas” ou “Condimentos”.
– Usando
sub-consulta
SELECT código, nome, venda
FROM produto
WHERE código not IN (SELECT código FROM tipo WHERE
nome IN (‘Bebidas’,’Condimentos’))
– Usando Junção
SELECT p.código,p.nome,p.venda
FROM produto p tipo t
WHERE p.tipo=t.código and t.nome not IN
(‘Bebidas’,’Condimentos’)
Download

SELECT * FROM cliente