Introdução e exemplos de uso do MySQL UNION
1 Introdução ao uso
ilustrar | |
---|---|
efeito | O operador UNION é usado para combinar os conjuntos de resultados de duas ou mais instruções SELECT |
Pré-requisitos para uso | Cada instrução SELECT em um UNION deve ter o mesmo número de colunas 1. Os tipos de dados dessas colunas devem ser compatíveis: os tipos não precisam ser exatamente iguais, mas devem ser implicitamente conversíveis. 2. As colunas em cada instrução SELECT também devem ser organizadas na mesma ordem |
Sintaxe UNIÃO | SELECT nome(s) da(s) coluna(s) FROM tabela1 UNION SELECT nome(s) da(s) coluna(s) FROM tabela2; |
Sintaxe UNION ALL | SELECT nome(s) coluna(s) FROM tabela1 UNION ALL SELECT nome(s) coluna(s) FROM tabela2; |
A diferença entre UNION e UNION ALL | Union compactará automaticamente resultados duplicados em vários conjuntos de resultados, enquanto union all exibirá todos os resultados, independentemente de serem duplicados ou não. |
2 Exemplos de uso
2.1 Preparação de dados
- Tabela de banco de dados de teste: test_onion
- Dados do banco de dados:
2.2 Exemplo de consulta
-
Suponha o requisito da consulta: Encontre o número de meninos e meninas em cada departamento, ou seja, os resultados são listados como o nome do departamento, o número de meninos e o número de meninas.
-
Confira a quantidade de alunos do sexo masculino em cada departamento:
SELECT
org_name, count(user_sex) as man_num
FROM
test_union
where user_sex = '男'
GROUP BY org_name;
- Confira a quantidade de alunas em cada departamento:
SELECT
org_name, count(user_sex) as woman_num
FROM
test_union
where user_sex = '女'
GROUP BY org_name;
- Integre os dois 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
Os resultados da integração são os seguintes:
No entanto, como pode ser visto nos resultados acima, as duas partes dos dados estão completamente unidas. O resultado ideal é que os dados masculinos e femininos do mesmo departamento estejam em um resultado de consulta. A modificação é a seguinte:
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