Convenções para combinar critérios de pesquisa no painel de Critérios (Visual Database Tools)
Aplica-se a: SQL Server
Você pode criar consultas que incluam qualquer número de critérios de pesquisa, interligadas com qualquer número de operadores AND e OR. Uma consulta com uma combinação de cláusulas AND e OR pode se tornar complexa, então é útil entender como tal consulta é interpretada quando você a executa, e como tal consulta é representada no Painel Critérios e no Painel SQL.
Observação
Para obter detalhes sobre os critérios de pesquisa que contêm apenas um operador AND ou OR, confira Especificar vários critérios de pesquisa para uma coluna (Visual Database Tools) e Especificar vários critérios de pesquisa para várias colunas (Visual Database Tools).
Abaixo você achará informações sobre:
A precedência de AND e OR em consultas que contenham ambos.
Como as condições em cláusulas AND e OR se relacionam logicamente uma a outra.
Como os Designers de Consulta e Exibição representam nas consultas do Painel de Critérios que contenham ambos AND e OR
Para ajudá-lo a entender a discussão abaixo, imagine que está trabalhando com uma tabela employee
contendo as colunas hire_date
, job_lvl
, e status
. Os exemplos supõem que você precisa conhecer informações como quanto tempo um funcionário trabalha para a companhia (quer dizer, qual a data de contratação do funcionário), que tipo de tarefa que o funcionário executa (qual é o nível do emprego) e o estado do empregado (por exemplo, aposentado).
Precedência de AND e OR
Quando uma consulta é executada, ela primeiro avalia as cláusulas unidas com AND, e então aquelas unidas com OR.
Observação
O operador NOT tem precedência sobre AND e OR.
Por exemplo, para encontrar quais funcionários estão trabalhando para a empresa por mais de cinco anos em funções de níveis menores, ou funcionários com funções de níveis intermediários, sem levar em contar as suas datas de contratação, você pode construir uma cláusula WHERE como a seguinte:
WHERE
hire_date < '01/01/95' AND
job_lvl = 100 OR
job_lvl = 200
Para anular a precedência padrão de AND sobre OR, você pode pôr parênteses ao redor das condições específicas no painel SQL. As condições entre parênteses são sempre avaliadas em primeiro lugar. Por exemplo, para encontrar todos os funcionários trabalhando para a empresa por mais de cinco anos tanto em funções de nível inferior quanto de níveis intermediários, você pode construir cláusulas WHERE como nos exemplos seguintes:
WHERE
hire_date < '01/01/95' AND
(job_lvl = 100 OR job_lvl = 200)
Dica
É recomendado que, para uma maior clareza, você sempre inclua parênteses ao combinar cláusulas AND e OR em vez de confiar na precedência padrão.
Como AND trabalha com múltiplas cláusulas OR
Compreender como as cláusulas AND e OR são relacionadas quando combinadas pode ajudar você a construir e entender consultas complexas no Designer de Exibição e Consulta.
Se você vincular condições múltiplas que usam AND, o primeiro conjunto de condições vinculadas à AND se aplicará a todas as condições no segundo conjunto. Em outras palavras, uma condição vinculada à AND a outra condição é distribuída a todas as condições no segundo conjunto. Por exemplo, a representação esquemática seguinte mostra uma condição AND vinculada a um conjunto de condições OR:
A AND (B OR C)
A representação acima é logicamente equivalente à representação esquemática seguinte, que mostra como a condição AND é distribuída ao segundo conjunto de condições:
(A AND B) OR (A AND C)
Este princípio distributivo afeta como você usa o Designer de Consulta e Exibição. Por exemplo, imagine que você pretenda localizar todo os funcionários que trabalhe para a empresa há mais de cinco anos, em cargos de nível inferior ou intermediário. Você entra a seguinte cláusula WHERE na instrução do painel SQL:
WHERE (hire_date < '01/01/95' ) AND
(job_lvl = 100 OR job_lvl = 200)
A cláusula vinculada com AND se aplica a ambas as cláusulas vinculadas com OR. Um modo explícito para expressar isto é repetir a condição AND uma vez para cada condição na cláusula OR. A instrução seguinte é mais explícita (e maior) que a instrução anterior, mas é logicamente equivalente à ela:
WHERE (hire_date < '01/01/95' ) AND
(job_lvl = 100) OR
(hire_date < '01/01/95' ) AND
(job_lvl = 200)
O princípio de distribuir cláusulas AND para cláusulas OR vinculadas se aplica, não importando quantas condições individuais estão envolvidas. Por exemplo, imagine que você queira localizar os funcionários, de funções de nível superior ou intermediário,que trabalhem para a empresa há mais de cinco anos ou que estejam aposentados. A cláusula WHERE pode parecer assim:
WHERE
(job_lvl = 200 OR job_lvl = 300) AND
(hire_date < '01/01/95' ) OR (status = 'R')
Após as condições vinculadas com AND tiverem sido distribuídas, a cláusula WHERE se parecerá com:
WHERE
(job_lvl = 200 AND hire_date < '01/01/95' ) OR
(job_lvl = 200 AND status = 'R') OR
(job_lvl = 300 AND hire_date < '01/01/95' ) OR
(job_lvl = 300 AND status = 'R')
Como são representadas as cláusulas múltiplas AND e OR no Painel de Critérios
O Designer de Consulta e Exibição representa os critérios de pesquisa no Painel Critérios. Porém, em alguns casos que envolvem cláusulas múltiplas vinculadas com AND e OR, a representação no Painel de Critérios pode não ser o que você espera. Além disso, se você modificar sua consulta no Painel Critérios ou no Painel Diagrama, poderá descobrir que a instrução SQL que você inseriu foi alterada.
Em geral, estas regras ditam como as cláusulas AND e OR aparecem no Painel de Critérios:
Todas as condições vinculadas com AND aparecem na coluna de grade Filtro ou na mesma coluna Ou... .
Todas as condições vinculadas com OR aparecem em colunas Ou... separadas.
Se o resultado lógico de uma combinação de cláusulas AND e OR cláusulas for que AND seja distribuído em várias cláusulas OR, o Painel de Critérios representará isto explicitamente repetindo a cláusula AND tantas vezes quanto necessário.
Por exemplo, no painel SQL você pode criar um critério de pesquisa como o seguinte, no qual duas cláusulas vinculadas com AND têm precedência sobre uma terceira vinculada com OR:
WHERE (hire_date < '01/01/95' ) AND
(job_lvl = 100) OR
(status = 'R')
O Designer de Consulta e Exibição representa essa cláusula WHERE no Painel de Critérios como segue:
Porém, se as cláusulas OR têm precedência sobre uma cláusula AND, a cláusula AND é repetida para cada cláusula OR. Isto faz com que a cláusula AND seja distribuída para cada cláusula OR. Por exemplo, no painel SQL você poderá criar uma cláusula WHERE como a seguinte:
WHERE (hire_date < '01/01/95' ) AND
( (job_lvl = 100) OR
(status = 'R') )
O Designer de Consulta e Exibição representa essa cláusula WHERE no Painel de Critérios como segue:
Se as cláusulas vinculadas OR envolverem só uma coluna de dados, o Designer de Consulta e Exibição pode colocar a toda a cláusula OR em uma única célula da grade, evitando a necessidade de repetir a cláusula AND. Por exemplo, no painel SQL você poderá criar uma cláusula WHERE como a seguinte:
WHERE (hire_date < '01/01/95' ) AND
((status = 'R') OR (status = 'A'))
O Designer de Consulta e Exibição representa essa cláusula WHERE no Painel de Critérios como segue:
Se você fizer uma mudança na consulta (como alterar um dos valores no Painel de Critérios), o Designer de Consulta e Exibição recriará a instrução SQL no painel SQL. A instrução SQL recriada se assemelhará à exibição do Painel de Critérios em vez de sua instrução original. Por exemplo, se o Painel de Critérios contiver cláusulas AND distribuídas, a instrução resultante no painel SQL será recriada com cláusulas AND explicitamente distribuídas. Para detalhes, consulte "Como AND funciona com múltiplas cláusulas OR" anteriormente neste tópico.
Consulte Também
Especificar critérios de pesquisa (Ferramentas de Banco de Dados Visual)