MySQL
UNIÓN
Buscar..
Sintaxis
- UNION DISTINCT - Deducciones después de combinar los SELECTs
- UNION ALL - no dedup (más rápido)
- UNION - el valor predeterminado es DISTINCT
- SELECT ... UNION SELECT ... - está bien, pero es ambiguo en
ORDER BY
- (SELECCIONAR ...) UNIÓN (SELECCIONAR ...) ORDENAR POR ... - resuelve la ambigüedad
Observaciones
UNION no usa múltiples CPUs.
UNION siempre * implica una tabla temporal para recopilar los resultados. * A partir de 5.7.3 / MariaDB 10.1, algunas formas de UNION entregan los resultados sin usar una tabla tmp (por lo tanto, más rápido).
Combinando sentencias SELECT con UNION
Puede combinar los resultados de dos consultas idénticamente estructuradas con la palabra clave UNION
.
Por ejemplo, si desea una lista de toda la información de contacto de dos tablas separadas, authors
y editors
, por ejemplo, puede usar la palabra clave UNION
manera:
select name, email, phone_number
from authors
union
select name, email, phone_number
from editors
Usar la union
por sí misma eliminará los duplicados. Si necesita mantener duplicados en su consulta, puede usar la palabra clave ALL
así: UNION ALL
.
ORDEN POR
Si necesita ordenar los resultados de una UNION, use este patrón:
( SELECT ... )
UNION
( SELECT ... )
ORDER BY
Sin los paréntesis, el último ORDEN POR pertenecería al último SELECCIONAR.
Paginación via OFFSET
Al agregar un LÍMITE a una UNIÓN, este es el patrón a utilizar:
( SELECT ... ORDER BY x LIMIT 10 )
UNION
( SELECT ... ORDER BY x LIMIT 10 )
ORDER BY x LIMIT 10
Como no puede predecir de qué SELECT (s) vendrá el "10", necesita obtener 10 de cada uno, luego reduzca la lista, repitiendo ORDER BY
y LIMIT
.
Para la 4ta página de 10 artículos, este patrón es necesario:
( SELECT ... ORDER BY x LIMIT 40 )
UNION
( SELECT ... ORDER BY x LIMIT 40 )
ORDER BY x LIMIT 30, 10
Es decir, recopile el valor de 4 páginas en cada SELECT
, luego haga la OFFSET
en la UNION
.
Combinando datos con diferentes columnas.
SELECT name, caption as title, year, pages FROM books
UNION
SELECT name, title, year, 0 as pages FROM movies
Al combinar 2 conjuntos de registros con diferentes columnas, emule los que faltan con los valores predeterminados.
UNION ALL Y UNION
SELECCIONA 1,22,44 UNION SELECCIONA 2,33,55
SELECCIONA 1,22,44 UNION SELECCIONA 2,33,55 UNION SELECCIONA 2,33,55
El resultado es el mismo que el de arriba.
usa UNION ALL
cuando
SELECCIONE 1,22,44 UNION SELECCIONE 2,33,55 UNION TODO SELECCIONE 2,33,55
Combinar y combinar datos en diferentes tablas de MySQL con las mismas columnas en filas únicas y ejecutar la consulta
Este UNION ALL combina datos de varias tablas y sirve como un alias de nombre de tabla para usar en sus consultas:
SELECT YEAR(date_time_column), MONTH(date_time_column), MIN(DATE(date_time_column)), MAX(DATE(date_time_column)), COUNT(DISTINCT (ip)), COUNT(ip), (COUNT(ip) / COUNT(DISTINCT (ip))) AS Ratio
FROM (
(SELECT date_time_column, ip FROM server_log_1 WHERE state = 'action' AND log_id = 150) UNION ALL
(SELECT date_time_column, ip FROM server_log_2 WHERE state = 'action' AND log_id = 150) UNION ALL
(SELECT date_time_column, ip FROM server_log_3 WHERE state = 'action' AND log_id = 150) UNION ALL
(SELECT date_time_column, ip FROM server_log WHERE state = 'action' AND log_id = 150)
) AS table_all
GROUP BY YEAR(date_time_column), MONTH(date_time_column);