Conceitos
Quando o DB2 interpreta condições compostas, segue uma ordem específica. Em primeiro lugar ele avalia os operadores NOT que precedem os predicados individuais. Em seguida ele avalia os predicados que estão conectados por ANDs. Por fim avalia os predicados que estão conectados por ORs. Se necessário modificar esta ordem pode-se utilizar parênteses para alterar a sequencia de avaliações.
Exemplos
Condiçao composta sem parênteses para recuperar clientes de New Jersey ou New York cujos sobrenomes iniciem com GR.
SELECT | FNAME, LNAME, CITY, STATE, ZIPCODE |
FROM PW0001.CUSTOMER | |
WHERE STATE = 'NJ' |
|
OR CITY LIKE 'NEW YORK%' |
|
AND LNAME LIKE 'GR%' |
Este exemplo recupera todos os clientes de NJ independente do nome por que o DB2 processa o AND antes do OR.
Mesma condição composta com parênteses.
SELECT | FNAME, LNAME, CITY, STATE, ZIPCODE |
FROM PW0001.CUSTOMER | |
WHERE (STATE = 'NJ' OR CITY LIKE 'NEW YORK%') |
|
AND LNAME LIKE 'GR%' |
O DB2 resolve em primeiro lugar as condições entre parênteses e depois as condições externas aos parênteses.
Condição composta com operador NOT negando o primeiro predicado.
SELECT | EMPNO, HIREDATE, SALARY |
FROM PW0001.EMPLOYEE | |
WHERE NOT (SALARY >= 5000) AND (HIREDATE > '2008-01-01') |
Condição composta com operador NOT negando os dois predicado.
SELECT | EMPNO, HIREDATE, SALARY |
FROM PW0001.EMPLOYEE | |
WHERE NOT (SALARY >= 5000 AND HIREDATE > '2008-01-01') |
Condição composta reescrita para eliminar o operador NOT.
SELECT | EMPNO, HIREDATE, SALARY |
FROM PW0001.EMPLOYEE | |
WHERE NOT (SALARY >= 5000) AND (HIREDATE > '2008-01-01') |
Quando se utiliza parênteses as condições dos parênteses mais internos são avaliadas primeiro, seguidas das condições mais externas.
Utiliza-se parênteses para clarificar as avaliações de condições compostas.
Em geral evita-se o uso de NOT para tornar o entendimento mais fácil.