Pular para o conteúdo
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #98934
    drigo
    Participante

      Olaa,

      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.

      #98935
      burga
      Participante

        Está 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.

        #98985
        drigo
        Participante

          Olaa,

              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.

          #98988
          burga
          Participante

            Isso 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.

            #99166
            drigo
            Participante

              Olaa,

                      Muito obrigado pela atenção, minha dúvida foi sanada.
              

              Abraço a todos.

            Visualizando 5 posts - 1 até 5 (de 5 do total)
            • Você deve fazer login para responder a este tópico.