ID do artigo: 136699 - Última revisão: sexta-feira, 28 de dezembro de 2007 - Revisão: 4.0

Descrição do uso de junções no Microsoft Query

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Recolher tudo

Sumário

Este artigo discute o uso de junções no Microsoft Query. Junção é um método que pode ser usado com bancos de dados para definir e ilustrar as relações entre duas tabelas. No Microsoft Query, é possível criar e manipular vários tipos de junções. Em muitos casos, o Microsoft Query une as tabelas na sua consulta para você. As junções são representadas por linhas que conectam as tabelas no painel Tabela.

Os tópicos discutidos neste artigo incluem o seguinte:

   O que é uma Junção?
   Junções internas
   Instruções SQL
   Junções externas
   Junções de subtração
   Junções externas completas
   Auto-junções
   Junções de igualdade
   Junções naturais
   Produtos cartesianos
				

Mais Informações

O que é uma Junção?

Junção é uma conexão entre duas tabelas na qual elas são mescladas de acordo com um campo em comum, criando uma nova tabela virtual (que pode ser salva como uma tabela real). Por exemplo, com as duas tabelas a seguir:

      Cor_Tabela:

   Junção_Campo   Cor_Campo
   1            Vermelho
   2            Azul
   3            Verde

      Padrão_Tabela:

   Junção_Campo   Padrão_Campo
   2            Distribuído
   3            Quadriculado
   4            Ponto-Polca
				


uma junção simples se assemelha ao seguinte:

   Junção_Campo   Cor_Campo      Padrão_Campo
   2            Azul             Distribuído
   3            Verde            Quadriculado
				


A tabela resultante contém apenas os registros 2 e 3 no campo Junção_Campo porque eles são os únicos registros que existem em Cor_Tabela e Padrão_Tabela.

Um exemplo prático de junção seria uma lista de produtos e fabricantes de um fornecedor; a tabela Produtos e a tabela Distribuidores poderiam ser unidas em um campo ID do Produto.

A junção interna

A junção no exemplo anterior, chamada de junção interna, é o tipo mais simples de junção. Geralmente, você deseja usar somente uma fração dos campos nas tabelas. Por exemplo, em uma junção interna real, como a descrita acima, você pode querer excluir Junção_Campo, de modo que a junção se pareça com o seguinte:

   Cor_Campo      Padrão_Campo
   Azul             Distribuído
   Verde            Quadriculado
				


No Microsoft Query, as junções internas são o tipo padrão de junção (para obter mais informações, consulte a página 105 no "Guia do usuário do Microsoft Query", versão 1.0).

A Instrução SQL

A instrução SQL SELECT é um tipo de macro que você pode usar ao criar uma junção. Observe que a SQL é bem diferente de outras linguagens de macro do Microsoft Excel (Visual Basic for Applications e a linguagem de macro do Excel 4.0).

NÃO é necessário entender SQL para criar facilmente junções no Microsoft Query.

Cada junção possui uma instrução SELECT associada à ela. É possível exibir a instrução SELECT de qualquer junção no Microsoft Query clicando em "SQL" na barra de ferramentas. Assim como na gravação de macro do Microsoft Excel, é possível usar o Query para gravar a instrução SELECT. Diferente da gravação de macro do Microsoft Excel, a gravação da instrução SELECT está sempre ativada e não pode ser desativada. Veja como a instrução SELECT pode ficar no Microsoft Query para a junção interna acima:

   SELECT Cor_Tabela.Cor_Campo, Padrão_Tabela.Padrão_Campo
   FROM `c:\database`.Cor_Tabela, `c:\database`.Padrão_Tabela
   WHERE Cor_Tabela.Junção_Campo = Padrão_Tabela.Junção_Campo
				


Observe que usamos o nome do banco de dados 'C:\database' cujo .mdb é a extensão do nome de arquivo para um banco de dados do Microsoft Access, que pode ter várias tabelas em um arquivo. Em alguns outros bancos de dados, tais como dBASE, Paradox e FoxPro, cada tabela deve ter seu próprio arquivo. Nestes casos, a sintaxe SQL pode parecer redundante, pois o nome da tabela é sempre igual ao nome do arquivo sem a extensão.

