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:
    Insira a descrição da imagem aqui

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;

Insira a descrição da imagem aqui

  • 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;

Insira a descrição da imagem aqui

  • 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:
Insira a descrição da imagem aqui

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

Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/weixin_46505978/article/details/130927814
Recomendado
Clasificación