Tutoriales SQL – La sentencia SELECT – La clausula WHERE – Parte 2
Retomando donde nos habíamos quedado en la primera parte; voy a continuar explicando la cláusula WHERE. Ésta cláusula es la encargada de realizar el filtrado de los datos que queremos consultar. Si pensamos a cada sentencia SELECT como una pregunta que le realizamos a la base de datos, la cláusula WHERE es la parte fundamental de esa pregunta, ya que es la que va a incluir todas las condiciones que se deben cumplir para obtener la respuesta deseada; de no incluirse esta cláusula nuestra pregunta sería absurda, ya que prácticamente cualquier respuesta sería válida.
En la parte uno, vimos que la cláusula WHERE se compone de una o varias condiciones encadenadas por los operadores lógicos AND y/o OR; también allí les describi como hace el interprete de SQL para evaluar múltiples condiciones; es decir, aquellas donde hay más de una condicion unida por AND y/o OR. Ahora es tiempo de entrar más en detalle en la forma en que podemos construir nuestras condiciones.
Las condiciones que podemos incluir en la cláusula WHERE se van a componer de una o más expresiones enparejadas por uno o más operadores de relación. Como ya les comente muchas veces, el lenguaje SQL es extremadamente flexible, por lo que nos va a permitir incluir en el armado de nuestra condiciones cualquiera de las siguientes expresiones:
- Un número.
- Una columna de una tabla o vista.
- Un texto literal.
- Una funcion.
- Una subconsulta
- Una lista de expresiones.
y estas expresiones las vamos a poder relacionar con cualquiera de los siguientes operadores:
- Operadores de comparacion: Éstos incluyen a =, != o <>, <, >, >=, <=, LIKE, IN y BETWEEN.
- Operadores aritméticos: Como son +, -, *, y /.
Existen muchas formas en que podemos filtrar nuestros datos. Podemos buscar un valor específico, o un conjunto de valores, o podemos incluso buscar solo una coincidencia parcial de un texto. Veamos algunos de estos casos:
Condiciones de igualdad
Estan son el tipo de condiciones que más se utilizan. Se construyen con la formula:
columna de tabla = expresion
Esta es la construcción básica que venimos utilizando en casi todos los ejemplos que vimos hasta ahora. Podemos igualar el valor de la columna de la tabla con un número, un texto, el resultado de funcion, o el resultado de una subconsulta.

En este ejemplo estamos igualando la columna amount con el número 0.99; la columna rating con el texto “G” y la columna first_name con el resultado de la funcion upper para el texto “denise”. (Lo que va a hacer la función upper es convertir el texto que se le pasa como parametro a mayúsculas).
Muy similares a las condiciones de igualdad, pero con el efecto contrario. Se construyen con la formula:
columna de tabla != expresion o columna de tabla <> expresion
Podemos utilizar cualquiera de las dos simbologías en forma indistinta, ambas se refieren a distinto de.

Aqui podemos ver el mismo ejemplo que el anterior pero con el efecto contrario. En lugar de buscar igualdades, estamos buscando desigualdades.
Condiciones por rangos
Adicionalmente a las condiciones de igualdad y desigualdad, también podemos construir condiciones que chequeen si una expresión cae dentro de determinado rango. Veamos un ejemplo.

Aquí estamos filtrando las películas aptas para todo público (ranting = ‘G’) y que tengan pagos cuyo importe sea mayor o igual a 0.99 y menor igual a 1.99; en otras palabras, posean pagos que se encuentren en el rango entre 0.99 y 1.99.
El operador between
En lugar de utilizar dos condiciones para determinar el rango, como hicimos en el ejemplo anterior, podemos utilizar el operador BETWEEN. Así si reescribimos nuestra sentencia anterior utilizando este operador, quedará del siguiente modo.

Utilizando el operador BETWEEN para chequear rangos en lugar de utilizar dos condiciones. Como vemos, obtenemos los mismos resultados que en el caso anterior.
Condiciones de membresía
En algunos casos vamos a necesitar comparar los valores de una columna de una tabla contra un conjunto de valores, en lugar de compararlos contra un solo valor. Por ejemplo, podríamos intentar buscar todas las películas con un rating “G”, “R” y “PG”. Para estos casos podemos utilizar el operador de membresía IN.
Condiciones con coincidencias parciales
Este tipo de condiciones va a buscar una coincidencia parcial de un subconjunto de texto. Para construir este tipo de condiciones, vamos a utiizar el operador LIKE. Por ejemplo, si quisieramos saber todos los actores cuyo nombre empieza con la letra “P”, podríamos escribir la siguiente sentencia.
El uso de comodines
Si ven el ejemplo anterior, veran que después de la letra “P” yo estoy utilizando el signo “%”; este signo es uno de los dos comodines que podemos utilizar junto con el operador LIKE. Ellos son:
Comodin | Coincidencia que realiza |
% | Toma el lugar de cualquier número de caracteres, incluso cero caracteres |
_ | Toma el lugar de un solo caracter. |
En nuestro ejemplo yo uso el comodín “%” porque no se cuantos caracteres pueden tener los nombres de los actores después de la letra “P”. Si yo solo estoy buscando nombres que comiencen con la letra “P” pero que tengan una extensión fija de 6 caracteres, podría utilizar el comodín “_” del siguiente modo.

Como vemos agregamos 5 guiones luego de la P para buscar los nombres que comiencen con P, de una extensión de 6 caracteres.
Los casos especiales de NOT y NULL
Por último, para cerrar este tutorial sobre la cláusula WHERE, voy a explicar el uso del operador NOT y el caso especial de la palabra NULL.
El operador NOT
Este operador se utiliza para obtener el valor contrario en la evalución de nuestra expresión. Así por ejemplo, si tenemos una expresión como rating = ‘G’, que evalua a VERDADERO, si yo agrego el operador NOT delante de esta expresión, NOT rating = ‘G’ hago que esa expresión evalúe a FALSO. Este operador, suele ser bastante dificil de entender y generalmente no se utiliza mucho. Dónde más comunmente lo vamos a poder ver es delante del operador IN, para chequear la no membresía. Así por ejemplo si yo quisiera conocer los pagos de las peliculas cuyo rating sea distinto de ‘G’, ‘R’ y ‘PG’; podría utilizar el operador NOT junto con el IN del siguiente modo:
NULL
La palabra NULL hace referencia al valor nulo, o la ausencia de valor. Se utiliza cuando no corresponde ingresar ningun valor en el campo de la tabla, ya sea por no ser aplicable, porque el valor todavía no se conoce o porque el valor todavía no esta definido. Lo que debemos tener en cuenta cuando utilizamos NULL en una condición es que:
- Una expresión puede ser nula, pero nunca va a ser igual a nulo. Es decir, que si queremos buscar las lineas que posean algun campo con valor nulo, no vamos a poder utilizar la expresión columna de tabla = NULL, en su lugar vamos a tener que utilzar la expresión columna de tabla IS NULL.
- No existe la igualdad entre los nulos. La expresión NULL = NULL siempre evaluará a FALSO.
Veamos un ejemplo:

En este ejemplo estamos buscando a aquellos empleados de quienes no tenemos su fotografía. (picture is null).
Aquí terminamos con la cláusula WHERE, espero les haya sido de utilidad este tutorial.
Saludos,