En este capítulo te mostraré de qué forma funciona el operador IN de SQL, con el que filtraremos resultados con varias opciones.
Sintaxis básica del operador IN de SQL
Esta es la sintaxis básica del operador IN:
SELECT columnas FROM tabla WHERE columna IN (valor1, valor2, valor3, ...);
Ejemplo práctico de uso del operador
Veamos un ejemplo con este operador. Vamos a seleccionar unos cuantos campos de la tabla city de la base de datos world de MySQL.
SELECT * FROM city WHERE ID IN (10, 100, 10000000, 300, 700, 1000);
El resultado de esto, son todas las ciudades que coinciden con los ID proporcionados en los paréntesis del IN.
Si te fijas, he puesto 6 ID y han salido 5 resultados. Esto es porque el registro con ID 10000000 no existe. Todo lo que no coincida, se descarta sin producir errores.
Utilizar varias tablas en SQL con el operador IN
Si antes de empezar este curso de SQL sabías al menos lo básico, es posible, que te hayan dicho que para consultar datos de diferentes tablas en una sola consulta, tienes que utilizar uniones. Este es un tema que veremos pronto. Sin embargo, he de decir, que gracias a las subconsultas podemos utilizar diferentes tablas en una misma consulta:
SELECT * FROM city WHERE CountryCode IN (SELECT Code FROM country WHERE Name IN ('Australia', 'Mexico') );
Aquí, en la consulta principal, estoy seleccionando todos los registros de la tabla de ciudades. A esto, le filtro con IN una subconsulta, para obtener resultados basados en lo que devuelva la subconsulta.
La subconsulta, selecciona otra tabla diferente, la de países. En ella, con otro WHERE IN, busca los registros de país «Australia» y «México». Si existen, me da los resultados de estos países. Estos países, en la tabla country, tiene un campo llamado Code, que al igual que la tabla city, tiene códigos de país como AUS y MEX. Finalmente, esos dos resultados se quedan para el WHERE IN principal, que muestra todas las ciudades con código AUS y MEX.
SELECT Code FROM country WHERE Name IN ('Australia', 'Mexico');
Evidentemente, sería más sencillo hacer esto:
SELECT * FROM city WHERE CountryCode IN ('AUS','MEX');
Pero puede ser que no sepas cuáles son los códigos, pero sí que recuerdes los países. O que en una hipotética base de datos, los códigos asociados a productos puedan cambiar y no quieras errores por ello.
Sea de la forma que sea, esto te será útil en el futuro.
No te pierdas nada del Máster en SQL.