Articles

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:

SELECT column1,column2,...FROM table_nameWHERE (expr|column_1) IN ('value1','value2',...);
Code language: SQL (Structured Query Language) (sql)

Examinemos la consulta con más detalle:

  • Usa un column o una expresión ( expr ) con el operador IN en la cláusula WHERE.
  • 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ón expr.
  • 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:

Tabla de oficinas

Si quieres encontrar las oficinas que se encuentran en EE. y Francia, puede utilizar el operador IN como la siguiente consulta:

SELECT officeCode, city, phone, countryFROM officesWHERE country IN ('USA' , 'France');
Code language: SQL (Structured Query Language) (sql)

Prueba

Ejemplo de lista de países IN de MySQL
Puedes conseguir el mismo resultado con el operador OR como la siguiente consulta:

SELECT officeCode, city, phoneFROM officesWHERE country = 'USA' OR country = 'France';
Code language: SQL (Structured Query Language) (sql)

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:

SELECT officeCode, city, phoneFROM officesWHERE country NOT IN ('USA' , 'France');
Code language: SQL (Structured Query Language) (sql)

Prueba

MySQL NOT IN oficinas ejemplo

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:

tabla ordersdetails

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:

SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN( SELECT orderNumber FROM orderDetails GROUP BY orderNumber HAVING SUM(quantityOrdered * priceEach) > 60000);
Code language: SQL (Structured Query Language) (sql)

Pruébalo

MySQL IN con ejemplo de subconsulta

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:

SELECT orderNumberFROM orderDetailsGROUP BY orderNumberHAVING SUM(quantityOrdered * priceEach) > 60000;
Code language: SQL (Structured Query Language) (sql)

Prueba

Subconsulta MySQL IN

Segundo, la consulta externa utiliza el operador IN en la cláusula WHERE para obtener datos de la tabla orders:

SELECT orderNumber, customerNumber, status, shippedDateFROM ordersWHERE orderNumber IN (10165,10287,10310);
Code language: SQL (Structured Query Language) (sql)

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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *