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
column
o una expresión (expr
) con el operadorIN
en 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_1
o 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
IN
con 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.