PostgreSQL IN
La cláusula `IN` de PostgreSQL se utiliza para filtrar filas en función de si el valor de una columna coincide con algún valor de una lista especificada. Se utiliza habitualmente en las sentencias `SELECT`, `UPDATE` y `DELETE` para agilizar las consultas que implican varios valores.
Utilización
La cláusula `IN` se utiliza cuando necesitas comprobar si un valor existe dentro de un conjunto de valores dados. Simplifica las consultas permitiendo comprobar varios valores a la vez.
SELECT column_name
FROM table_name
WHERE column_name IN (value1, value2, ...);
En esta sintaxis, la cláusula `IN` se utiliza para determinar si `nombre_columna` coincide con alguno de los valores proporcionados en los paréntesis.
Ejemplos
1. Uso básico de IN
SELECT *
FROM products
WHERE category_id IN (1, 2, 3);
Esta consulta selecciona todas las columnas de la tabla `productos` en las que `category_id` es 1, 2 ó 3.
2. Utilizar IN con cadenas
SELECT employee_id, name
FROM employees
WHERE department IN ('Sales', 'Marketing');
Este ejemplo recupera `employee_id` y `name` de la tabla `employees` para los que trabajan en los departamentos de "Ventas" o "Marketing".
3. IN con subconsulta
SELECT order_id, order_date
FROM orders
WHERE customer_id IN (SELECT customer_id FROM customers WHERE country = 'USA');
Aquí, la cláusula `IN` se utiliza con una subconsulta para encontrar los pedidos en los que el cliente es de EEUU. Ten en cuenta que la subconsulta debe devolver una única columna para poder utilizarla con `IN`.
Consejos y buenas prácticas
- Utiliza IN para mayor claridad. Opta por `IN` cuando compruebes varios valores para mejorar la legibilidad respecto a varias condiciones `OR`.
- Ten en cuenta el rendimiento. Para listas grandes, considera la posibilidad de utilizar una unión de tablas o una tabla temporal para optimizar el rendimiento de la consulta. Unir tablas en columnas indexadas puede ser más eficaz que utilizar `IN` con una lista grande de valores.
- Aprovecha las subconsultas. Utiliza subconsultas dentro de `IN` para manejar condiciones complejas y listas generadas dinámicamente.
- Evita las trampas nulas. Recuerda que si algún valor de la lista es `NULL`, el resultado será `false` a menos que se maneje explícitamente. Considera la posibilidad de utilizar `IS NOT NULL` explícitamente para tratar los posibles valores `NULL` de la lista, ya que `IN` se evalúa como `false` si algún valor es `NULL`.