Arquivo da tag: and

Precedência Envolvendo Operadores Lógicos

Quando utilizamos predicados conectados por operadores lógicos AND e OR precisamos observar que OR funciona como adição e AND como multiplicação. Portanto AND tem mais “força” que OR.

O Exemplo (i) apresenta uma consulta possuindo três predicados e dois operadores lógicos .


SELECT nome ,
to_char(dt_nascimento,’dd/mm/yyyy’) Nascimento,
pais_origem
FROM profissional_cinema
WHERE pais_origem = ‘Inglaterra’ — primeiro predicado
OR nome LIKE ‘J%’ — segundo
AND extract(YEAR FROM dt_nascimento) < 1950 — terceiro
ORDER by 3,1
NOME NASCIMENTO PAIS_ORIGEM
—————————— ———- ——————-
Jeannot Szwarc 21/11/1939 França
Julie Christie 14/04/1941 India
Emma Thompson 15/04/1959 Inglaterra
James Mason 15/05/1909 Inglaterra
Jane Seymour 15/02/1951 Inglaterra
Jeremy Irons 19/09/1948 Inglaterra
Kenneth Branagh 10/12/1960 Inglaterra
Kiefer Sutherland 21/12/1966 Inglaterra

8 rows selected


Exemplo (i):  consulta possuindo um predicado

Perceba que há ingleses cujo nome NÃO começa por J (ex: Emma Thompson), assim como há ingleses que nasceram DEPOIS de 1950. Desta forma, podemos interpretar a relação de predicados da seguinte maneira:

  • Inicialmente separe os ingleses e guarde-os no Conjunto 1;
  • A seguir, monte o Conjunto 2 e acrescente-lhe os profissionais de cinema cujo nome comece pela letra J e tenham nascido antes de 1950;
  • Como resultado final, faça a união entre os Conjuntos 1 e 2.

Concluindo, o fato de existir um AND após um OR fez com que este fosse processado depois.
Analogamente, a expressão:

5 + 3 x 4

Primeiro resolve-se a multiplicação (equivalente ao AND) e só depois a soma (OR).
Assim como na matemática, para mudar tal comportamento, usamos parênteses. Veja o que muda no Exemplo (ii)


SELECT nome ,
to_char(dt_nascimento,’dd/mm/yyyy’) Nascimento, pais_origem
FROM profissional_cinema
WHERE (pais_origem = ‘Inglaterra’
OR nome LIKE ‘J%’)
AND extract(YEAR FROM dt_nascimento) < 1950
ORDER BY 3,1;

NOME NASCIMENTO PAIS_ORIGEM
—————————— ———- ——————
Jeannot Szwarc 21/11/1939 França
Julie Christie 14/04/1941 India
James Mason 15/05/1909 Inglaterra
Jeremy Irons 19/09/1948 Inglaterra

4 rows selected


Exemplo (ii): Consulta onde mudamos a regra de precedência

 No Exemplo (ii), inicialmente foi criado um conjunto possuindo profissionais de cinema nascidos na Inglaterra ou que tenham seu nome começando por J. Neste conjunto, retiramos aqueles que não tenham nascido antes de 1/1/1950.