Compartilhar via


Convenções para combinar condições de pesquisa no painel Critérios (Visual Database Tools)

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 e ANDOR operadores. Uma consulta com uma combinação de AND cláusulas OR pode se tornar complexa, portanto, é útil entender como essa consulta é interpretada ao executá-la e como essa consulta é representada no Painel de Critérios (Visual Database Tools) e no Painel SQL (Visual Database Tools).

Nota

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

Neste artigo, você encontrará informações sobre:

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

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

  • Como o Designer de Consulta e Exibição representa nas consultas do painel Critérios que contêm ambos AND e OR.

Para ajudá-lo a entender a discussão abaixo, imagine que você está trabalhando com uma employee tabela que contém as colunas hire_datejob_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 ANDe, em seguida, as vinculadas com OR.

Nota

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

Por exemplo, para localizar os 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 WHERE cláusula 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 over 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 WHERE cláusula 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 AND e OR cláusulas em vez de depender da precedência padrão.

Como AND funciona com várias cláusulas OR

Entender como AND e OR cláusulas 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 AND aplica-se a todas as condições no segundo conjunto. Em outras palavras, uma condição vinculada 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 AND condição vinculada a um conjunto de OR condições:

A AND (B OR C)

A representação acima é logicamente equivalente à seguinte representação de esquema, que mostra como a AND condição é 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ê está procurando por todos os funcionários que estão na empresa há mais de cinco anos em trabalhos de nível inferior ou médio. Insira a seguinte WHERE cláusula na instrução no painel SQL:

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

A cláusula vinculada AND se aplica a ambas as cláusulas vinculadas a OR. Uma maneira explícita de expressar isso é repetir a AND condição uma vez para cada condição na OR cláusula. 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 AND de cláusulas para cláusulas vinculadas OR 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 WHERE cláusula 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 AND tiverem sido distribuídas, a cláusula terá esta WHERE 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 Critérios

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

Em geral, essas regras determinam como AND e OR as cláusulas aparecem no painel Critérios:

  • Todas as condições vinculadas AND aparecem na coluna filtrar grade ou na mesma coluna Or... .

  • Todas as condições vinculadas aparecem OR em colunas or ... separadas.

  • Se o resultado lógico de uma combinação de AND cláusulas OR é que o AND é distribuído em várias OR cláusulas, o painel Critérios representa isso explicitamente repetindo a AND cláusula 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 têm AND 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 WHERE cláusula no painel Critérios da seguinte maneira:

Captura de tela da precedência da cláusula OR no painel Critérios.

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

Captura de tela de várias cláusulas AND e OR no painel Critérios.

Se as cláusulas vinculadas OR envolverem apenas uma coluna de dados, o Designer de Consulta e Exibição poderá colocar a cláusula inteira OR em uma única célula da grade, evitando a necessidade de repetir a AND cláusula. Por exemplo, no painel SQL, você pode criar uma WHERE cláusula como a seguinte:

WHERE (hire_date < '01/01/95') AND
  ((status = 'R') OR (status = 'A'))

O Designer de Consulta e Exibição representa esta WHERE cláusula no painel Critérios da seguinte maneira:

Captura de tela das cláusulas OR vinculadas definidas no painel Critérios.

Se você fizer uma alteração na consulta (como alterar um dos valores no painel Critérios), o Designer de Consulta e Exibição recriará a instrução SQL no painel SQL. A instrução SQL recriada se assemelha à exibição do painel Critérios em vez da instrução original. Por exemplo, se o painel Critérios contiver cláusulas distribuídas AND , a instrução resultante no painel SQL será recriada com cláusulas distribuídas AND explícitas. Para obter detalhes, consulte Como AND funciona com várias cláusulas OR anteriormente neste artigo.