Database
 sql >> Base de Dados >  >> RDS >> Database

Como combinar os resultados de duas consultas no SQL

Problema:


Você gostaria de exibir dados de determinadas colunas (de um tipo de dados semelhante) de duas tabelas no SQL.

Exemplo:


Existem duas tabelas em nosso banco de dados:employee e customer .

O employee tabela contém dados nas seguintes colunas:id , nome_nome , sobrenome e idade .
id first_name last_name idade
1 Tom Moleiro 22
2 João Smith 26
3 Lisa Williams 30
4 Charles Davis 21
5 James Mouro 22

O customer tabela contém dados nas seguintes colunas:id , nome_nome , sobrenome e idade .
id first_name last_name idade
1 Milão Smith 45
2 Charles Davis 21
3 Marcar Apoiador 19

Em um conjunto de resultados, vamos exibir o nome, sobrenome e idade de todas as pessoas no banco de dados, funcionários e clientes.

Solução 1:


Usaremos UNION ALL para unir dados de colunas em duas tabelas.

Aqui está a consulta que você escreveria:
SELECT first_name, last_name, age FROM employee
UNION ALL
SELECT first_name, last_name, age FROM customer;

Aqui está o resultado:
first_name last_name idade
Tom Moleiro 22
João Smith 26
Lisa Williams 30
Charles Davis 21
James Mouro 28
Milão Smith 45
Charles Davis 21
Marcar Apoiador 19

Discussão:


Use a cláusula UNION ALL para unir dados de colunas em duas ou mais tabelas. Em nosso exemplo, juntamos dados do employee e customer mesas. À esquerda da palavra-chave UNION ALL, coloque a primeira instrução SELECT para obter dados da primeira tabela (no nosso exemplo, a tabela employee ). À direita, use outra instrução SELECT para obter dados da segunda tabela (em nosso exemplo, customer ).

Lembre-se de que os dados selecionados em ambas as tabelas devem ser do mesmo tipo de dados em cada coluna. Por exemplo, se a primeira coluna no primeiro SELECT for um tipo de dados string, a primeira coluna no segundo SELECT também deverá ser um tipo de dados string. Se a segunda coluna na primeira instrução SELECT for um número inteiro, a segunda coluna na segunda tabela também deverá ser do tipo inteiro.

Na primeira consulta, selecionamos a idade (a idade do funcionário, que é um tipo de dados inteiro) para a terceira coluna. Portanto, a terceira coluna no segundo SELECT também é um valor inteiro; é a idade do cliente.

As segundas colunas em ambas as instruções SELECT são do mesmo tipo de dados. No entanto, se os valores forem iguais nas duas tabelas, eles serão exibidos várias vezes; por exemplo, 'Charles Davis 21' é mostrado duas vezes no conjunto de resultados.

E se você não quiser vários registros idênticos na tabela de resultados? Nesse caso, use UNION . É semelhante a UNION ALL , mas remove registros duplicados. Veja o exemplo a seguir.

Solução 2:


Aqui está a consulta que evita registros duplicados:
SELECT first_name, last_name FROM employee
UNION 
SELECT first_name, last_name FROM customer;

Aqui está o resultado da consulta acima:
first_name last_name
Marcar Apoiador
James Mouro
João Smith
Charles Davis
Milão Smith
Tom Moleiro
Lisa Williams

Observação:

UNION ALL é mais rápido que UNION , mas UNION remove linhas duplicadas. A escolha depende dos dados de resultado que precisamos.