Vous êtes sur la page 1sur 4

Tutorial SQL

Seu guia prtico para execuo de


consultas Parte final
Reinaldo Viana
Prezado Leitor, nesta ltima parte do tutorial SQL, estudaremos consultas envolvendo
funes de agregao, alm da elaborao de subconsultas.
Tenha uma tima leitura!

Exemplo 01: Listar a quantidade de clientes.


Resposta:
SELECT COUNT(*)
FROM CLIENTE
Comentrio: o comando count serve para contabilizar o nmero de linhas de uma
consulta. No exemplo, count(*) retornou o nmero de linhas da tabela CLIENTE que,
nesse contexto, representa o nmero de clientes.
Exemplo 02: Listar a quantidade de clientes do sexo feminino.
Resposta:
SELECT COUNT(*)
FROM CLIENTE
WHERE sexo=feminino
Comentrio: trata-se de uma soluo semelhante do exemplo 1. Apenas foi
adicionada a clusula WHERE com um filtro que recupera as linhas correspondentes s
pessoas do sexo feminino (sexo=feminino).
Exemplo 03: Obter a mdia de salrio dos clientes.
Resposta:
SELECT AVG(salario)
FROM CLIENTE
Comentrio: esta uma soluo simples. Bastou a utilizao da funo que calcula a
mdia (avg) a partir de um conjunto de valores (neste caso, o campo salrio da tabela
CLIENTE). Uma alternativa pode ser vista na Nota 1.
Nota 1. Renomeando campos em consultas
possvel renomear virtualmente qualquer coluna resultante de uma consulta. Este
procedimento til para deixar o cdigo mais organizado e coerente. Dessa forma,
possvel reescrever a soluo do Exemplo 03 da seguinte maneira:
SELECT AVG(salario) as MediaSalarial

FROM CLIENTE

Exemplo 04: Obter a mdia salarial por sexo.


Resposta:
SELECT sexo, AVG(salario) as MediaSalarialSexo
FROM CLIENTE
GROUP BY sexo
Comentrio: esta soluo semelhante do exemplo 10. Aqui, foi adicionado o campo
(sexo) na clusula GROUP BY para que o resultado fosse calculado para o sexo
masculino e para o feminino.
Exemplo 05: Mostrar, em uma linha, a quantidade de clientes do sexo masculino e a
quantidade de clientes do sexo feminino.
Resposta:
SELECT
(SELECT COUNT(*) FROM CLIENTES WHERE sexo=masculino) AS
QtdeHomens,
(SELECT COUNT(*) FROM CLIENTES WHERE sexo=feminino) AS QtdeMulheres
Comentrio: o interessante desta soluo que podemos exibir resultados, dos mais
simples aos mais complexos, em uma nica linha. Para isso, basta declarar um SELECT
principal separando, em seguida, por vrgula, cada subconsulta que gera determinada
informao.
Praticando subconsultas
No dia-a-dia, os desenvolvedores codificam consultas que no dependem diretamente
de alguma tabela, mas do resultado de uma ou de diversas consultas. Este
procedimento comumente chamado de subconsulta. Na prtica, o SGBD realiza a
subconsulta e o resultado serve como parmetro de entrada para a consulta principal.
Observe os exemplos de 06 a 07.
Exemplo 06: Obter o nome dos clientes que no possuem telefone.
Note que para sabermos o nome dos clientes sem telefone, necessrio termos
certeza de que no existe ocorrncia do cdigo do cliente na tabela FONE. Em
situaes desse tipo, pode-se utilizar o operador (not) in. Observe:
SELECT nome
FROM CLIENTE
WHERE codigo not in
(SELECT codigo
FROM FONE)
Comentrio: neste caso, o SGBD primeiramente recupera os cdigos dos clientes da
tabela FONE (SELECT cdigo FROM FONE). Este resultado serve como parmetro de
entrada para a consulta principal, que recupera apenas os clientes sem telefone
(clientes cujo cdigo no aparece na subconsulta).

Exemplo 07: Obter o nome e o salrio dos clientes que ganham mais que a mdia
salarial masculina.
SELECT nome, salario
FROM CLIENTE
WHERE salario >
(SELECT avg(salario)
FROM CLIENTE
WHERE SEXO=MASCULINO)
Comentrio: aqui, o SGBD primeiramente calcula a mdia salarial dos clientes do sexo
masculino (subconsulta). O resultado comparado com o salrio de cada cliente,
sendo retornadas apenas as informaes dos que ganham mais que a mdia salarial
masculina.
Exemplo 08: Listar o(s) cliente(s) que ganha(m) o maior salrio.
Resposta:
SELECT nome
FROM CLIENTE
WHERE salario =
(SELECT max(salario)
FROM CLIENTE)
Comentrio: neste caso, o SGBD calcula o maior salrio atravs da utilizao do
operador max na subconsulta (SELECT max(salrio) from CLIENTE). Este resultado
comparado com o salrio de cada cliente, sendo exibidos apenas os que ganham o
correspondente ao maior salrio.
Exemplo 09: Verificar quantos clientes ganha(m) mais que o(s) cliente(s) de menor
salrio.
Resposta:
SELECT count(*) as QteCliente
FROM CLIENTE
WHERE salario >
(SELECT min(salario)
FROM CLIENTE)
Comentrio: aqui, a subconsulta recupera o menor salrio da tabela CLIENTE. Este
salrio serve como parmetro de comparao para a consulta principal, que contabiliza
o nmero de clientes que ganham mais que este salrio.
Exemplo 10: Listar o nome e o sexo do cliente mais novo.
Resposta:
SELECT nome, sexo
FROM CLIENTE
WHERE nascimento =
(SELECT max(nascimento)

FROM CLIENTE)
Comentrio: observe que neste caso a subconsulta recupera a maior (mais recente)
data de nascimento, dentre as cadastradas na tabela CLIENTE. Este resultado serve
como parmetro de entrada para a consulta principal, que retorna o cliente mais novo
(podendo ser mais de um cliente).
Exemplo 11: Listar o nome do cliente mais velho.
Resposta:
SELECT nome, sexo
FROM CLIENTE
WHERE nascimento =
(SELECT min(nascimento)
FROM CLIENTE)
Comentrio: de forma semelhante ao exemplo 10, a subconsulta recupera a data de
nascimento mais antiga. Neste caso, o cliente que tiver nascido nesta data, o que
aparecer no resultado (podendo ser mais de um cliente).
Concluses
Estudamos neste tutorial os componentes da estrutura utilizada pelos SGBD para o
armazenamento dos dados (tabela). Aprendemos que as tabelas so relacionadas
atravs do mecanismo conhecido por chave estrangeira. Vimos tambm uma sintaxe
SQL para consulta aos dados armazenados em um banco de dados, consolidando o
aprendizado atravs de diversos exemplos.
Espero ter contribudo para seu aprendizado!