Convenções para combinar critérios de pesquisa no painel critérios
Você pode criar consultas que incluem qualquer número de critérios de pesquisa vinculados com qualquer número de e e ou operadores. Uma consulta com uma combinação de e e ou cláusulas podem se tornar complexas, portanto, é útil compreender como tais consultas é interpretada ao executá-lo e como tal consulta é representada no Painel critérios e o painel SQL.
Observação |
---|
Para obter detalhes sobre as condições de pesquisa que contêm apenas um e ou ou operador, consulte Como: Especificar várias condições de pesquisa para uma coluna e Como: Especificar várias condições de pesquisa para várias colunas. |
Abaixo você encontrará informações sobre:
A precedência de AND e OR em consultas que contêm ambas.
Como as condições em e ou ou cláusulas logicamente relacionados uns aos outros.
Como a consulta e o modo de exibição Designer representa nas consultas painel critérios que contêm ambas e e ou.
Para ajudá-lo a entender a discussão abaixo, imagine que você está trabalhando com um employee tabela que contém as colunas hire_date, job_lvl, e status. Os exemplos assumem que você precisa saber informações tais como, por exemplo, longo, um funcionário tiver trabalhado com a empresa (ou seja, qual data de contratação do funcionário é), que tipo de trabalho do funcionário executa (o que o nível de trabalho é) e o status do funcionário (por exemplo, aposentado).
Precedência de AND e ou
Quando uma consulta é executada, ela avalia primeiro as cláusulas vinculadas com AND, e depois as vinculadas com ou.
Observação |
---|
O operador não tem precedência sobre AND e ou. |
Por exemplo, para localizar a funcionários que trabalham na empresa há mais de cinco anos em cargos de nível baixo ou funcionários com trabalhos de nível médio sem considerar a sua data de contratação, você pode construir uma cláusula WHERE, como:
WHERE
hire_date < '01/01/90' AND
job_lvl = 100 OR
job_lvl = 200
Para substituir a precedência padrão de AND sobre ou, você pode colocar as condições específicas entre parênteses no painel SQL. Os critérios entre parênteses são sempre avaliados primeiro. Por exemplo, para localizar todos os funcionários que trabalham com a empresa mais de cinco anos em cargos de nível médio ou inferiores, você pode construir uma cláusula WHERE, como:
WHERE
hire_date < '01/01/90' AND
(job_lvl = 100 OR job_lvl = 200)
Dica
É recomendável que, por motivos de clareza, você sempre incluir parênteses ao combinar e e ou cláusulas em vez de contar com a precedência padrão.
Como funciona AND múltiplo ou cláusulas
Noções básicas sobre como e e ou cláusulas relacionadas quando combinado pode ajudá-lo a construir e entender melhor as consultas complexas no Query e View Designer.
Se você vincula diferentes critérios utilizando E, o primeiro conjunto de condições vinculadas com e aplica a todas as condições no segundo conjunto. Em outras palavras, uma condição vinculada com AND a outra condição é distribuída para todas as condições no segundo conjunto. Por exemplo, a seguinte representação esquemática mostra um critério AND vinculado a um conjunto de condições OR:
A AND (B OR C)
A representação acima é logicamente equivalente a seguinte representação esquemática, mostra como o critério AND é distribuído para o segundo conjunto de condições:
(A AND B) OR (A AND C)
Este princípio de distribuição afeta como usar o Query e View Designer. Por exemplo, imagine que você está procurando todos os funcionários que trabalham com a empresa mais de cinco anos em cargos de nível médio ou inferiores. Você pode inserir a seguinte cláusula WHERE na instrução no painel de SQL:
WHERE (hire_date < '01/01/90' ) AND
(job_lvl = 100 OR job_lvl = 200)
A cláusula vinculada com AND se aplica às duas cláusulas vinculadas com ou. Uma forma explícita de expressar isto é repetir o critério AND uma vez para cada condição da cláusula OR. A instrução a seguir é mais explícita (e mais) que a instrução anterior, mas é logicamente equivalente a ele:
WHERE (hire_date < '01/01/90' ) AND
(job_lvl = 100) OR
(hire_date < '01/01/90' ) AND
(job_lvl = 200)
O princípio de distribuir cláusulas AND a cláusulas cláusulas OR vinculadas se aplica independentemente de quantos critérios individuais estão envolvidos. Por exemplo, imagine que você deseja localizar os funcionários de nível médio ou superiores que foram a empresa mais de cinco anos ou estão aposentados. A cláusula WHERE teria esta aparência:
WHERE
(job_lvl = 200 OR job_lvl = 300) AND
(hire_date < '01/01/90' ) OR (status = 'R')
Após as condições vinculadas com e tiverem sido distribuídas, a cláusula WHERE ficará assim:
WHERE
(job_lvl = 200 AND hire_date < '01/01/90' ) OR
(job_lvl = 200 AND status = 'R') OR
(job_lvl = 300 AND hire_date < '01/01/90' ) OR
(job_lvl = 300 AND status = 'R')
Como vários e ou ou cláusulas são representados no painel critérios
A consulta e o modo de exibição Designer representa seus critérios de pesquisa no O painel de critérios de. No entanto, em alguns casos que envolvem várias cláusulas vinculadas com AND e ou a representação no painel de critérios não pode ser esperada. Além disso, se você modificar sua consulta no painel critérios ou o painel de diagrama, você pode achar que sua declaração de SQL foi alterada da que você digitou.
Em geral, essas regras determinam como e e ou cláusulas aparecem no painel de critérios:
Todas as condições vinculadas com e aparecem na filtro coluna de grade ou na mesma ou... coluna.
Todas as condições vinculadas à OR aparecem em separado ou... colunas.
Se o resultado lógico de uma combinação de e e ou cláusulas é que a distribuição para várias cláusulas OR, painel critérios representa isso explicitamente, repetindo a cláusula AND tantas vezes conforme necessário.
Por exemplo, no painel de SQL você pode criar um critério de pesquisa, como a seguir, no qual duas cláusulas vinculadas com e têm precedência sobre uma terceira vinculada com ou:
WHERE (hire_date < '01/01/90' ) AND
(job_lvl = 100) OR
(status = 'R')
A consulta e o modo de exibição Designer representa essa cláusula WHERE no painel de critérios, como segue:
No entanto, se as cláusulas OR vinculadas têm precedência sobre a cláusula AND, a cláusula AND é repetida para cada cláusula OR. Isso faz com que a cláusula AND sejam distribuídas para cada cláusula OR. Por exemplo, no painel de SQL, você pode criar uma cláusula WHERE, como:
WHERE (hire_date < '01/01/90' ) AND
( (job_lvl = 100) OR
(status = 'R') )
A consulta e o modo de exibição Designer representa essa cláusula WHERE no painel de critérios, como segue:
Se as cláusulas OR vinculadas envolverem uma coluna de dados, a consulta e o modo de exibição Designer podem colocar 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 de SQL, você pode criar uma cláusula WHERE, como:
WHERE (hire_date < '01/01/90' ) AND
((status = 'R') OR (status = 'A'))
A consulta e o modo de exibição Designer representa essa cláusula WHERE no painel de critérios, como segue:
Se você fizer uma alteração à consulta (como alterar um dos valores no painel critérios), a consulta e o modo de exibição Designer recria a instrução no painel de SQL de SQL. A instrução de SQL recriada será semelhante a exibição do painel de critérios, em vez de sua instrução original. Por exemplo, se o painel critérios contém cláusulas AND distribuídas, a instrução resultante no painel de SQL será recriada com cláusulas AND explicitamente distribuídas. Para obter detalhes, consulte "Como E funciona com várias cláusulas ou" anteriormente neste tópico.