- Este tópico contém 2 respostas, 2 vozes e foi atualizado pela última vez 14 anos, 10 meses atrás por
drigo.
-
AutorPosts
-
21 de abril de 2011 às 9:45 pm #98933
drigo
ParticipanteOlaa,
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.
22 de abril de 2011 às 12:41 am #98936burga
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 UMBem 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…27 de abril de 2011 às 9:04 pm #98993drigo
ParticipanteMuito obrigado, consegui entender perfeitamente.
grande abraço.
-
AutorPosts
- Você deve fazer login para responder a este tópico.