A sintaxe SQL varia entre os mecanismos de consulta, por exemplo, no Microsoft Access a consulta do exemplo acima é semelhante ao seguinte:

   SELECT Cor_Tabela.[Cor_Campo],
   Padrão_Tabela.Padrão_Campo
   FROM Padrão_Tabela INNER JOIN Cor_Tabela ON
   Padrão_Tabela.[Junção_Campo] = Cor_Tabela.[Junção_Campo];
				


O caminho para a tabela não é usado no Microsoft Access porque a tabela é um arquivo .mdb do Microsoft Access. Mesmo se uma tabela externa for anexada e usada na consulta, a instrução SQL do Microsoft Access não exibirá o caminho para a tabela externa.



A junção externa

Um outro tipo de junção é chamado de junção externa. Com uma junção externa, você obtém todos os registros de uma tabela e somente os registros da outra tabela que têm os valores correspondentes da primeira tabela. Isto pode deixar algumas das entradas de campo vazias ou "Nulas". Para qualquer uma das duas tabelas a ser unida, existem duas junções externas possíveis, a "junção externa esquerda" e a "junção externa direita" (assim chamadas porque normalmente a exibição das tabelas é lado a lado). Ao usar as duas tabelas anteriores em um exemplo, uma das duas possibilidades de junções externas é a seguinte:

   Junção_Campo   Cor_Campo      Padrão_Campo
   1            Vermelho           (NULL)
   2            Azul             Distribuído
   3            Verde            Quadriculado
				


A outra junção possível é a seguinte:

   Junção_Campo   Cor_Campo      Padrão_Campo
   2            Azul             Distribuído
   3            Verde            Quadriculado
   4            (NULL)         Ponto-Polca
				


OBSERVAÇÃO: Em uma junção, não é possível ver a palavra "NULL" ao exibir os dados; use a palavra-chave "NULL" ao trabalhar com as junções.

No Microsoft Query, ambos os tipos de junção externa podem ser criados facilmente usando o mouse (para obter mais informações sobre esse procedimento, consulte a página 122 do "Guia do usuário do Microsoft Query", versão 1.0).

O seguinte exemplo mostra como a instrução SQL deve ficar no segundo exemplo de uma junção externa:

   SELECT Cor_Tabela.Cor_Campo, Padrão_Tabela.Padrão_Campo
   FROM {oj `c:\database`.Cor_Tabela LEFT OUTER JOIN
   `c:\database`.Padrão_Tabela ON Cor_Tabela.Junção_Campo =
   Padrão_Tabela.Junção_Campo}
				


Para criar um exemplo prático de uma junção externa, faça uma lista de produtos de uma empresa com os valores de venda para os produtos que foram vendidos, mas sem excluir os produtos que não foram vendidos. Para fazer isso, use o campo ID do Produto para unir uma tabela Produtos e uma tabela Vendas.

A junção de subtração

O terceiro tipo de junção é a junção de subtração. Uma junção de subtração é o oposto de uma junção externa. Ela inclui APENAS aqueles registros em uma tabela que não correspondem a nenhum registro na outra tabela. Como as junções externas, existem duas junções de subtração possíveis para qualquer uma das duas tabelas que você deseja unir, entretanto, geralmente elas não são referidas como "junção de subtração esquerda" ou "junção de subtração direita". Geralmente, uma junção de subtração retorna os campos de apenas uma das tabelas, pois, por definição, os campos da outra tabela retornam apenas valores NULL. O seguinte exemplo mostra uma junção de subtração possível:

   junção_Campo   Cor_Campo
   1            Vermelho
				


e a outra:

   Junção_Campo   Padrão_Campo
   4            Ponto-Polca
				


