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

      Olaa,

      Estava estudando subquerys e me deparei com os operadores ANY e ALL, não entendi direito os operadores citados, segue a abaixo as dúvidas:

      1) ALL:

      a) No exemplo abaixo a subquery irá retornar um conjunto de dados, que correspondem a todos os ‘min_salary’ de da tabela ‘jobs’, se eu retirar o operador ALL um erro é gerado, porque só devo trabalhar com um único valor para atender ao select principal, posso afirmar que o operador ALL irá retornar o MAIOR valor dessa subquery para que o select possa ser executado sem erro ? Como realmente funciona o operador ALL ?

      SELECT first_name,
      last_name,
      email
      FROM employees
      WHERE salary > ALL (SELECT min_salary FROM jobs);

      2) ANY:

      a) No exemplo abaixo a subquery irá retornar um conjunto de dados, que correspondem a todos os ‘min_salary’ de da tabela ‘jobs’, se eu retirar o operador ANY um erro é gerado, porque só devo trabalhar com um único valor para atender ao select principal, posso afirmar que o operador ANY irá retornar o MENOR valor dessa subquery para que o select possa ser executado sem erro ? Como realmente funciona o operador ANY ?

      SELECT first_name,
      last_name,
      email
      FROM employees
      WHERE salary > ANY (SELECT min_salary FROM jobs);

      Desde Já, Agradeço.

      #98936
      burga
      Participante

        [quote=”drigo”:1v7j80qx]1) ALL:

        a) …posso afirmar que o operador ALL irá retornar o MAIOR valor dessa subquery para que o select possa ser executado sem erro ? Como realmente funciona o operador ALL ?

        SELECT first_name,
        last_name,
        email
        FROM employees
        WHERE salary > ALL (SELECT min_salary FROM jobs);[/quote]
        O ALL não irá retornar o maior valor. Ele irá retornar todos os valores da subconsulta normalmente.
        Assim, a consulta vai comparar o salary com os valores retornados de min_salary da subconsulta e,
        caso o salary for MAIOR DO QUE TODOS os valores (dado pelo operador “>”), retorna a linha, senão não.

        [quote=”drigo”:1v7j80qx]2) ANY:

        a) …posso afirmar que o operador ANY irá retornar o MENOR valor dessa subquery para que o select possa ser executado sem erro ? Como realmente funciona o operador ANY ?

        SELECT first_name,
        last_name,
        email
        FROM employees
        WHERE salary > ANY (SELECT min_salary FROM jobs);[/quote]
        Mesma idéia do ALL, mas ao invés de ser MAIOR DO QUE TODOS, é MAIOR DO QUE QUALQUER UM DELES.

        Ou seja, apesar de ter lógica a sua pergunta, você não pode afirmar o que perguntou se pode afirmar
        1) ALL = TODOS, então (> ALL) = MAIOR DO QUE TODOS
        2) ANY = QUALQUER UM, então (> ANY) = MAIOR DO QUE QUALQER UM

        Bem intuitivo… Sem segredos, sem mágica…
        só estude o comportamento do ALL e ANY com valores NULOS também, pra não ser pego de surpresa…

        #98993
        drigo
        Participante

          Muito obrigado, consegui entender perfeitamente.

          grande abraço.

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