› Fóruns › SQL e PL/SQL › Dúvida sobre Correlated Subquery.
- Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 15 anos atrás por
drigo.
-
AutorPosts
-
21 de abril de 2011 às 9:46 pm #98934
drigo
ParticipanteOlaa,
Estava estudando sobre correlated subqueries, consegui entender que se a subquery possuir alguma referência a alguma coluna
da query mais externa, irá ser criado um nível de dependência com a query mais externa, e que é ímpossível a subquery ser evoluida antes de
evoluir a query mais externa. Mas a seguinte afirmação me deixou com dúvida “A correlated subquery is executed once for every row in the outer query”, que quer dizer que a subquery correlata é executada uma vez para cada linha na query mais externa, mas porque isso acontece ?? e se a subquery possuir um conjunto de valores de menor quantidade que a query mais externa ??Segue abaixo o exemplo para uma melhor visualização.
select p.last_name, p.department_id from employees p
where p.salary < (select avg(s.salary) from employees s where s.department_id=p.department_id); Desde já, Agradeço.22 de abril de 2011 às 12:27 am #98935burga
ParticipanteEstá estudando pra certificação neh?? 😀 Isso aí você tem que imaginar como um loop aninhado, no estilo:
for query loop
for subquery loop
end loop;
end loop;ou seja, pra cada linha da query (consulta externa) a subquery (consulta interna) sera executada. Justamente por causa dessa correlação entre as duas consultas, ou seja, dependência da consulta interna (subconsulta) com a linha da externa, dada pela condição s.department_id=p.department_id do seu exemplo.
Se a correlação não existir, então o inverso que ocorre, e a consulta externa é executada no loop interno.
27 de abril de 2011 às 3:07 pm #98985drigo
ParticipanteOlaa,
Estou sim, consegui entender, muito obrigado, mas me veio outra dúvida:a) O uso de subquery correlata irá exigir um maior processamento por parte do banco do que o uso de uma subquery normal ?
Novamente Muito obrigado.
27 de abril de 2011 às 6:22 pm #98988burga
ParticipanteIsso depende!!! Isso varia pra cada ambiente…
Se não tem correlação entre as duas consultas, então a subconsulta é executada no loop de fora.
O melhor a fazer é sempre tentar fazer com que a consulta do loop externo seja a que retorna menos registros, desta forma, a consulta do loop interno também será executada menos vezes.
11 de maio de 2011 às 9:26 pm #99166drigo
ParticipanteOlaa,
Muito obrigado pela atenção, minha dúvida foi sanada.Abraço a todos.
-
AutorPosts
- Você deve fazer login para responder a este tópico.
› Fóruns › SQL e PL/SQL › Dúvida sobre Correlated Subquery.