Como usar o operador UNION SQL
o UNIÃO
operador é a implementação SQL de operador de união de álgebra relacional. o UNIÃO operador permite que você desenhe informações de duas ou mais tabelas que possuem a mesma estrutura. mesma estrutura significaAs tabelas devem ter todos o mesmo número de colunas.
colunas correspondentes devem ter todos os tipos de dados idênticos e comprimentos.
Quando estes critérios forem cumpridos, as mesas estão união-compatíveis: A união das duas tabelas retorna todas as linhas que aparecem em qualquer mesa e elimina duplicatas.
Suponha que você crie um banco de dados de baseball-estatísticas. Ele contém duas tabelas união compatível nomeados AMERICAN e nacionais. Ambas as tabelas têm três colunas, e as colunas correspondentes são todos do mesmo tipo. Na verdade, as colunas correspondentes têm colunas de mesmo nome (embora esta condição não é necessária para compatibilidade união).
NACIONAL lista os nomes dos jogadores eo número de jogos completos acamparam arremessadores da Liga Nacional. AMERICAN lista as mesmas informações sobre jarros na liga americana. o UNIÃO das duas tabelas dá-lhe uma tabela de resultados virtual que contém todas as linhas da primeira tabela mais todas as linhas da segunda tabela. Para este exemplo, algumas linhas foram colocados em cada tabela para ilustrar a operação:
SELECT * da National -FirstName LastName CompleteGames --------- -------- ------------- Sal Maglie 11Don Newcombe9Sandy Koufax 13Don Drysdale12SELECT * FROM -FirstName AMERICAN LastName CompleteGames --------- -------- ------------- Whitey Ford 12Don Larson 10Bob Turley 8Allie Reynolds14SELECT * FROM NATIONALUNIonselect * FROM AMERICAN -FirstName LastName CompleteGames --------- -------- ------------- Allie Reynolds14Bob Turley 8Don Drysdale12Don Larson 10Don Newcombe9Sal Maglie 11Sandy Koufax 13Whitey Ford 12
o UNION DISTINCT funções de operador de forma idêntica ao UNIÃO operador, sem o DISTINCT palavra-chave. Em ambos os casos, as linhas duplicadas são eliminadas do conjunto de resultados.
O asterisco (*) Pode ser usado como abreviação para todas as colunas de uma tabela. Este atalho é muito bem a maior parte do tempo, mas pode trazer-lhe problemas quando você usa operadores relacionais no SQL embutido ou módulo do idioma.
Se você adicionar um ou mais novas colunas a uma tabela e não para outro, ou você adicionar colunas diferentes para as duas tabelas, as duas tabelas não são mais união-compatíveis - e seu programa será inválido na próxima vez que ele é recompilados.
Mesmo se as mesmas novas colunas são adicionadas a ambas as tabelas então eles ainda estão union-compatível, o programa provavelmente não está preparado para lidar com dados adicionais. Você deve listar as colunas que pretende, em vez de depender do * taquigrafia. Quando você está entrando em consultas SQL ad hoc do console, o asterisco funciona bem, porque você pode exibir rapidamente uma estrutura de tabela para verificar a compatibilidade de união se as consultas não são bem sucedidos.
A ALL operação UNION
o UNIÃO operação geralmente elimina quaisquer linhas duplicadas que resultam do seu funcionamento, que é o resultado desejado a maior parte do tempo. Às vezes, porém, você pode querer preservar as linhas duplicadas. Nessas ocasiões, o uso UNION ALL.
Referindo-se ao exemplo, suponha que # 147 de bala # 148- Bob Turley tinha sido negociado em midseason do New York Yankees na Liga Americana para o Brooklyn Dodgers na Liga Nacional. Agora, suponha que durante a temporada, ele armou oito jogos completos para cada equipe.
do comum UNIÃO apresentado no exemplo joga fora uma das duas linhas que contêm dados de Turley. Embora ele parecia lançar apenas 8 jogos completos na temporada, ele realmente atirou um notável 16 jogos completos. A consulta a seguir dá-lhe os fatos verdadeiros:
SELECT * FROM NATIONALUNION ALLSELECT * FROM AMERICANA -
Às vezes você pode formar um UNIÃO de duas tabelas, mesmo se eles não são união-compatíveis. Se as colunas que você quer em sua tabela de resultados estão presentes e compatível em ambas as tabelas, você pode realizar uma UNIÃO CORRESPONDENTE operação. Apenas as colunas especificadas são considerados - e eles são as únicas colunas exibidas na tabela de resultados.
A operação correspondente
estatísticos de beisebol manter diferentes estatísticas sobre jarros do que eles mantêm em outfielders. Em ambos os casos, os primeiros nomes, apelidos, putouts, erros e percentagens Fielding são gravadas. Outfielderes não têm a / registro perdido won, um salva registro, ou uma série de outras estatísticas que dizem respeito ao pitching. Você ainda pode realizar uma UNIÃO que leva dados da tabela de OUTFIELDER e da tabela de JARRO para lhe dar informações sobre a habilidade defensiva:
SELECT * DE OUTFIELDERUNION correspondente (nome, sobrenome, putouts, Erros, FieldPct) SELECT * FROM jarro -
A tabela de resultados contém os nomes e sobrenomes de todos os outfielders e jarros, juntamente com o putouts, erros e porcentagem fielding de cada jogador. Tal como acontece com o simples UNIÃO, duplicados são eliminados. Assim, se um jogador passou algum tempo no campo externo e também acamparam-se em um ou mais jogos, o UNIÃO CORRESPONDENTE operação perde algumas de suas estatísticas. Para evitar este problema, utilizar UNION ALL CORRESPONDENTE.
Cada nome de coluna na lista após a CORRESPONDENTE palavra-chave deve ser um nome que existe em ambas as tabelas juntou-sindicais. Se você omitir esta lista de nomes, é utilizada uma lista implícita de todos os nomes que aparecem em ambas as tabelas. Mas esta lista implícita de nomes podem mudar quando novas colunas são adicionadas às tabelas. Portanto, você é melhor fora listando explicitamente os nomes das colunas que você omitir-los.