Compartilhar via


Convenções para combinar condições de pesquisa no painel de critérios (Ferramentas de Banco de Dados Visual)

aplica-se a: do SQL Server

Você pode criar consultas que incluem qualquer número de condições de pesquisa, vinculadas a qualquer número de operadores AND e OR. Uma consulta com uma combinação de cláusulas AND e OR pode se tornar complexa. Portanto, é útil entender como essa consulta é interpretada ao ser executada e como ela é representada no Painel de Critérios e no Painel SQL .

Nota

Para obter detalhes sobre as condições de pesquisa que contêm apenas um operador AND ou OR, consulte Especificar várias condições de pesquisa para uma coluna (Visual Database Tools) e especificar várias condições de pesquisa para várias colunas (Visual Database Tools).

Abaixo, você encontrará informações sobre:

  • A precedência de AND e OR em consultas que contêm ambas.

  • Como as condições nas cláusulas AND e OR se relacionam logicamente entre si.

  • Como o Designer de Consulta e Exibição representa, no Painel de Critérios, consultas que contêm tanto AND quanto OR.

Para ajudá-lo a entender a discussão abaixo, imagine que você está trabalhando com uma tabela employee que contém as colunas hire_date, job_lvle status. Os exemplos pressupõem que você precisa saber informações como por quanto tempo um funcionário trabalhou com a empresa (ou seja, qual é a data de contratação do funcionário), que tipo de trabalho o funcionário executa (qual é o nível de trabalho) e o status do funcionário (por exemplo, aposentado).

Precedência de AND e OR

Quando uma consulta é executada, ela avalia primeiro as cláusulas vinculadas com AND e, em seguida, aquelas vinculadas ao OR.

Nota

O operador NOT tem precedência sobre AND e OR.

Por exemplo, para localizar funcionários que estão na empresa há mais de cinco anos em trabalhos de nível inferior ou funcionários com trabalhos de nível médio sem considerar a data 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 substituir a precedência padrão de AND sobre OR, você pode colocar parênteses em torno de condições específicas no painel SQL. As condições entre parênteses são sempre avaliadas primeiro. Por exemplo, para localizar todos os funcionários que estão na empresa há mais de cinco anos em trabalhos de nível inferior ou médio, você pode construir uma cláusula WHERE, como a seguinte:

WHERE   
   hire_date < '01/01/95' AND   
   (job_lvl = 100 OR job_lvl = 200)  

Dica

É recomendável que, para maior clareza, você sempre inclua parênteses ao combinar cláusulas AND e OR em vez de depender da precedência padrão.

Como "AND" funciona com várias cláusulas "OR"

Entender como as cláusulas AND e OR estão relacionadas quando combinadas pode ajudá-lo a construir e entender consultas complexas no Designer de Consulta e Exibição.

Se você vincular várias condições usando AND, o primeiro conjunto de condições vinculado a AND se aplicará a todas as condições no segundo conjunto. Em outras palavras, uma condição vinculada a AND a outra condição é distribuída para todas as condições no segundo conjunto. Por exemplo, a seguinte representação de esquema mostra uma condição AND vinculada a um conjunto de condições OR:

A AND (B OR C)  

A representação acima é logicamente equivalente à seguinte representação de esquema, que mostra como a condição AND é distribuída para o segundo conjunto de condições:

(A AND B) OR (A AND C)  

Esse princípio distributivo afeta a forma como você usa o Designer de Consulta e Exibição. Por exemplo, imagine que você esteja procurando por todos os funcionários que estiverem na empresa há mais de cinco anos em trabalhos de nível inferior ou médio. Insira a seguinte cláusula WHERE na instrução no 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 ao OR. Uma maneira explícita de expressar isso é repetir a condição AND uma vez para cada condição na cláusula OR. A instrução a seguir é mais explícita (e mais longa) do que a instrução anterior, mas é logicamente equivalente a ela:

WHERE    (hire_date < '01/01/95' ) AND  
  (job_lvl = 100) OR   
  (hire_date < '01/01/95' ) AND   
  (job_lvl = 200)  

O princípio da distribuição de cláusulas AND para cláusulas OR vinculadas se aplica independentemente de quantas condições individuais estejam envolvidas. Por exemplo, imagine que você deseja encontrar funcionários de nível superior ou médio que estejam na empresa há mais de cinco anos ou que estejam aposentados. A cláusula WHERE pode ter esta aparência:

WHERE   
   (job_lvl = 200 OR job_lvl = 300) AND  
   (hire_date < '01/01/95' ) OR (status = 'R')  

Depois que as condições vinculadas com AND tiverem sido distribuídas, a cláusula WHERE terá esta aparência:

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 várias cláusulas AND e OR são representadas no painel de critérios

O Designer de Consulta e Exibição representa suas condições de pesquisa no Painel de Critérios . No entanto, em alguns casos que envolvem várias cláusulas 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 de Critérios ou Painel de Diagramas, poderá descobrir que sua instrução SQL foi alterada do que você inseriu.

Em geral, essas regras determinam 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 Filtrar ou no mesmo Ou... coluna.

  • Todas as condições ligadas a OR aparecem em colunas separadas Ou....

  • Se o resultado lógico de uma combinação de cláusulas AND e OR é que o AND é distribuído em várias cláusulas OR, o Painel de Critérios representa isso explicitamente repetindo a cláusula AND quantas vezes forem necessárias.

Por exemplo, no painel SQL, você pode criar uma condição de pesquisa, como a seguinte, na qual duas cláusulas vinculadas ao 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 esta cláusula WHERE no Painel de Critérios da seguinte maneira:

precedência da cláusula OR no Painel de Critérios

No entanto, se as cláusulas OR vinculadas tiverem precedência sobre uma cláusula AND, a cláusula AND será repetida para cada cláusula OR. Isso faz com que a cláusula AND seja distribuída para cada cláusula OR. Por exemplo, no painel SQL, você pode 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 esta cláusula WHERE no Painel de Critérios da seguinte maneira:

várias cláusulas AND e OR no Painel de Critérios

Se as cláusulas OR vinculadas envolverem apenas uma coluna de dados, o Designer de Consulta e Exibição poderá colocar a cláusula OR inteira em uma única célula da grade, evitando a necessidade de repetir a cláusula AND. Por exemplo, no painel SQL, você pode 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 esta cláusula WHERE no Painel de Critérios da seguinte maneira:

cláusulas OR vinculadas definidas no Painel de Critérios

Se você fizer uma alteração 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 será semelhante à exibição do Painel de Critérios em vez da 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 distribuídas explícitas. Para obter detalhes, consulte "Como AND funciona com várias cláusulas OR" anteriormente neste tópico.

Consulte Também

Especificar critérios de pesquisa (Visual Database Tools)