[+/-]
ANY
, IN
y
SOME
ALL
EXISTS
y NOT EXISTS
FROM
Una subconsulta es un comando SELECT
dentro
de otro comando.
MySQL 5.0 soporta todas las formas de subconsultas y operaciones que requiere el estándar SQL, así como algunas características específicas de MySQL.
Aquí hay un ejemplo de subconsulta:
SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
En este ejemplo, SELECT * FROM t1 ...
es la
consulta externa (o comando
externo), y (SELECT column1 FROM
t2)
es la subconsulta. Decimos
que la subconsulta está anidada dentro de
la consulta exterior, y de hecho, es posible anidar subconsultas
dentro de otras subconsultas hasta una profundidad considerable.
Una subconsulta debe siempre aparecer entre paréntesis.
Las principales ventajas de subconsultas son:
Permiten consultas estructuradas de forma que es posible aislar cada parte de un comando.
Proporcionan un modo alternativo de realizar operaciones que de otro modo necesitarían joins y uniones complejos.
Son, en la opinión de mucha gente, leíbles. De hecho, fue la innovación de las subconsultas lo que dio a la gente la idea original de llamar a SQL “Structured Query Language.”
Aquí hay un comando de ejemplo que muestra los puntos principales de la sintaxis de subconsultas como especifica el estándar SQL y soporta MySQL:
DELETE FROM t1 WHERE s11 > ANY (SELECT COUNT(*) /* no hint */ FROM t2 WHERE NOT EXISTS (SELECT * FROM t3 WHERE ROW(5*t2.s1,77)= (SELECT 50,11*s1 FROM t4 UNION SELECT 50,77 FROM (SELECT * FROM t5) AS t5)));
Una subconsulta puede retornar un escalar (un valor único), un registro, una columna o una tabla (uno o más registros de una o más columnas). Éstas se llaman consultas de escalar, columna, registro y tabla. Las subconsultas que retornan una clase particular de resultado a menudo pueden usarse sólo en ciertos contextos, como se describe en las siguientes secciones.
Hay pocas restricciones sobre los tipos de comandos en que
pueden usarse las subconsultas. Una subconsulta puede contener
cualquiera de las palabras claves o cláusulas que puede
contener un SELECT
ordinario:
DISTINCT
, GROUP BY
,
ORDER BY
, LIMIT
, joins,
trucos de índices, constructores UNION
,
comentarios, funciones, y así.
Una restricción es que el comando exterior de una subconsulta
debe ser: SELECT
, INSERT
,
UPDATE
, DELETE
,
SET
, o DO
. Otra
restricción es que actualmente no puede modificar una tabla y
seleccionar de la misma tabla en la subconsulta. Esto se aplica
a comandos tales como DELETE
,
INSERT
, REPLACE
, y
UPDATE
. Una discusión más comprensible de
las restricciones en las subconsultas se da en
Apéndice H, Restricciones en características de MySQL.
É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.