3
respostas

Dúvida sobre correção

Boa tarde amigos..

Gostaria de saber se da maneira abaixo, sem o uso dos parênteses no OR, estaria correto. Segue :

SELECT * FROM Compras WHERE (valor >= 1000 AND  valor <= 3000) OR valor > 5000 ;

Gostaria saber se de fato é necessário o uso dos parênteses em todos os operadores, uma vez que os parênteses servem para dar prioridade(corrijam-me caso esteja incorreto)

Obrigado desde já !

3 respostas

Boa tarde Ednaldo,

Dessa forma você está fazendo primeiro o intervalo entre 1000 e 3000 e comparando esse intervalo a 5000.

quando você coloca algo dentro dos parênteses significa que será executado primeiro da esquerda para a direita

Boa tarde Guilherme !

Então o correto de fato é utilizar parênteses em todas as operações com operadores diferentes ?

Por exemplo :

(X > 5 AND X < 10) OR ( X > 20)

Dessa maneira que coloquei na dúvida, está de fato incorreto ? Pois seria como você falou...primeiro verificaria a condição (valor >= 1000 AND valor <= 3000), e se não fosse verdadeira, verificaria a segunda condição OR valor > 5000

A minha dúvida é se justamente deveria utilizar os parênteses no valor > 5000 neste caso, uma vez que a condição é simples

Obrigado

Ednaldo,

Quando discutimos sobre lógica (operadores lógicos no nosso caso), existe a precedência de operadores. As operações feitas utilizando o operador AND possuem prioridade (precedência) sobre as operações OR, ou seja, as operações AND serão executadas antes, a menos que a operação OR esteja dentro de parênteses:

Na operação que você postou: (X > 5 AND X < 10) OR ( X > 20)

o AND será executado primeiro, independente dos parênteses, gerando o mesmo resultado que X > 5 AND X < 10 OR X > 20.

Já a operação (X > 5) AND (X < 10 OR X > 20) retornaria um resultado diferente.