SELECT ... UNION [ALL | DISTINCT] SELECT ... [UNION [ALL | DISTINCT] SELECT ...]
UNION
se usa para combinar el resultado de
un número de comandos SELECT
en un
conjunto de resultados.
Las columnas seleccionadas lisatadas en posiciones
correspondientes de cada comando SELECT
deben tener el mismo tipo. (Por ejemplo, la primera columna
seleccionada por el primer comando debe tener el mismo tipo
que la primer columna seleccionada por otros comandos.) Los
nombres de columna usados por el primer comando
SELECT
se usan como nombres de columna para
los resultados retornados.
Los comandos SELECT
son comandos select
normales, pero con las siguientes restricciones:
Sólo el último comando SELECT
puede
usar INTO OUTFILE
.
HIGH_PRIORITY
no puede usarse con
comandos SELECT
que sean parte de una
UNION
. Si lo especifica para el primer
SELECT
, no tiene efecto. Si lo
especifica para cualquier SELECT
posterior, aparece un error de sintaxis.
Si no usa la palabra clave ALL
para
UNION
, todos los registros retornados son
únicos, como si hubiera hecho un DISTINCT
para el conjunto de resultados total. Si especifica
ALL
, obtiene todos los registros
coincidentes de todos los comandos SELECT
usados.
La palabra clave DISTINCT
es una palabra
opcional que no tiene efecto, pero se permite en la sintaxis
como requiere el estándar SQL . (En MySQL,
DISTINCT
representa el comportamiento por
defecto de una union.)
En MySQL 5.0, puede mezclar UNION ALL
y
UNION DISTINCT
en la misma consulta. Tipos
de UNION
mezclados se tratan de forma que
una unión DISTINCT
sobreescribe cualquier
unión ALL
a su izquierda. Una unión
DISTINCT
puede producirse explícitamente
usando UNION DISTINCT
o implícitamente
usando UNION
sin palabra clave
DISTINCT
o ALL
a
continuación.
Si quiere usar una cláusula ORDER BY
o
LIMIT
para ordenar o limitar el resultado
UNION
entero, ponga entre paréntesis los
comandos SELECT
individuales y ponga el
ORDER BY
o LIMIT
tras el
último. El siguiente ejemplo usa ambas cláusulas:
(SELECT a FROMtbl_name
WHERE a=10 AND B=1) UNION (SELECT a FROMtbl_name
WHERE a=11 AND B=2) ORDER BY a LIMIT 10;
Este tipo de ORDER BY
no puede usar
referencias de columnas que incluyan un nombre de columna
(esto es, nombres en formato
tbl_name.col_name
). En su lugar,
proporcione un alias de columna al primer comando
SELECT
y refiérase al alias en el
ORDER BY
, o a la columna en el
ORDER BY
usando su posición de columna.
(Un alias es preferible porque el uso de la posición de la
columna está obsoleto.)
Para aplicar ORDER BY
o
LIMIT
a un SELECT
individual, ponga la cláusula dentro de los paréntesis
alrededor del SELECT
:
(SELECT a FROMtbl_name
WHERE a=10 AND B=1 ORDER BY a LIMIT 10) UNION (SELECT a FROMtbl_name
WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
Los ORDER BY
para comandos
SELECT
individuales entre paréntesis
tienen efecto sólo al combinarlos con
LIMIT
. De otro modo, el ORDER
BY
se optimiza a parte.
En MySQL 5.0, los tipos y longitudes de las columnas en el
conjunto de resultados de una UNION
tienen
en cuenta los valores recibidos por todos los comandos
SELECT
. Por ejemplo, considere lo
siguiente:
mysql> SELECT REPEAT('a',1) UNION SELECT REPEAT('b',10); +---------------+ | REPEAT('a',1) | +---------------+ | a | | bbbbbbbbbb | +---------------+
(En alguna versión anterior de MySQL, el segundo registro se habría truncado a una longitud de 1.)
É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.