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.