No Microsoft Query, uma junção de subtração é criada primeiro a partir da criação de uma junção externa e do uso de critérios "IS NULL" em um campo apropriado (Padrão_Campo no primeiro exemplo acima, Cor_Campo no segundo exemplo) para excluir registros que correspondem entre as tabelas.

O seguinte exemplo mostra como a instrução SQL deve ficar para a primeira junção de subtração acima:

   SELECT Cor_Tabela.Junção_Campo, Cor_Tabela.Cor_Campo
   FROM {oj `c:\database`.Cor_Tabela LEFT OUTER JOIN
   `c:\database`.Padrão_Tabela ON Cor_Tabela.Junção_Campo =
   Padrão_Tabela.Junção_Campo}
   WHERE (Padrão_Tabela.Padrão_Campo é Nulo)
				


Para criar um exemplo prático de uma junção de subtração, crie uma lista de clientes que fizeram pedidos recentemente. Para fazer isso, use o campo ID do Pedido para unir uma tabela Clientes e uma tabela Pedidos.

A junção externa completa

O quarto tipo de junção é chamado de junção externa completa. A junção externa completa é uma combinação de uma junção externa com sua junção de subtração complementar. Uma junção externa completa inclui todos os registros de ambas as tabelas e mescla esses registros em comum entre as duas tabelas. O seguinte exemplo mostra uma junção externa completa:

   Junção_Campo   Cor_Campo      Padrão_Campo
   1            Vermelho           (NULL)
   2            Azul             Distribuído
   3            Verde            Quadriculado
   4            (NULL)         Ponto-Polca
				




No Microsoft Query, uma junção externa completa é criada ao inserir o operador UNION na sua própria linha entre a instrução SELECT da junção externa e a instrução SELECT da junção de subtração (veja acima).

Para criar uma junção externa completa no Microsoft Query, execute as seguintes etapas para criar a sentença SQL correspondente:

  1. Crie uma junção externa, clique em Novo no menu Arquivo e crie uma junção de subtração.
  2. Copie a SQL da junção de subtração.
  3. Altere para a junção externa, digite a palavra UNION na linha abaixo da instrução SQL da junção externa, cole a SQL da junção de subtração embaixo da palavra UNION e feche a janela da junção de subtração.
Observação Os resultados da tabela a seguir não têm o valor "4" do campo Junção_Campo porque o registro do valor do campo Junção_Campo igual a 4 está na tabela Padrão_Tabela. A sentença SQL abaixo não seleciona o campo Padrão_Tabela.João_Campo.

   Junção_Campo   Cor_Campo      Padrão_Campo
                (NULL)         Ponto-Polca
   1            Vermelho           (NULL)
   2            Azul             Distribuído
   3            Verde            Quadriculado
				


O seguinte exemplo mostra como a SQL deve ficar para a junção externa completa acima (os comandos embaixo do operador UNION são colados):

   SELECT Cor_Tabela.Junção_Campo, Cor_Tabela.Cor_Campo,
   Padrão_Tabela.Padrão_Campo
   FROM {oj `C:\database`.Padrão_Tabela LEFT OUTER JOIN
   `C:\database`.Cor_Tabela ON  Cor_Tabela.Junção_Campo =
   Padrão_Tabela.Junção_Campo}
   UNION
   SELECT Cor_Tabela.Junção_Campo, Cor_Tabela.Cor_Campo,
   Padrão_Tabela.Padrão_Campo
   FROM {oj `C:\database`.Cor_Tabela  LEFT OUTER JOIN
   `C:\database`.Padrão_Tabela ATIVADA Cor_Tabela.Junção_Campo =
   Padrão_Tabela.Junção_Campo}
   WHERE (Cor_Tabela.Cor_Campo é Nulo)  ou(Padrão_Tabela.Padrão_Campo é Nulo)
				


Para criar um exemplo prático de uma junção externa completa, mescle duas listas de clientes sobrepostas por departamentos diferentes, incluindo números de fax (que estavam apenas na primeira lista) e nomes de email da Internet (que estavam apenas na segunda lista). Cada departamento pode continuar a usar sua lista parcial ao mesmo tempo em que a lista unida completa está disponível. Elas podem ser unidas em um campo ID do Cliente.

