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_nameWHERE a=10 AND B=1) UNION (SELECT a FROMtbl_nameWHERE 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_nameWHERE a=10 AND B=1 ORDER BY a LIMIT 10) UNION (SELECT a FROMtbl_nameWHERE 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.
