DBA Essencial

Um canal aberto com meus leitores!

Precedência Envolvendo Operadores Lógicos

Este post visa complementar um assunto apresentado no terceiro capítulo do livro Oracle DBA Essencial – Vol. I – SQL, com vistas à prova de certificação IZO-051. Portanto, pressupõe-se que o leitor já leu o referido capítulo. Também assume-se que exista um esquema possuindo tabelas e dados populados pelo arquivo de apoio 00_Monta_Ambiente_Locadora.sql (presente nos arquivos de apoio do Vol. I).

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 3.1 apresenta uma consulta possuindo três predicados e dois operadores lógicos .

SQL> 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 3.1: 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 3.2

SQL> 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 3.2: Consulta onde mudamos a regra de precedência

No Exemplo 3.2, 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.

No comments Digg this

Seja Bem-vindo!

Capa

A ideia deste blog é criar um canal com meus leitores. Inicialmente, vou postar pequenos textos que complementem algum tema abordado na Trilogia (por enquanto, só temos o Volume I). Então, mais uma vez, seja bem-vindo e tomara que você goste!

No comments Digg this