Buscar

Consultas Aninhadas

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Consultas Aninhadas
SQL
Profa MsC Josyane Lannes Florenzano de Souza
Consultas Aninhadas
O poder da linguagem SQL começa a aparecer quando na cláusula where usamos como operando de uma expressão booleana o resultado de um outro comando select (e que chamamos de consulta aninhada ou subconsulta).
Tabelas dos exemplos
Numj
Nome
Pnome
Pais
Ano_n
Ano_p
cid_n
cid_res
817
Courier
Jim
EUA
1970
1978
Sanford
Orlando
29
Agassi
Andre
EUA
1970
1986
LasVegas
LasVegas
19
Edberg
Stefan
SWE
1966
1983
Vastervik
Londres
16
Bruguera
Sergi
ESP
1971
1988
Barcelona
Barcelona
910
Kuerten
Gustavo
BRA
1976
1995
Florianopolis
Florianopolis
412
Meligeni
Fernando
BRA
1971
1990
Buenos Aires
São Paulo
Jogadores
Torneios
Numt
Ano
numj
premio
1
1992
817
278
2
1992
817
490
3
1992
29
501
4
1992
19
500
Consultas Aninhadas 
(com operador in)
Subconsultas com o operador in
Ex1: Obtenha o nome de cada jogador que venceu pelo menos um torneio
Select nome
From jogadores
Where numj in
 (select numj from torneios)
Consultas Aninhadas 
(mesmo exemplo sem operador in)
A consulta aninhada (entre parênteses) gera um conjunto de valores contendo o número de cada jogador que venceu torneios, e esse conjunto é usado pelo operador in.
Mesmo exemplo usando junção: Ex: Obtenha o nome de cada jogador que venceu pelo menos um torneio
Select distinct nome
From jogadores, torneios
Where jogadores.numj = torneios.numj
Obs: Observe que, como um jogador pode ter vencido vários torneios, necessitamos usar distinct na cláusula select, para evitar que o seu nome apareça mais de uma vez.
Consultas Aninhadas
Ex2: Obter os nomes dos jogadores que venceram uma ou mais vezes o torneio 1.
Select nome
From jogadores
Where numj in
 (select numj from torneios
 where numt = 1)
Exercícios
Qual o prêmio médio para jogadores que venceram o torneio 1?
2. Qual a diferença entre os comandos abaixo:
	Select avg (premio)
	From torneios
		e
	Select sum (premio)
	From torneios
Exercício resposta
Qual o prêmio médio para jogadores que venceram o torneio 1?
	Select avg (premio)
	From jogadores
	Where numj in
		(select numj from torneios
		Where numt = 1)
 
OU
	Select avg (premio)
	From torneios
	Where numt = 1
	
Operadores all e any em subconsultas
Ex: Obtenha o (s) nome (s) do (s) jogador (es) mais velho (s) que todos os outros jogadores.
	Select nome
	From jogadores
	Where ano_n <= all
	(select ano_n from jogadores)
Operadores all e any em suconsultas
Ex: Obtenha o nome de cada jogador que não pertence ao grupo dos mais velhos.
	Select nome
	From jogadores	
	Where ano_n > any
	(select ano_n from jogadores)
Revisão Having
Usa para especificar quais grupos serão exibidos, e desta forma, restringir ainda mais os grupos com base nas informações agregadas.
 
Função semelhante a cláusula WHERE, mas usa-se sempre que houver uma condição para uma função.
Ex1:
	Select cidade, count (cidade) AS totalCidade
	From empregados
	Group by cidade
	Having count (cidade) > 2
 
Revisão Having
Ex2:
	Select codigo_cargo, sum (salario)
	From empregados
	Group by codigo_cargo
	Having sum (salario) > 100000;

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando