Unir duas tabelas em SQL

outubro 24, 2007

O operador UNION permite a combinação de mais de dois resultados de uma instrução SQL em um único resultado de consulta. Os resultados combinados no operador UNION devem ter a mesma estrutura, ou seja, a mesma quantidade e tipos de campos devem coincidir em todas as consultas.

Segue abaixo a sintaxe da utilização do operador UNION:

INSTRUCAO_SELECT

UNION [ALL]

INSTRUCAO_SELECT

Para demonstrar como se utiliza o operador UNION, segue abaixo uma instrução de criação de uma tabela de clientes referente à pessoas físicas (ClienteFisico) e outra contendo as informações de clientes referente à pessoas jurídicas, com campos diferentes é claro (se não, não haveria a necessidade de criação de uma segunda tabela de diferenciação).

CREATE TABLE dbo.ClienteFisico
(

ID bigint NOT NULL,

Nome varchar(64) NOT NULL,

RG varchar(16) NOT NULL,

Nascimento datetime NOT NULL

) ON [PRIMARY]

CREATE TABLE dbo.ClienteJuridico
(

ID bigint NOT NULL,

NomeFantasia varchar(64) NOT NULL,

CNPJ bigint NOT NULL,

IE varchar(16) NOT NULL

) ON [PRIMARY]

Após a criação das tabelas acima pode-se unir ambas em um único resultado de consulta.

SELECT

ID,

Nome

FROM

ClienteFisico

UNION

SELECT

ID,

NomeFantasia

FROM

ClienteJuridico

A consulta acima irá retornar todos os clientes físicos e jurídicos existentes nas respectivas tabelas (ClienteFisico e ClienteJuridico)

SELECT

ID,

Nome,

RG

FROM

ClienteFisico

UNION

SELECT

ID,

NomeFantasia,

CNPJ

FROM

ClienteJuridico

Esta consulta não irá funcionar, ocorrerá um erro, porque os tipos não correspondem. O campo RG é do tipo VARCHAR que contém até 16 caracteres enquanto o campo CNPJ é do tipo CHAR que contém 14 caracteres. Este problema é fácil de ser resolvido, basta converter o resultado de um dos campos para que os dois tenham o mesmo tipo.

SELECT

ID,

Nome,

RG

FROM

ClienteFisico

UNION

SELECT

ID,

NomeFantasia,

CONVERT(VARCHAR(16), CNPJ) AS CNPJ

FROM

ClienteJuridico

Acima é demonstrado a conversão feita no campo CNPJ atribuindo um alias (codinome) ao campo, caso não seja feito, irá mostrar o campo sem nome no título do resultado.

Existe um operador que pode ser utilizado com o UNION, o ALL. A consulta com o operador ALL indica que NÃO será eliminado nenhuma duplicidade que ocorrer entre as tabelas, ou seja, mostrará tudo que existir nas tabelas que estão sendo unidas com resultado. Se omitir o ALL, como padrão, o SQL remove linhas dos resultados que duplicaram.

SELECT

ID,

Nome

FROM

ClienteFisico

UNION ALL

SELECT

ID,

NomeFantasia

FROM

ClienteJuridico

É claro que não irá servir para muita coisa o operador ALL na consulta acima, porque não existe nenhum cliente físico que possua o mesmo nome de um cliente jurídico (pelo menos que eu conheça).

7 Respostas to “Unir duas tabelas em SQL”

  1. Ricardo Says:

    Dah hora. Não sabia que funcionava com nome de campos diferentes. Pensava que o tipo e os nomes tinham que ser iguais (colocando alias nos nomes dos campos para igualar).

    Continue assim que tá bom.

  2. murilo Says:

    Tem como gerar uma nova tabela com os resultados do union?

  3. Lucas Says:

    oiaaa … o mardito tem blog .. eu mo lendo aqui depois que eu vi que era seu ….

    grande Garnizão.
    😄


  4. Cara vlw se me deu uma luz aqui heim dai pesquisando vi que para usar WHERE ou ORDER BY e preciso usar parenteses fica ai a dica

    ‘(SELECT a FROM nome_tabela WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
    UNION
    (SELECT a FROM nome_tabela WHERE a=11 AND B=2 ORDER BY a LIMIT 10)’;

    ^_^


  5. tenho duas tabelas em pgadmin3.
    campo – nome – ficha – complemento – 1ª tabela
    campo – nome – ficha – 2ª tabela

    1ª tabela – 1300 nomes proprios (text)
    2ª tabela – 8000 nomes proprios e alguns repetidos da 1ª

    Como faço para copiar uma dentro da outra,eliminando os nomes duplicados ???

  6. Jose Puzzi Says:

    como fazer uma procedure de inclusão de registros???


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: