MySQL IN
Resumen: en este tutorial, aprenderá a utilizar el operador MySQL IN para determinar si un valor especificado coincide con cualquier valor de una lista o una subconsulta.
Introducción al operador IN de MySQL
El operador IN permite determinar si un valor especificado coincide con cualquier valor de un conjunto de valores o devuelto por una subconsulta.
Lo siguiente ilustra la sintaxis del operador IN:
Code language: SQL (Structured Query Language) (sql)SELECT column1,column2,...FROM table_nameWHERE (expr|column_1) IN ('value1','value2',...);
Examinemos la consulta con más detalle:
- Usa un
columno una expresión (expr) con el operadorINen la cláusulaWHERE. - Separe los valores de la lista mediante comas (,).
El operador IN devuelve 1 si el valor del column_1 o el resultado de la expresión expr es igual a cualquier valor de la lista, en caso contrario, devuelve 0.
Cuando los valores de la lista son todos constantes, MySQL realiza los siguientes pasos:
- Primero, evalúa los valores en función del tipo de la expresión
column_1o del resultado de la expresiónexpr. - Segundo, ordena los valores.
- Tercero, busca el valor utilizando el algoritmo de búsqueda binaria. Por lo tanto, una consulta que utiliza el operador
INcon una lista de constantes tiene un rendimiento muy rápido.
Nota que si el expr o cualquier valor de la lista es NULL, el operador IN devuelve NULL.
Puedes combinar el operador IN con el operador NOT para determinar si un valor no coincide con ningún valor de una lista o una subconsulta. Y también puedes utilizar el operador IN en la cláusula WHERE de otras sentencias como UPDATE, y DELETE.
Ejemplos del operador IN de MySQL
Practiquemos con algunos ejemplos de uso del operador IN. Veamos la siguiente offices tabla de la base de datos de ejemplo:

Si quieres encontrar las oficinas que se encuentran en EE. y Francia, puede utilizar el operador IN como la siguiente consulta:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phone, countryFROM officesWHERE country IN ('USA' , 'France');
Prueba

Puedes conseguir el mismo resultado con el operador OR como la siguiente consulta:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phoneFROM officesWHERE country = 'USA' OR country = 'France';
Pruébalo
En caso de que la lista tenga muchos valores, necesitas construir una sentencia muy larga con múltiples operadores OR. De ahí que el operador IN permita acortar la consulta y hacerla más legible.
Para obtener las oficinas que no se encuentran en Estados Unidos y Francia, se utiliza NOT IN en la cláusula WHERE de la siguiente manera:
Code language: SQL (Structured Query Language) (sql)SELECT officeCode, city, phoneFROM officesWHERE country NOT IN ('USA' , 'France');
Prueba

Utilizando MySQL IN con una subconsulta
El operador IN se utiliza a menudo con una subconsulta. En lugar de proporcionar una lista de valores literales, la subconsulta obtiene una lista de valores de una o más tablas y los utiliza como valores de entrada del operador IN.
Veamos las tablas orders y orderDetails de la base de datos de ejemplo:

Por ejemplo, si quieres encontrar los pedidos cuyos valores totales son mayores que 60,000, utiliza el operador IN como se muestra en la siguiente consulta:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN( SELECT orderNumber FROM orderDetails GROUP BY orderNumber HAVING SUM(quantityOrdered * priceEach) > 60000);
Pruébalo

Toda la consulta anterior se puede descomponer en dos consultas distintas.
En primer lugar, la subconsulta devuelve una lista de números de orden cuyos valores son mayores que 60,000 utilizando las cláusulas GROUP BY y HAVING:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumberFROM orderDetailsGROUP BY orderNumberHAVING SUM(quantityOrdered * priceEach) > 60000;
Prueba

Segundo, la consulta externa utiliza el operador IN en la cláusula WHERE para obtener datos de la tabla orders:
Code language: SQL (Structured Query Language) (sql)SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN (10165,10287,10310);
Prueba
En este tutorial, has aprendido a utilizar el operador MySQL IN para determinar si un valor coincide con cualquier valor de una lista de valores.
- ¿Ha sido útil este tutorial?
- SíNo
Se puede decir que es útil.