Sintaxis
SELECT...FROM...WHERE valor IN([valor1, valor2,...]|[Subconsulta])Cuando debo usar el operador IN?
Cuando necesites comparar un columna con una gran cantidad de valores en la sentencia WHERE. El objetivo de este operador es ahorrarte múltiples condiciones de igualdad concatenadas.
Supongamos que posees una tabla llamada empleado y que deseas consultar los empleados que tengan los siguientes nombres: 'James', 'Ricardo','Brayan' y 'Laura'. Normalmente muchas personas que desconozcan la función de IN harán los siguiente:
SELECT *FROM EMPLEADOWHERE NOMBRE='James' OR NOMBRE='Ricardo' OR NOMBRE='Brayan' OR NOMBRE='Laura'
Aunque es una forma válida de hacerlo, es dispendioso para el programador.
Como lo haríamos nosotros que si conocemos el operador IN?
SELECT *
FROM EMPLEADOWHERE NOMBRE IN('James','Ricardo','Brayan','Laura')
Basta solo con crear un conjunto de valores como referencia para comprobar si el nombre se mostrará en los resultados finales.
Dijiste que subconsultas!, donde están las subconsultas?Si claro, el operador IN permite crear nuestro conjunto de valores a partir de los resultados de una subconsulta. Veamos el siguiente ejemplo:
Suponga que tiene una sencilla relación 1 a muchos entre dos tablas llamadas CLIENTE y FACTURA. Busque el nombre, apellido y edad de aquellos clientes que hayan comprado entre '2013-05-01' hasta '2013-07-01'.
Es obvio que habrán varios clientes que hayan comprado entre esas fechas, en consecuencia habrán varios códigos que debemos comparar con el operador IN. Miremos las tablas:
Tabla CLIENTE
Tabla FACTURA
A continuación realizaremos una consulta para resolver el enunciado mediante el operador IN y una subconsulta:
SELECT NOMBRE, APELLIDO, EDADFROM CLIENTEWHERE ID IN(SELECT IDCLIENTE FROM FACTURA WHERE FECHABETWEEN'2013-05-01'AND'2013-07-01')
Si compruebas en la tabla factura, estos 6 clientes fueron los que compraron en el rango de tiempo establecido.
Dicen que el operador NOT puede combinarse con IN, es verdad?
Claro!
Al hacerlo estaremos diciendo : " quiero consultar aquellos valores que NO ESTÁN dentro del siguiente conjunto...".
En el anterior ejemplo vimos que 6 de nuestros 10 clientes aparecieron en los resultados, ya que compraron en el rango de fechas. Ahora veremos quienes no compraron en ese rango mediante el operador NOT:
SELECT NOMBRE, APELLIDO, EDADFROM CLIENTEWHERE ID NOT IN( SELECT IDCLIENTE FROM FACTURA WHEREFECHABETWEEN'2013-05-01'AND'2013-07-01')
Listo!, los 4 clientes que no aparecieron en la anterior consulta han aparecido aquí, al no haber comprado en las fechas establecidas.James Revelo Urrea - Desarrollador independiente