A auto-junção

O quinto tipo de junção é a auto-junção. A auto-junção é uma conexão na qual um campo em uma tabela corresponde a um campo diferente em uma cópia da mesma tabela. Ao usar este exemplo de tabela:

      Tabela_Três

   ID_Funcionário   Nome_Funcionário   Reporta_A
   1             Bob             3
   2             Sue             (NULL)
   3             Jim             2
   4             Jane            3
				


e uma cópia dela, da seguinte forma:

      Tabela_Três_01

   ID_Funcionário   Nome_Funcionário   Reporta_A
   1             Bob             3
   2             Sue             (NULL)
   3             Jim             2
   4             Jane            3
				


Uma auto-junção pode ser usada para criar uma lista de nomes de funcionários com os nomes de seus supervisores. O campo ID_Funcionário na Tabela_Três pode ser unido ao campo Reporta_A na Tabela_Três_01. O seguinte exemplo mostra como deve ficar primeiro:

   Nome_Funcionário   Nome_Funcionário
   Bob             Jim
   Sue             (NULL)
   Jim             Sue
   Jane            Jim
				


Porém, como é confuso ter o mesmo nome de campo para ambos os campos, altere um dos nomes de campo, da seguinte forma:

   Nome_Funcionário   Supervisor
   Bob             Jim
   Sue             (NULL)
   Jim             Sue
   Jane            Jim
				


O seguinte exemplo mostra como a SQL deve ficar para auto-junção acima:

   SELECT tabela_três.Nome_Funcionário,
   tabela_três_01.Nome_Funcionário 'Supervisor'
   FROM `c:\database`.tabela_três, `c:\database`.tabela_três_01
   WHERE tabela_três.ID_Funcionário = tabela_três_01.Reporta_A
				


Ao retornar os dados para o Microsoft Excel, não é necessário renomear o campo no Microsoft Query. Isto é verdade porque o Microsoft Excel usa o nome de campo original. Para obter mais informações sobre esse problema, consulte o seguinte artigo na Base de Dados de Conhecimento Microsoft:

