En su forma más sencilla, una subconsulta es una subconsulta
escalar que retorna un único valor. Una subconsulta escalar
es un operando simple, y puede usarlo prácticamente en
cualquier sitio en que un valor de columna o literal sea
legal, y puede esperar que tenga las características que
tienen todos los operandos: un tipo de datos, una longitud,
una indicación de si puede ser NULL
,
etcétera. Por ejemplo:
CREATE TABLE t1 (s1 INT, s2 CHAR(5) NOT NULL); INSERT INTO t1 VALUES(100, 'abcde'); SELECT (SELECT s2 FROM t1);
La subconsulta en este SELECT
retorna un
valor único ('abcde'
) que tiene un tipo de
datos CHAR
, una longitud de 5, un conjunto
de caracteres y una colación iguales a la que había por
defecto cuando se realizó el CREATE TABLE
, y una indicación que el valor en la columna puede ser
NULL
. De hecho, casi todas las consultas
pueden ser NULL
. Si la tabla usada en este
ejemplo estuviese vacía, la tabla de la subconsulta sería
NULL
.
Hay algunos contextos en que una subconsulta escalar no se
puede usar. Si un comando permite sólo un valor literal, no
puede usar una subconsulta. Por ejemplo,
LIMIT
necesita argumentos enteros, y
LOAD DATA
necesita una cadena con un nombre
de fichero. No puede usar subconsultas para proporcionar estos
valores.
Cuando vea los ejemplos en las siguientes secciones que
contengan el constructor (SELECT column1 FROM
t1)
, imagine que su própio código contiene
construcciones mucho más diversas y complejas.
Por ejemplo, suponga que hacemos dos tablas:
CREATE TABLE t1 (s1 INT); INSERT INTO t1 VALUES (1); CREATE TABLE t2 (s1 INT); INSERT INTO t2 VALUES (2);
Luego realice SELECT
:
SELECT (SELECT s1 FROM t2) FROM t1;
El resultado es 2
ya que hay un registro en
t2
que contiene una columna
s1
con un valor de 2
.
Una subconsulta escalar puede ser parte de una expresión. No olvide los paréntesis, incluso si la subconsulta es un operando que proporciona un argumento para una función. Por ejemplo:
SELECT UPPER((SELECT s1 FROM t1)) FROM t2;
É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.