El uso más común de una subconsulta es de la forma:
non_subquery_operand
comparison_operator
(subquery
)
Donde comparison_operator
es uno de
estos operadores:
= > < >= <= <>
Por ejemplo:
... 'a' = (SELECT column1 FROM t1)
Tiempo atrás el único sitio legal para una subconsulta era la parte derecha de la comparación, y puede encontrar algunos SGBDs que insistan en ello.
He aquí un ejemplo de una comparación común de subconsultas
que no puede hacerse mediante un join. Encuentra todos los
valores en la tabla t1
que son iguales a un
valor máximo en la tabla t2
:
SELECT column1 FROM t1 WHERE column1 = (SELECT MAX(column2) FROM t2);
Aquí hay otro ejemplo, que de nuevo es imposible de hacer con
un join ya que involucra agregación para una de las tablas.
Encuentra todos los registros en la tabla
t1
que contengan un valor que ocurre dos
veces en una columna dada:
SELECT * FROM t1 AS t WHERE 2 = (SELECT COUNT(*) FROM t1 WHERE t1.id = t.id);
Para una comparación realizada con uno de estos operadores,
la subconsulta debe retornar un escalar, con la excepción que
=
puede usarse con subconsultas de
registro. Consulte Sección 13.2.8.5, “Subconsultas de registro”.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.