Controlar el orden de las operaciones en una consulta SQL

Al ejecutar consultas SQL, es importante entender y administrar el orden en que se evalúan las cláusulas para poder producir los resultados previstos.

A continuación, se muestran dos ejemplos de la misma consulta. En el primer ejemplo, no se utilizar la agrupación de cláusulas y los resultados obtenidos no son los previstos. En el segundo ejemplo, las cláusulas se agrupan para que el orden correcto de las operaciones devuelva los resultados previstos.

En este escenario, imagine que está trabajando con una base de datos global de información demográfica y desea buscar todas las ciudades de China que tengan al menos 100.000 habitantes o que sean capitales de provincia.

Ejemplo 1: Sin agrupación

Puede crear esta consulta con tres cláusulas, como se muestran en la siguiente imagen. Al ejecutar esta consulta, primero encuentra todas las ciudades de China y después filtra las ciudades chinas con más de 100.000 habitantes. A continuación, según el operador Or, evalúa todo el dataset para devolver capitales de provincia. Los resultados finales son ciudades chinas con más de 100.000 habitantes y cualquier ciudad del mundo que sea capital de provincia, lo cual no es el resultado deseado. Esto se debe a que el operador And tiene prioridad sobre el operador Or, por lo que And se evalúa en primer lugar.

Tres cláusulas en una consulta, desagrupadas

Ejemplo 2: Agrupación

En este caso, para obtener los resultados deseados, el operador Or se debe evaluar primero. Puede agrupar las cláusulas para imponer el orden de las operaciones. Las cláusulas de un grupo se evalúan antes que las cláusulas que están fuera del grupo.

Tres cláusulas en una consulta, las dos últimas agrupadas

Para agrupar dos o más cláusulas, pulse la tecla Mayús mientras hace clic para seleccionarlas y, a continuación, haga clic en Agrupar cláusulas Agrupar cláusulas. Para desagrupar cláusulas, seleccione una cláusula de un grupo y haga clic en Desagrupar cláusulas Desagrupar cláusulas.

Cuando se aplica la agrupación, la consulta evalúa primero las cláusulas del grupo: si la ciudad tiene al menos 100.000 habitantes o si se trata de una capital de provincia. Después, evalúa si es una ciudad de China. A continuación, el operador And se asegura de que la consulta devuelva correctamente las ciudades que cumplen los dos criterios: ciudades chinas de al menos 100.000 habitantes o que sean capitales de provincia.

Agrupar las cláusulas equivale a incluirlas entre paréntesis. En el modo SQL, la consulta tiene este aspecto:

CNTRY_NAME = 'China' And (POP > 100000 Or STATUS = 'Provincial capital')

Temas relacionados