Introducción y ejemplos de uso de MySQL UNION
1 Introducción de uso
ilustrar | |
---|---|
efecto | El operador UNION se utiliza para combinar los conjuntos de resultados de dos o más declaraciones SELECT. |
Requisitos previos para su uso | Cada instrucción SELECT en UNION debe tener el mismo número de columnas 1. Los tipos de datos de estas columnas deben ser compatibles: los tipos no tienen que ser idénticos, pero deben ser implícitamente convertibles. 2. Las columnas de cada instrucción SELECT también deben estar organizadas en el mismo orden. |
sintaxis de la UNIÓN | SELECCIONE nombre_columna(s) DE la tabla1 UNION SELECCIONE nombre_columna(s) DE la tabla2; |
UNIÓN TODA la sintaxis | SELECCIONE nombre(s) de columna DE la tabla1 UNION ALL SELECCIONE nombre(s) de columna DE la tabla2; |
La diferencia entre UNION y UNION TODOS | Union comprimirá automáticamente los resultados duplicados en múltiples conjuntos de resultados, mientras que union all mostrará todos los resultados, independientemente de si están duplicados o no. |
2 ejemplos de uso
2.1 Preparación de datos
- Tabla de base de datos de prueba: test_onion
- Datos de la base de datos:
2.2 Ejemplo de consulta
-
Suponga el requisito de la consulta: encuentre la cantidad de niños y niñas en cada departamento, es decir, los resultados se enumeran como el nombre del departamento, la cantidad de niños y la cantidad de niñas.
-
Consulta el número de estudiantes varones en cada departamento:
SELECT
org_name, count(user_sex) as man_num
FROM
test_union
where user_sex = '男'
GROUP BY org_name;
- Consulta el número de alumnas en cada departamento:
SELECT
org_name, count(user_sex) as woman_num
FROM
test_union
where user_sex = '女'
GROUP BY org_name;
- Integra los dos resultados:
SELECT
org_name,
man_num,
woman_num
FROM
(
SELECT
org_name,
count(user_sex) AS man_num,
'' AS woman_num
FROM
test_union
WHERE
user_sex = '男'
GROUP BY
org_name
UNION ALL
SELECT
org_name,
'' AS man_num,
count(user_sex) AS woman_num
FROM
test_union
WHERE
user_sex = '女'
GROUP BY
org_name
) c
Los resultados de la integración son los siguientes:
Sin embargo, como se puede ver en los resultados anteriores, las dos partes de los datos están completamente empalmadas. El resultado ideal es que los datos masculinos y femeninos del mismo departamento estén en un resultado de consulta. La modificación es la siguiente:
SELECT
org_name,
SUM(man_num) as man_num,
SUM(woman_num) as woman_num
FROM
(
SELECT
org_name,
count(user_sex) AS man_num,
'' AS woman_num
FROM
test_union
WHERE
user_sex = '男'
GROUP BY
org_name
UNION ALL
SELECT
org_name,
'' AS man_num,
count(user_sex) AS woman_num
FROM
test_union
WHERE
user_sex = '女'
GROUP BY
org_name
) c
GROUP BY org_name