Clase 09 · 19 minGratis

IN, EXISTS, ANY y ALL

Clase 9 del curso gratis SQL desde Cero: operadores que comparan contra el resultado de una subconsulta. IN con listas dinámicas, EXISTS para registros relacionados y cómo reemplazar ANY y ALL en SQLite.

Toca cualquier marca ▸ 0:00 de los apuntes y el video salta a ese momento. Abrir en YouTube

Estos operadores trabajan con conjuntos de valores, y ese conjunto puede salir de una subconsulta . La base tiene tres tablas :

Pruébalo · base operadores

productos (id, nombre, precio), clientes (id, nombre, ciudad, edad) y ventas, que dice qué cliente compró qué producto, cuántas unidades y cuándo.

IN con una subconsulta

En la clase 4, la lista de IN estaba escrita a mano. Ahora sale de los datos: los clientes que hicieron al menos una compra.

Pruébalo · base operadores

La subconsulta de un IN tiene que devolver una sola columna: un valor por registro . Y con NOT IN, los que nunca compraron.

EXISTS: ¿hay al menos un registro relacionado?

EXISTS no compara valores: devuelve verdadero si la subconsulta trae al menos una fila y falso si viene vacía . Por eso da igual qué selecciones adentro; se acostumbra SELECT 1.

Los productos que alguna vez se vendieron en más de dos unidades :

Pruébalo · base operadores

La subconsulta mira, producto por producto, si hay una venta suya que cumpla la condición. Solo el reloj de titanio . Lo mismo se puede resolver con un INNER JOIN y un filtro :

Pruébalo · base operadores

Usa la que te resulte más intuitiva: las dos devuelven lo mismo .

ANY y ALL

  • precio > ANY (lista) — verdadero si es mayor que al menos uno de la lista. Basta con superar al mínimo .
  • precio > ALL (lista) — verdadero si es mayor que todos. Hay que superar al máximo.

SQLite no tiene ANY ni ALL (PostgreSQL, SQL Server y MySQL sí). La equivalencia con MIN y MAX funciona en cualquier motor. Los productos más caros que alguno de los productos 1, 2 y 3 (que cuestan 50, 120 y 300) :

Pruébalo · base operadores

Y los más caros que todos ellos :

Pruébalo · base operadores

Solo el reloj de titanio, de 400, supera a los tres . Siempre hay una forma de escribir la consulta sin el operador que tu motor no tiene .

Retos de esta clase

1. Los productos que nunca se han vendido.

Reto · base operadores

2. Con EXISTS: los clientes que compraron algún producto de más de 100. Todas las columnas de clientes.

Reto · base operadores

3. Los clientes mayores que todos los clientes de Cuenca (sin ALL).

Reto · base operadores

Sigue con la clase 10

CREATE TABLE y ALTER TABLE

Seguir el canal de WhatsApp