Free CSS Button Css3Menu.com

Tutoriais » SQL » União »
Definindo:
Este comando gera uma tabela com as tuplas comuns e não comuns entre duas tabelas (que devem ser União Compatíveis).
Lembrando das tabelas depto01 e depto02 geradas no tutorial sobre o comando CREATE... na forma:
CREATE temporary TABLE depto01 AS (SELECT * FROM departamentos WHERE deptosuperiorid IN ('A01','B01'));
CREATE temporary TABLE depto02 AS (SELECT * FROM departamentos WHERE deptosuperiorid IN ('D01','B01'));
SELECT * FROM depto01; -- recupera 6 linhas
SELECT * FROM depto02; -- recupera 5 linhas
Sintaxe:
SELECT * FROM <Tabela1> UNION [ALL] (SELECT * FROM <Tabela2>);
Exemplo:
SELECT * FROM depto01 UNION (SELECT * FROM depto02);
Notas:
  • As tabelas processados na UNIÃO DEVEM SER União Compatíveis. Recordando...
    Tabelas são UC quando tem a mesma quantidade de campos e os tipos de dados e domínios de definição de cada campo correspondente também são iguais.
    Note que esta definição permite que A(C1,C2,C3) seja UC com B(C3,C4,C5) DESDE que A.C1 e B.C3 sejam do mesmo tipo de dado e com a mesmo domínio de definição
    e isso aconteça entre (A.C2,B.C4) e (A.C3,B.C5).
    Alguns SGBDs são fracamente aderentes a este conceito, permitindo União, Subtração e Intersecção entre tabelas que simplesmente tenham a mesma quantidade campos.
    Por isso é interessante 'testar' os SGBDs na execução de comandos da SQL para determinar o quanto 'aderente' o produto é ao Padrão SQL.
  • Na sintaxe do padrão 87 Não existia o ALL. O operador UNION exibia TODAS as linhas (mesmo as repatidas).
    Isso podia ser acertado com o complemento DISTINCT escrito logo a seguir da cláusula SELECT.
    Mas é claro que isso não era nada prático, e então o padrão ANSI:92 apresenta o 'ALL' e tirou a quase 'obrigatoriedade' de se escrever DISTINCT.
  • Teste o comando a seguir, fazendo a UNIÃO:
    SELECT * FROM depto01 UNION (SELECT * FROM depto02);
    Deveriamos ter 11 linhas mas temos só 9. Isso acontece porque o operador UNION elimina as linhas repetidas.
    Para mostrar as 11 linhas, deve-se usar o complemento ALL do operador UNION, desse modo:
    SELECT * FROM depto01 UNION ALL (SELECT * FROM depto02);
  • É possível direcionar a saída de qualquer comando da SQL para uma tabela (temporária ou não).
    Criando uma tabela temporária e a seguir mostrando seu conteúdo
    CREATE TEMPORARY TABLE uniao01 AS (SELECT * FROM depto01 UNION (SELECT * FROM depto02));
    SELECT * FROM uniao01;

Tutoriais » SQL » União »