Leccion 7 - Filtrar datos con WHERE
Tiempo estimado de lectura: 7 minutos
A la hora de realizar nuestras consultas es fundamental saber poder filtrar, en analisis de datos especialmente. Muchas veces ocurre que solo necesitamos extraer un conjunto de datos de una tabla, o tambien por ejemplo nos viene dada una condicion de restringir los resultados a unos determinados valores, por ejemplo, dada una tabla con datos de ordenes de ventas, comprobar cuanto fue la suma de las ventas en el mes anterior.
Filtrar datos con WHERE
Para poder filtrar datos de nuestras tablas usaremos el comando WHERE
. Con esta ‘clause’ de SQL podremos indicar que valores queremos que nos devuelva nuestra consulta. Asi por ejemplo, imagina que tenemos una tabla Empleados con campos IdEmpleado, Nombre, Apellidos, Email, Telefono, FechaIngreso, Departamento y Salario. Esta tabla contiene datos de todas los empleados de la empresa, pero nuestro requisito es saber cuantos empleados se llaman Juan. Para ello, a modo de ejemplo, utilizaremos el siguiente codigo,
SELECT *
FROM Empleados
WHERE Nombre = 'Juan'
Con el codigo anterior lo que haremos es, leer datos de la tabla Empleados, obteniendo los datos de todas las columnas indicado por el simbolo star *, pero solo de aquellos empleados que se llamen Juan. FIjate que la restriccion que hemos puesto es WHERE Nombre = 'Juan'
. Esto es asi, de manera que a continuacion de la cláusula WHERE hemos indicado el nombre del campo por el que queremos restringir los valores de la tabla, en este caso Nombre, y que se cumpla que los valores del campo Nombre sean iguales a Juan. El simbolo =
indica que el campo ha de coincidir con el valor de Juan. En este caso Juan es una cadena (conjunto de caracteres).
Las cadenas en SQL se indican con comillas simples igual que en el ejemplo anterior.
Si hubieramos querido filtrar por un campo numerico como Salario, en este caso los valores numericos no se indican encerrados por comillas simples. Por ejemplo,
SELECT *
FROM Empleados
WHERE Salario > 1000
En este caso nuestra consulta devuelve los datos de la tabla Empleados cuyo Salario es mayor a 1000. Date cuenta que hemos utilizado el simbolo >
, esto quiere decir que el valor de Salario debe ser mayor a 1000, si hubieramos querido indicar un salario mayor o igual a 1000, lo hubieramos expresado de la siguiente manera.
SELECT *
Empleados
WHERE Salario >= 1000
En el caso de que hubieramos querido obtener los datos de los empleados con salarios inferiores a 1000, podriamos utilizar la siguiente query.
SELECT *
FROM Empleados
WHERE Salario < 1000
Si hubieramos querido saber los datos de los empleados que hubieran ingresado en la empresa a partir de una determinada fecha, por ejemplo Enero de 2022, para ello podriamos utilizar la siguiente consulta.
SELECT *
FROM Empleados
WHERE FechaIngreso >= '2022-01-01'
Con la consulta anterior indicamos el dia a partir del cual la FechaIngreso se cumple que fue a partir del dia 1 de Enero de 2022, incluido este mismo dia. El campo FechaIngreso en este caso seria de tipo DATE con formato YYYY-MM-DD, donde YYYY es el año, MM el mes y DD el dia.
Pero y que pasa por ejemplo los datos de los empleados que ganen mas de 1000 y se llamen Juan?. Esto lo vamos a ver en el siguiente apartado.
Condiciones de filtrado con AND/OR
Uso de AND
Normalmente el uso de condiciones en nuestras consultas va mas alla de poder filtrar por un solo campo, por ejemplo, podriamos querer saber los datos de la tabla Empleados donde el nombre del empleado sea Juan y cuyo salario sea superior a 1000. En este caso estaremos haciendo uso de la combinacion de dos condiciones, en las que ambas se han de cumplir para que obtener estos datos. Siguiendo nuestro ejemplo el codigo que debemos utilizar seria asi.
SELECT *
FROM Empleados
WHERE Nombre = 'Juan' AND Salario > 1000
¿Te has fijado? Para combinar ambas condiciones hemos utilizado la palabra clave AND
, esto indica que los datos que nos devolvera nuestra consulta seran aquellos para los que se cumplen ambas condiciones de Nombre = ‘Juan’ y Salario > 1000. Es decir, empleados que se llamen Juan y con un salario superior a 1000. No obtendremos datos para Pedros o Marias ni salarios por debajo o igual a 1000, si no superior a esta cantidad.
Pero y que ocurre si lo que queremos por ejemplo es obtener los datos de los Empleados cuyo nombre no sea Juan. Para ello simplemente tendremos que utilizar el simbolo <>
, esto quiere decir distinto. En nuestro caso nuestra consulta quedaria asi,
SELECT *
FROM Empleados
WHERE Juan <> 'Juan'
Uso de OR
Siguiendo con el ejemplo anterior, imagina que nuestro jefe nos pregunta si podemos proporcionar un informe con los datos de los empleados que se llamen Juan o Maria. Hasta ahora solo hemos visto la condicion de que el nombre del empleado sea igual a un valor. pero si lo queremos es poder emplear en nuestra consulta dos condiciones en la que ambas pueden ser ciertas, para ello empleamos la palabra clave OR
.
Siguiendo el ejemplo, en nuestra caso el codigo de nuestra consulta quedaria asi,
SELECT *
FROM Empleados
WHERE Nombre = 'Juan' OR Nombre = 'Maria'
Uso de IN
Pero ocurre una cosa, y es que tener que repetir el nombre del campo para indicar la condicion de restricción de nuestra consulta puede llegar a ser un poco tedioso, puede que incluso no solo tengamos dos valores por los que filtrar, estos podrian llegar a ser 20, o incluso 30 valores diferentes. En estos casos cuando queremos filtrar un campo por uno o mas valores tambien podemos emplear la palabra clave IN
.
La manera de utilizar IN en nuestro ejemplo seria la siguiente.
SELECT *
FROM Empleados
WHERE Nombre IN ('Juan','Maria')
En este caso indicamos la condicion de que el valor del campo Nombre ha de ser Juan o Maria, indicado por los valores entre parentesis separados por comas.
Multiples condiciones
El uso de AND o OR no se limita a que solo aparezcan una sola vez en el WHERE de la consulta, dado que puedes tener varias condiciones que han de cumplir los datos. En este caso usaremos AND tantas veces como sea necesario. Asi por ejemplo, si queremos saber los Empleados que se llamen Juan , ganen mas de 1000 y trabajen en el departamento de Ventas, para ello utilizaremos la siguiente consulta.
SELECT *
FROM Empleados
WHERE Nombre = 'Juan' AND Salario > 1000 AND Departamento = 'Ventas'
Piensa que con OR funciona de la misma manera cuando tenemos varias condiciones. Ahora bien, que ocurre si tenemos un par de condiciones en el que ambas (AND) se han de cumplir pero incluimos otra condicion por la que tambien obtener nuestros datos pero independiente de las dos primeras (OR). En estos casos hemos de incluir entre paréntesis nuestras condiciones. Un ejemplo de codigo de lo que estamos hablando seria el siguiente.
SELECT *
FROM Empleados
WHERE (Nombre = 'Juan' AND Salario > 1000) OR Departamento = 'Ventas'
En este caso, aunque a priori no tenga mucho sentido, la consulta nos devolvera los datos de la tabla Empleados en los que el empleado se llame Juan y tenga un salario superior a 1000 pero tambien nos devolvera aquellos registros de empleados que trabajen en el departamento de Ventas independientemente de que se llamen Juan o ganen mas de 1000. Esta consulta que hemos puesto de ejemplo a priori no tiene mucho sentido desde un punto de vista del dia a dia, pero simplemente es para mostrar como podemos emplear varias condiciones a la vez.