Partilhar via


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

Aplica-se a:SQL Server

Você pode criar consultas que incluem qualquer número de condições de pesquisa, vinculadas a qualquer número de AND e OR operadores. Uma consulta com uma combinação de cláusulas e AND pode se tornar complexa, por isso é útil entender como essa consulta é interpretada OR quando você a executa e como essa consulta é representada no Painel de Critérios (Visual Database Tools) e no Painel SQL (Visual Database Tools).

Observação

Para obter detalhes sobre as condições de pesquisa que contêm apenas um AND operador OROR, 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).

Neste artigo, você encontra informações sobre:

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

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

  • Como o Designer de Consulta e Exibição representa no painel Critérios consultas que contêm e ANDOR.

Para ajudá-lo a entender a discussão abaixo, imagine que você está trabalhando com uma employee tabela contendo as colunas hire_date, job_lvle status. Os exemplos pressupõem que você precisa saber informações como há quanto tempo um funcionário trabalha 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 do trabalho) e o status do funcionário (por exemplo, aposentado).

Precedência de E e OU

Quando uma consulta é executada, ela avalia primeiro as cláusulas vinculadas ao AND, e depois as vinculadas ao OR.

Observação

O NOT operador tem precedência sobre ambos e ANDOR .

Por exemplo, para encontrar funcionários que estão na empresa há mais de cinco anos em empregos de nível inferior ou funcionários com empregos de nível médio sem levar em conta 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 over AND, você pode colocar parênteses em torno de OR condições específicas no painel SQL. As condições entre parênteses são sempre avaliadas primeiro. Por exemplo, para encontrar todos os funcionários que estão na empresa há mais de cinco anos em empregos 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 confiar na precedência padrão.

Como E funciona com várias cláusulas OR

Compreender como AND e OR as 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 vinculadas se AND aplicará a todas as condições do segundo conjunto. Em outras palavras, uma condição ligada AND a outra condição é distribuída para todas as condições no segundo conjunto. Por exemplo, a seguinte representação esquemática mostra uma AND condição ligada a um conjunto de OR condições:

A AND (B OR C)

A representação acima é logicamente equivalente à seguinte representação esquemática, 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 como você usa o Designer de Consulta e Exibição. Por exemplo, imagine que você está procurando todos os funcionários que estão na empresa há mais de cinco anos em empregos 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 associada a AND aplica-se a ambas as cláusulas relacionadas com OR. Uma maneira explícita de expressar isso é repetir a AND condição uma vez para cada condição na OR cláusula. A seguinte afirmação é mais explícita (e mais longa) do que a 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 a cláusulas conexas OR aplica-se independentemente do número de condições individuais envolvidas. Por exemplo, imagine que você quer encontrar funcionários de nível superior ou médio que estão na empresa há mais de cinco anos ou estão 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 de distribuídas as condições associadas AND , a cláusula tem o WHERE seguinte aspeto:

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 a AND e OR, a representação no painel Critérios pode não ser a esperada. 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 em relação ao que você inseriu.

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

  • Todas as condições vinculadas aparecem AND na coluna Grade de filtro ou na mesma coluna Ou...

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

  • Se o resultado lógico de uma combinação de e AND cláusulas é que o OR é distribuído AND 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 a 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 WHERE cláusula no painel Critérios da seguinte maneira:

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

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

Captura de ecrã 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 essa WHERE cláusula no painel Critérios da seguinte maneira:

Captura de tela de 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 é semelhante à 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 E funciona com várias cláusulas OR anteriormente neste artigo.