Compartir a través de


Convenciones para combinar condiciones de búsqueda en el panel Criterios (Visual Database Tools)

Se aplica a:SQL Server

Puede crear consultas que incluyan cualquier número de condiciones de búsqueda, vinculadas con cualquier cantidad de AND y OR operadores. Una consulta con una combinación de AND cláusulas y OR puede ser compleja, por lo que resulta útil comprender cómo se interpreta dicha consulta al ejecutarla y cómo se representa dicha consulta en el panel criterios (Visual Database Tools) y el panel SQL (Visual Database Tools).

Nota:

Para obtener más información sobre las condiciones de búsqueda que contienen solo un AND operador o OR , vea Especificar varias condiciones de búsqueda para una columna (Visual Database Tools) y Especificar varias condiciones de búsqueda para varias columnas (Visual Database Tools).

En este artículo encontrará información sobre:

  • La prioridad de AND y OR en las consultas que contienen ambos.

  • Cómo se relacionan lógicamente entre sí las condiciones de las cláusulas AND y OR.

  • Cómo el Diseñador de consultas y vistas representa en el panel Criterios las consultas que contienen tanto AND como OR.

Para ayudarle a comprender la explicación siguiente, imagine que está trabajando con una employee tabla que contiene las columnas hire_date, job_lvly status. En los ejemplos se supone que necesita conocer cierta información, como la antigüedad de un empleado en la compañía (es decir, la fecha de contratación del empleado), el tipo de trabajo que realiza (su categoría laboral) y su estado (por ejemplo, jubilado).

Prioridad de AND y OR

Cuando se ejecuta una consulta, evalúa primero las cláusulas vinculadas con ANDy, a continuación, las vinculadas a OR.

Nota:

El NOT operador tiene prioridad sobre y ANDOR.

Por ejemplo, para encontrar a los empleados que han estado con la empresa durante más de cinco años en trabajos de nivel inferior o empleados con puestos de nivel intermedio sin tener en cuenta su fecha de contratación, puede construir una WHERE cláusula como la siguiente:

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

Para invalidar la prioridad predeterminada de AND sobre OR, puede colocar paréntesis en torno a condiciones específicas en el panel SQL. Siempre se evalúan primero las condiciones que van entre paréntesis. Por ejemplo, para buscar todos los empleados que han estado con la empresa más de cinco años en trabajos de nivel inferior o medio, puede construir una WHERE cláusula como la siguiente:

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

Sugerencia

Para mayor claridad, se recomienda que siempre incluya paréntesis al combinar las cláusulas AND y OR en lugar de confiar en la precedencia predeterminada.

Funcionamiento de AND con varias cláusulas OR

Comprender cómo AND y OR las cláusulas están relacionadas cuando se combinan pueden ayudarle a construir y comprender consultas complejas en el Diseñador de consultas y vistas.

Si vincula varias condiciones mediante AND, el primer conjunto de condiciones vinculado a AND se aplica a todas las condiciones del segundo conjunto. Es decir, una condición que está vinculada a AND con otra condición se aplica a todas las condiciones del segundo conjunto. Por ejemplo, la siguiente representación esquemática muestra una AND condición vinculada a un conjunto de OR condiciones:

A AND (B OR C)

La representación anterior es lógicamente equivalente a la siguiente representación esquemática, que muestra cómo se distribuye la AND condición al segundo conjunto de condiciones:

(A AND B) OR (A AND C)

Este principio distributivo afecta al uso del Diseñador de consultas y vistas. Por ejemplo, imagine que está buscando a todos los empleados que han estado con la empresa más de cinco años en puestos de nivel medio o inferior. Escriba la cláusula siguiente WHERE en la instrucción del panel SQL:

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

La cláusula vinculada con AND se aplica a ambas cláusulas vinculadas a OR. Una manera explícita de expresar esto es repetir la AND condición una vez para cada condición de la OR cláusula . La siguiente instrucción es más explícita (y más larga) que la instrucción anterior, pero es equivalente lógicamente a ella:

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

El principio de distribución AND de cláusulas a cláusulas vinculadas OR se aplica independientemente del número de condiciones individuales implicadas. Por ejemplo, suponga que desea encontrar todos los empleados con puestos de categoría superior o intermedia con una antigüedad de más de cinco años o que estén jubilados. La WHERE cláusula podría tener este aspecto:

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

Una vez distribuidas las condiciones vinculadas a AND , la WHERE cláusula tiene el siguiente aspecto:

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')

Cómo se representan varias cláusulas AND y OR en el panel Criterios

El Diseñador de consultas y vistas representa las condiciones de búsqueda en el panel Criterios (Visual Database Tools). Sin embargo, en algunos casos que implican varias cláusulas vinculadas con AND y OR, es posible que la representación en el panel Criterios no sea lo que espera. Además, si modifica su consulta en el panel de Criterios o en el panel de Diagrama (Visual Database Tools), es posible que observe que su instrucción SQL ha sido modificada respecto a lo que introdujo originalmente.

En general, estas reglas dictan cómo ANDOR y las cláusulas aparecen en el panel Criterios:

  • Todas las condiciones vinculadas con AND aparecen en la columna Cuadrícula de filtro o en la misma columna Or... .

  • Todas las condiciones vinculadas con OR aparecen en columnas or... independientes.

  • Si el resultado lógico de una combinación de AND cláusulas y OR es que AND se distribuye en varias OR cláusulas, el panel Criterios lo representa explícitamente repitiendo la AND cláusula tantas veces como sea necesario.

Por ejemplo, en el panel SQL podría crear una condición de búsqueda como la siguiente, en la que dos cláusulas vinculadas con AND tienen prioridad sobre una tercera vinculada a OR:

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

El Diseñador de consultas y vistas representa esta WHERE cláusula en el panel Criterios de la siguiente manera:

Captura de pantalla de la precedencia de la cláusula OR en el panel Criterios.

Sin embargo, si las cláusulas vinculadas OR tienen prioridad sobre una AND cláusula, la AND cláusula se repite para cada OR cláusula. Esto hace que la AND cláusula se distribuya a cada OR cláusula. Por ejemplo, en el panel SQL, podría crear una WHERE cláusula como la siguiente:

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

El Diseñador de consultas y vistas representa esta WHERE cláusula en el panel Criterios de la siguiente manera:

Captura de pantalla de varias cláusulas AND y OR en el panel Criterios.

Si las cláusulas vinculadas OR solo implican una columna de datos, el Diseñador de consultas y vistas puede colocar toda OR la cláusula en una sola celda de la cuadrícula, evitando la necesidad de repetir la AND cláusula. Por ejemplo, en el panel SQL, podría crear una WHERE cláusula como la siguiente:

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

El Diseñador de consultas y vistas representa esta WHERE cláusula en el panel Criterios de la siguiente manera:

Captura de pantalla de las cláusulas OR vinculadas definidas en el panel Criterios.

Si realiza un cambio en la consulta (por ejemplo, cambiar uno de los valores del panel Criterios), el Diseñador de consultas y vistas vuelve a crear la instrucción SQL en el panel SQL. La instrucción SQL recreada es similar a la pantalla del panel Criterios en lugar de la instrucción original. Por ejemplo, si el panel Criterios contiene cláusulas distribuidas AND , la instrucción resultante en el panel SQL se vuelve a crear con cláusulas distribuidas AND explícitas. Para obtener más información, consulte Funcionamiento de AND con varias cláusulas OR anteriormente en este artículo.