121551  (http://support.microsoft.com/kb/121551/PT-BR/ ) : XL5: Nome de campo em vez de nome de coluna em MSQUERY retornou ao Excel

Uma macro do Microsoft Excel deve alterar o nome de coluna sempre que os dados retornados são atualizados (exceto ao retornar os dados em uma tabela dinâmica, pois a própria tabela pode criar e manter um nome de campo padrão).

A junção de igualdade e a junção natural

Quase todas as junções, incluindo todos os exemplo dados até agora, são junções de igualdade e junções naturais. Os significados desses termos são irrelevantes para o o usuário do Microsoft Query, porém os dois próximos parágrafos tentam explicar os termos para aqueles que podem estar curiosos.

A junção de igualdade é uma junção na qual os registros são recuperados quando os campos de junção têm valores correspondentes em ambas as tabelas. Isto pode parecer apenas uma definição de junção, mas não é. Um exemplo de uma junção de não igualdade é uma junção na qual os registros na primeira tabela são unidos aos registros da segunda tabela onde o campo unido na primeira tabela é maior que (em vez de igual a) o campo unido na segunda tabela (ou menor que ou qualquer coisa, menos igual a). Naturalmente, isso retorna mais registros do que uma junção de igualdade.

Uma junção natural é aquela que apenas um dos campos unidos das duas tabelas é retornado. Como esses dois campos são, por definição, idênticos em uma junção de igualdade, é redundante incluir os dois. Para uma junção de não igualdade, é importante incluir ambos os campos. Então, as junções de igualdade e as junções naturais andam de mãos dadas. Você deseja que uma junção de igualdade (que descreve a maioria das junções) seja uma junção natural retornando apenas um dos campos unidos, mas se você nunca usar uma junção de não igualdade, pode ser que também deseje torná-la uma junção não natural retornando ambos os campos unidos.

Existem outros tipos de junções. O espectro completo de junções foi mais recentemente definido em 1992 e esse padrão é conhecido como SQL-92. Algumas junções não são importantes para os usuários do Microsoft Excel porque essas junções fazem coisas que são mais fáceis de fazer no Microsoft Excel.

O produto cartesiano

Tentar retornar os dados de duas ou mais tabelas sem nenhuma junção cria o que chamamos de "Produto cartesiano". Um produto cartesiano é definido como todas as combinações possíveis de linhas em todas as tabelas. Certifique-se de que tem junções antes de tentar retornar dados, pois um produto cartesiano em tabelas com muitos registros e/ou muitas tabelas pode demorar muito tempo para ser concluído. O seguinte exemplo é um produto cartesiano como o usado nas duas tabelas de exemplo. Observe que essa tabela tem apenas 3 registros vezes 3 registros, que gera um total de 9 registros. Entretanto, imagine que em vez disso, a tabela tivesse 100 registros vezes 1.000 registros vezes 10.000 registros. Assim, a tabela teria 1.000.000.000 de registros!

   Junção_Campo   Junção_Campo   Cor_Campo   Padrão_Campo
   1            2            Vermelho           Distribuído
   1            3            Vermelho           Quadriculado
   1            4            Vermelho           Ponto-Polca
   2            2            Azul          Distribuído
   2            3            Azul           Quadriculado
   2            4            Azul           Ponto-Polca
   3            2            Verde          Distribuído
   3            3            Verde         Quadriculado
   3            4            Verde           Ponto-Polca
				


Ocasionalmente, alguns usuários desejam usar um produto cartesiano, porém a maioria dos usuários o fazem acidentalmente e geralmente ficam confusos. Como a maioria dos usuários excluem a maioria dos campos em uma junção, um produto cartesiano real pode facilmente parecer tão complicado quanto:

   Cor_Campo
   Vermelho
   Vermelho
   Vermelho
   Azul
   Azul
   Azul
   Verde
   Verde
   Verde
				


Se 100 registros forem adicionados ao campo Padrão_Tabela, essa consulta terá 309 registros (103 registros para cada Vermelho, Azul e Verde).

Os produtos cartesianos têm instruções SELECT relativamente simples. O seguinte exemplo mostra como a SQL deve ficar para o produto cartesiano acima:

   SELECT Cor_Tabela.Cor_Campo, Padrão_Tabela.Padrão_Campo
   FROM `c:\database`.Cor_Tabela, `c:\database`.Padrão_Tabela
				


Um exemplo prático de um produto cartesiano seria criar uma lista de todas as combinações possíveis de opções em um produto de mercadoria, com totais de preço para cada combinação.

Referências

"Guia do usuário" do Microsoft Query, versão 1.0, páginas 101-114, 123-131

Os dois livros a seguir não estão incluídos nos produtos da Microsoft e não são produzidos pela Microsoft.

Os produtos de terceiros discutidos aqui são produzidos por fornecedores independentes da Microsoft. Não oferecemos garantia, implícita ou não, em relação ao desempenho ou à confiabilidade desses produtos.

"Understanding the New SQL: A Complete Guide", Morgan Kaufmann Publishers, Inc., 1993.

"Joe Celko's SQL for Smarties: Advanced SQL Programming", Morgan Kaufmann Publishers, Inc., 1995.

Para obter mais informações sobre a criação de junções no Microsoft Query, selecione o botão Pesquisar em Ajuda e digite:

   junções, visão geral
				

A informação contida neste artigo aplica-se a:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
  • Microsoft Excel 5.0 Standard Edition
  • Microsoft Excel X para Macintosh
  • Microsoft Excel 2001 para Mac
  • Microsoft Excel 98 for Macintosh
  • Microsoft Query 2000
Palavras-chave: 
kbhowto kbinfo KB136699