Pode ser que você trabalhe com os bancos de dados da Oracle por muitos anos e nunca se depare com os operadores oracle ALL, ANY e SOME em SQL. Isso porque existem alternativas a eles que são usadas com mais regularidade. Mas, se você pretende fazer a certificação da Database da Oracle – SQL Expert (1Z0-047), você vai precisar saber sobre essas condições e como elas são usadas.
E tudo o que você precisa saber para esse exame é o uso e as características comparativas destas condições. E é isso que vamos falar nesse artigo, que também vai incluir informações sobre as transformações que o otimizador faz ao processá-las.
Vale ressaltar que essa informação extra não é uma exigência da certificação, mas, de alguma maneira, ela vai explicar porque você raramente vê pessoas usando os operadores.
Cada uma das instruções SQL será executada contra a tabela “SCOTT.EMP” para mostrar as transformações equivalentes.
Operador Oracle ALL
A condição de comparação ALL é usada justamente para comparar um valor à uma lista ou subconsulta. Ele deve ser precedido por =, !=, >, <, <=, >= E sempre seguidos por uma palavra que vai ser consultada. Quando a condição ALL é seguida por uma lista, o otimizador expande a condição inicial para todos os elementos da lista e os codifica em conjunto com os operadores AND, conforme mostrado abaixo.
Quando a condição ALL é seguida por uma subconsulta, o otimizador executa uma transformação de dois passos como mostrado abaixo.Supondo que as consultas retorne sem resposta, as seguintes declarações podem ser feitas para as novas versões:
- X = ALL (…): O valor deve corresponder a todos os valores da lista para avaliar como TRUE;
- X! = ALL (…): O valor não deve corresponder a nenhum valor na lista para avaliar como TRUE;
- X> ALL (…): O valor deve ser maior do que o maior valor na lista para avaliar como TRUE;
- X <ALL (…): O valor deve ser menor que o menor valor na lista para avaliar como TRUE;
- X> = ALL (…): O valor deve ser maior ou igual ao maior valor na lista para avaliar como TRUE;
- X <= ALL (…): O valor deve ser menor ou igual ao menor valor na lista para avaliar como TRUE.
Se ainda assim a consulta retornar sem respostas, a condição é avaliada como TRUE. No exemplo a seguir, a consulta retornou sem resposta, o que significa que a expressão inteira “sal> ALL (zero linhas) “é avaliada como TRUE, portanto, todas as linhas são exibidas.
Operador Oracle ANY
A condição de comparação ANY é usada para comparar um valor a uma lista ou consulta. Ele deve ser precedido por: =, !=, >, <, <=, >= E seguidos por uma lista ou consulta também.Quando a condição ANY é seguida por uma lista, o otimizador expande a condição inicial para todos os elementos da lista e os codifica em conjunto com os operadores OR, conforme mostrado abaixo.
Quando a condição ANY é seguida por uma consulta, o otimizador executa uma única transformação como mostrado abaixo.
Supondo que as consultas não retornem com respostas, as seguintes instruções podem ser feitas para as versões de lista e consulta:·
- X = ANY (…): O valor deve corresponder a um ou mais valores na lista para avaliar como TRUE;·
- X != ANY (…): O valor não deve corresponder a um ou mais valores na lista para avaliar como TRUE;·
- X > ANY (…): O valor deve ser maior que o menor valor na lista para avaliar como TRUE;·
- X < ANY (…): O valor deve ser menor que o maior valor na lista para avaliar como TRUE;·
- X> = ANY (…): O valor deve ser maior ou igual ao menor valor na lista para avaliar como TRUE;·
- X <= ANY (…): O valor deve ser menor ou igual ao maior valor na lista para avaliar como TRUE.
Se ainda assim a consulta retorna sem respostas, a condição é avaliada como FALSE. No exemplo a seguir, a consulta retorna sem resposta, o que significa que a expressão inteira “sal> ANY (zero linhas)” é avaliada como FALSE, portanto, nenhuma linha será exibida.
Operador Oracle SOME
SOME e ANY tem as mesmas condições de comparação e fazem exatamente a mesma coisa, por isso, são completamente intercambiáveis.
Agora eu te convido a me falar o que você achou desse artigo, deixa um comentário logo abaixo me falando isso. Fico no aguardo do seu comentário para que possamos conversar mais sobre o assunto.
Obs: Este artigo foi baseado neste ótimo artigo em inglês da Oracle-Base
Link permanente
Muito bom o artigo, o conteúdo tem me ajudado bastante, obrigado Willian
Link permanente
Oi Diego,
Que ótimo, ficamos realmente muito felizes de ter te ajudado com o artigo e fique atento aos nossos emails, em breve enviaremos mais novidades.
abs
William Miranda
Link permanente
Muito obrigado, interessante artigo. Foi traduzido do https://oracle-base.com/articles/misc/all-any-some-comparison-conditions-in-sql ?
Link permanente
Oi Daniel,
Foi baseado nele sim, já inclusive colocamos a referência que tínhamos esquecido de colocar
abs
William Miranda
Link permanente
Muito bom o artigo!!
Link permanente
Oi Fernando, muito obrigado!
Ficamos muito felizes que você tenha gostado!
abs
William Miranda
Link permanente
Ótimo conteúdo como sempre, estou me familiarizando cada vez mais, desta forma terei menos esforços para compreender as aulas da faculdade.
Link permanente
Oi Gilis, tudo bem?
Ficamos muito felizes mesmo com a sua mensagem e esperamos que os próximos conteúdos te ajudem mais ainda a crescer profissionalmente.
abs
William Miranda