Baixe o app para aproveitar ainda mais
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;
Compartilhar