Artigo: 136699 - Última revisão: quarta-feira, 21 de Maio de 2008 - Revisão: 4.0

Descrição da utilização de associaçõ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 | Reduzir tudo

Sumário

Este artigo explica como utilizar os vários tipos de associação no Microsoft Query. Uma associação é um método que pode ser utilizado em bases de dados para definir e ilustrar relações entre duas tabelas. No Microsoft Query, é possível criar e manipular vários tipos de associações. Em muitos casos, o Microsoft Query associa automaticamente as tabelas existentes na consulta. As associações são representadas por linhas que unem as tabelas no painel Tabela.

Os tópicos abrangidos neste artigo incluem os seguintes:

   O que é uma Associação?
   Associações Internas
   Instruções de SQL
   Associações Externas
   Associações de Subtracção
   Associações Externas Completas
   Associações Automáticas
   Associações Equitativas
   Associações Naturais
   Produtos Cartesianos
				

Mais Informação

O que é uma Associação?

Uma associação é uma ligação entre duas tabelas onde estas são intercaladas de acordo com um campo comum, criando uma nova tabela virtual (que pode ser guardada como uma tabela real). Por exemplo, nas duas tabelas seguintes:

      Tabela_Cores:
   Campo_Associação   Campo_Cor
   1            Vermelho
   2            Azul
   3            Verde
      Tabela_Padrões:
   Campo_Associação   Campo_Padrão
   2            Riscas
   3            Xadrez
   4            Bolas
				


uma associação simples é semelhante ao seguinte:

   Campo_Associação   Campo_Cor      Campo_Padrão
   2            Azul             Riscas
   3            Verde            Xadrez
				


A tabela resultante só contém os registos 2 e 3 no campo Campo_Associação porque são os únicos registos que existem simultaneamente nas tabelas Tabela_Cores e Tabela_Padrões.

Um exemplo prático de uma associação consiste numa lista de produtos e fabricantes de um retalhista; uma tabela Produtos e uma tabela Fornecedores poderiam ser associadas por um campo ID de Produto.

A Associação Interna

A associação existente no exemplo anterior, chamada uma associação interna, é o tipo de associação mais simples. Normalmente, só pretende utilizar uma fracção dos campos existentes nas tabelas. Por exemplo, numa associação interna real, tal como a apresentada acima, poderia pretender excluir Campo_Associação, de modo a que a associação tivesse o aseguinte aspecto:

   Campo_Cor      Campo_Padrão
   Azul             Riscas
   Verde            Xadrez
				


No Microsoft Query, as associações internas são o tipo de associação predefinido (para obter mais informações, consulte a página 105 do "Microsoft Query User's Guide", versão 1.0).

A Instrução de SQL

Uma instrução SELECT de SQL (Structured Query Language) é um tipo de macro que pode ser utilizada durante a criação de uma associação. Note que o SQL é muito diferente das outras linguagens de macro do Microsoft Excel (Visual Basic for Applications e a linguagem de macros do Excel 4.0).

NÃO é necessário compreender SQL para criar facilmente consultas no Microsoft Query.

Cada associação tem uma instrução SELECT associada. Poderá visualizar a Instrução SELECT de cada associação no Microsoft Query clicando em "SQL" na barra de ferramentas. Tal como acontece com o gravador de macros do Microsoft Excel, poderá utilizar o Query para gravar a instrução SELECT. Contrariamente ao gravador de macros do Microsoft Excel, o gravador de instruções SELECT está sempre activado e não pode ser desactivado. Eis o aspecto que a instrução SELECT relativa à associação interna apresentada acima poderia ter no Microsoft Query:

   SELECT Tabela_Cores.Campo_Cor, Tabela_Padrões.Campo_Padrão
   FROM `c:\basedados`.Tabela_Cores, `c:\basedados`.Tabela_Padrões
   WHERE Tabela_Cores.Campo_Associação = Tabela_Padrões.Campo_Associação
				


Note que utilizámos o nome de base de dados 'C:\basedados', cujo .mdb é a extensão de nome de ficheiro de uma base de dados do Microsoft Access, que poderá conter várias tabelas num ficheiro. Noutras bases de dados, tais como dBASE, Paradox FoxPro, cada tabela tem de ter um ficheiro próprio. Nestes casos, a sintaxe de SQL poderá parecer redundante, visto que o nome da tabela é sempre igual ao nome de ficheiro sem a extensão.

A sintaxe de SQL varia entre motores de consulta; por exemplo, no Microsoft Access, a consulta do exemplo acima apresentado tem um aspecto semelhante ao seguinte:

   SELECT Tabela_Cores.[Campo_Cor],
   Tabela_Padrões.Campo_Padrão
   FROM Tabela_Padrões INNER JOIN Tabela_Cores ON
   Tabela_Padrões.[Campo_Associação] = Tabela_Cores.[Campo_Associação];
				


O caminho para a tabela não é utilizado no Microsoft Access porque a tabela se encontra num ficheiro .mdb do Microsoft Access. Mesmo que uma tabela externa esteja anexada e seja utilizada na consulta, a instrução de SQL do Microsoft Access não apresenta o caminho para a tabela externa.



A Associação Externa

Outro tipo de associação é chamada uma associação externa. Com uma associação externa, obtém todos os registos de uma tabela e apenas os registos da outra tabela que têm valores correspondentes na primeira tabela. Isto poderá deixar algumas entradas de campos em branco, ou "Nulas". Para que quaisquer duas tabelas seja associadas, existem duas associações externas possíveis, a "associação externa à esquerda" e a "associação externa à direita" (os nomes derivam do facto das tabelas serem, normalmente, visualizadas lado a lado). Utilizando as duas tabelas anteriores num exemplo, apresentamos em seguida uma das duas associações externas possíveis:

   Campo_Associação   Campo_Cor   Campo_Padrão
   1            Vermelho           (NULL)
   2            Azul          Riscas
   3            Verde         Xadrez
				


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

   Campo_Associação   Campo_Cor   Campo_Padrão
   2            Azul          Riscas
   3            Verde         Xadrez
   4            (NULL)         Bolas
				


NOTA: Numa associação, a palavra "NULL" não é apresentada quando os dados são visualizados; utilize a palavra-chave "NULL" quando estiver a trabalhar com as associações.

No Microsoft Query, é possível criar facilmente ambos os tipos de associação externa utilizando o rato (para obter mais informações, consulte a página 112 do "Microsoft Query User's Guide", versão 1.0).

Apresentamos em seguida o aspecto que a instrução SELECT relativa ao segundo exemplo de uma associação externa poderia ter:

   SELECT Tabela_Cores.Campo_Cor, Tabela_Padrões.Campo_Padrão
   FROM {oj `c:\basedados`.Tabela_Cores LEFT OUTER JOIN
   `c:\basedados`.Tabela_Padrões ON Tabela_Cores.Campo_Associação =
   Tabela_Padrões.Campo_Associação}
				


Para criar um exemplo prático de uma associação externa, crie uma lista dos produtos de uma empresa com valores de vendas relativos aos produtos que foram vendidos, mas não excluindo os produtos que não foram vendidos. Para o fazer, utilize o campo ID de Produto para associar uma tabela Produtos e uma tabela Vendas.

A Associação de Subtracção

Um terceiro tipo de associação é a associação de subtracção. Uma associação de subtracção é o oposto de uma associação externa; SÓ inclui os registos existentes numa tabela que não correspondem a qualquer registo da outra tabela. Tal como nas associações externas, existem duas associações de subtracção possíveis para associar duas tabelas; no entanto, estas não são normalmente referidas como "associação de subtracção à esquerda" ou "associação de subtracção à direita". Uma associação de subtracção devolve normalmente campos de apenas uma das tabelas, visto que, por definição, os campos da outra tabela só devolvem valores NULL. Em seguida, apresentamos uma associação de subtracção possível:

   Campo_Associação   Campo_Cor
   1            Vermelho
				


e esta é a outra:

   Campo_Associação   Campo_Padrão
   4            Bolas
				


No Microsoft Query, uma associação de subtracção é criada primeiro através da criação de uma associação Externa e, em seguida, utilizando o critério "IS NULL" num campo adequado (Campo_Padrões no primeiro exemplo acima; Campo_Cores no segundo exemplo) para excluir registos correspondentes entre as tabelas.

Em seguida, apresentamos o aspecto que a instrução de SQL da primeira associação de subtracção acima poderia ter:

   SELECT Tabela_Cores.Campo_Associação, Tabela_Cores.Campo_Cores
   FROM {oj `c:\basedados`.Tabela_Cores LEFT OUTER JOIN
   `c:\basedados`.Tabela_Padrões ON Tabela_Cores.Campo_Associação =
   Tabela_Padrões.Campo_Associação}
   WHERE (Tabela_Padrões.Campo_Padrões Is Null)
				


Para criar um exemplo prático de uma associação de subtracção, vamos utilizar uma lista de clientes que não tenha sido ordenada recentemente. Para o fazer, utilize um campo ID de Encomenda para associar uma tabela Clientes e uma tabela Encomendas.

A Associação Externa Completa

Um quarto tipo de associação é a associação externa completa. Uma associação externa completa é uma combinação de uma associação externa com a respectiva associação de subtracção complementar. Uma associação externa completa inclui todos os registos de ambas as tabelas e intercala os registos que são comuns a ambas as tabelas. Apresentamos em seguida uma associação externa completa:

   Campo_Associação   Campo_Cor   Campo_Padrão
   1            Vermelho           (NULL)
   2            Azul          Riscas
   3            Verde         Xadrez
   4            (NULL)        Bolas
				




No Microsoft Query, uma associação externa completa é criada inserindo o operador UNION numa linha própria entre a instrução SELECT da associação externa e a instrução SELECT da associação de subtracção (ver acima).

Para criar uma associação externa completa no Microsoft Query, utilize os passos seguintes para criar a instrução de SQL correspondente:

  1. Crie uma associação externa e, em seguida, clique em Novo no menu Ficheiro e crie uma associação de substracção.
  2. Copie a instrução de SQL da associação de subtracção.
  3. Mude para a associação externa, escreva a palavra UNION numa linha própria abaixo da instrução de SQL da associação externa, cole a instrução de SQL da associação de subtracção abaixo da palavra UNION e feche a janela da associação de subtracção.
Nota O resultado da tabela seguinte não inclui o valor "4" de Campo_Associação porque o registo no qual o valor de Campo_Associação é igual a 4 está na tabela Tabela_Padrões. A instrução de SQL abaixo não selecciona o campo Tabela_Padrões.Campo_Associação.

   Campo_Associação   Campo_Cor   Campo_Padrão
                (NULL)        Bolas
   1            Vermelho           (NULL)
   2            Azul          Riscas
   3            Verde         Xadrez
				


Apresentamos em seguida o aspecto que a instrução de SQL relativa à associação externa completa acima poderia ter (os comandos abaixo do operador UNION foram colados):

   SELECT Tabela_Cores.Campo_Associação, Tabela_Cores.Campo_Cores,
   Tabela_Padrões.Campo_Padrão
   FROM {oj `C:\basedados`.Tabela_Padrões LEFT OUTER JOIN
   `C:\basedados`.Tabela_Cores ON Tabela_Cores.Campo_Associação =
   Tabela_Padrões.Campo_Associação}
   UNION
   SELECT Tabela_Cores.Campo_Associação, Tabela_Cores.Campo_Cores,
   Tabela_Padrões.Campo_Padrão
   FROM {oj `C:\basedados`.Tabela_Cores LEFT OUTER JOIN
   `C:\basedados`.Tabela_Padrões ON Tabela_Cores.Campo_Associação =
   Tabela_Padrões.Campo_Associação}
   WHERE (Tabela_Cores.Campo_Cor Is Null) or (Tabela_Padrões.Campo_Padrão Is Null)
				


Para criar um exemplo prático de uma associação externa completa, intercale listas de clientes sobrepostos utilizadas por departamentos diferentes, incluindo os números de fax (que só se encontram na primeira lista) e nomes de correio electrónico da Internet (que só se encontram na segunda lista). Cada departamento poderá continuar a utilizar a respectiva lista parcial, dispondo simultaneamente da lista completa associada. Estas listas poderiam ser associadas por um campo ID de Cliente.

A Associação Automática

Um quinto tipo de associação é a associação automática. Uma associação automática é uma ligação em que um campo de uma tabela é correspondido com outro campo de uma cópia da mesma tabela. Utilizando a tabela de exemplo seguinte:

      Tabela_Três
   ID_Empregado   Nome_Empregado   Reporta_A
   1             Bruno             3
   2             Susana             (NULL)
   3             João             2
   4             Júlia            3
				


e uma cópia desta, apresentada em seguida:

      Tabela_Três_01
   ID_Empregado   Nome_Empregado   Reporta_A
   1             Bruno             3
   2             Susana             (NULL)
   3             João             2
   4             Júlia            3
				


Uma associação automática poderia ser utilizada para criar uma lista de nomes de empregados com os nomes dos respectivos supervisores. O ID_Empregado na Tabela_Três seria associado a Reporta_A na Tabela_Três_01. Apresentamos em seguida o aspecto que poderia ter inicialmente:

   Nome_Empregado   Nome_Empregado
   Bruno             João
   Susana             (NULL)
   João             Susana
   Júlia            João
				


No entanto, visto que é confuso ter o mesmo nome par ambos os campos, poderá alterar um dos nomes dos campos, conforme ilustrado em seguida:

   Nome_Empregado   Supervisor
   Bruno             João
   Susana             (NULL)
   João             Susana
   Júlia            João
				


Em seguida, apresentamos o aspecto que a instrução de SQL da associação automática acima poderia ter:

   SELECT tabela_três.Nome_Empregado,
   tabela_três_01.Nome_Empregado 'Supervisor'
   FROM `c:\basedados`.tabela_três, `c:\basedados`.tabela_três_01
   WHERE tabela_três.ID_Empregado = tabela_três_01.Reporta_A
				


Quando devolver os dados ao Microsoft Excel, não tem qualquer utilidade mudar o nome ao campo no Microsoft Query. Isto acontece porque o Microsoft Excel utiliza o nome de ficheiro original. Para obter mais informações sobre este problema, consulte o seguinte artigo na Base de Dados de Conhecimento Microsoft:

121551  (http://support.microsoft.com/kb/121551/EN-US/ ) : XL5: É Devolvido ao Excel um Campo em vez de Nome de Coluna no MSQUERY

Uma macro do Microsoft Excel tem de mudar o nome da coluna sempre que os dados devolvidos forem actualizados (a menos que devolva os dados numa Tabela Dinâmica, que poderá ela própria criar e manter um nome de campo personalizado).

A Associação Equitativa e a Associação Natural

Quase todas as associações, incluindo todos os exemplos até agora apresentados, são associações equitativas e associações naturais. O significado destes dois termos é de pouca importância para o utilizador normal do Microsoft Query, mas os dois parágrafos seguintes tentam explicar os termos para aqueles que possam sentir alguma curiosidade.

A associação equitativa é uma associação que obtém registos se os campos de associação tiverem valores correspondentes em ambas as tabelas. Isto poderá parecer apenas uma definição de uma associação, mas não é. Um exemplo de uma associação não equitativa é uma associação na qual os registos da primeira tabela são associados aos registos da segunda tabela quando o campo associado existente na primeira tabela for maior que (em vez de igual a) o campo existente na segunda tabela (ou menor que, ou qualquer outro valor que não seja igual a). Naturalmente, isto devolve mais registos do que uma associação equitativa.

Uma associação natural é uma associação onde só é devolvido um dos campos associados das duas tabelas. Visto que, por definição, ambos os campos existentes numa associação equitativa são iguais, é redundante incluir ambos. Para uma associação não equitativa, é importante incluir ambos os campos. Consequentemente, as associações equitativas e as associações naturais andam em conjunto. Poderá pretender que uma associação equitativa (o que descreve a maior parte das associações) seja uma associação natural e devolva apenas um dos campos associados; no entanto, se alguma vez utilizar uma associação não equitativa, também poderá pretender transformá-la numa associação não natural, devolvendo ambos os campos associados.

Existem outros tipos de associações. A gama completa de associações mais recente foi definida em 1992 e esta norma é conhecida como SQL-92. Algumas associações não são importantes para utilizadores do Microsoft Excel, visto efectuarem acções que são mais fáceis de efectuar no Microsoft Excel.

O Produto Cartesiano

Tentar devolver dados a partir de duas ou mais tabelas sem quaisquer associações cria o que é chamado um "produto Cartesiano". Um produto Cartesiano é definido como todas as combinações possíveis de linhas em todas as tabelas. Certifique-se de que tem associações antes de tentar devolver dados, porque a elaboração de um produto Cartesiano em tabelas com muitos registos e/ou em muitas tabelas poderá demorar várias horas. Apresentamos em seguida um produto Cartesiano conforme utilizado nas duas tabelas de exemplo; note que esta tabela tem apenas 3 registos multiplicados por 3 registos, o que origina um total de 9 registos. No entanto, imagine que, se a tabela tivessem 100 registos a multiplicar por 1.000 registos a multiplicar por 1.000 registos, esta iria conter 1.000.000.000 de registos!

   Campo_Junção   Campo_Junção   Campo_Cor   Campo_Padrão
   1            2            Vermelho           Riscas
   1            3            Vermelho           Xadrez
   1            4            Vermelho           Bolas
   2            2            Azul          Riscas
   2            3            Azul          Xadrez
   2            4            Azul          Bolas
   3            2            Verde         Riscas
   3            3            Verde         Xadrez
   3            4            Verde         Bolas
				


Ocasionalmente, alguns utilizadores poderão pretender utilizar um produto Cartesiano; no entanto, a maior parte dos utilizadores obtêm-nos por acidente e ficam frequentemente confusos com estes. Visto que a maior parte dos utilizadores excluem a maior parte dos campos numa associação, um produto Cartesiano real poderá facilmente ter um aspecto semelhante ao seguinte:

   Campo_Cor
   Vermelho
   Vermelho
   Vermelho
   Azul
   Azul
   Azul
   Verde
   Verde
   Verde
				


Se fossem adicionados 100 registos à Tabela_Padrões, esta consulta teria 309 registos (103 registos cada de Vermelho, Azul e Verde).

Os produtos Cartesianos têm instruções SELECT relativamente simples. Em seguida, apresentamos o aspecto que a instrução de SQL do produto Cartesiano acima poderia ter:

   SELECT Tabela_Cores.Campo_Cor, Tabela_Padrões.Campo_Padrão
   FROM `c:\basedados`.Tabela_Cores, `c:\basedados`.Tabela_Padrões
				


Um exemplo prático de um produto Cartesiano seria a criação de uma lista de todas as combinações de opções possíveis de um produto, com os preços totais de cada combinação.

Referências

Microsoft Query "User's Guide", versão 1.0, págs. 101-114, 123-131

Os dois livros seguintes não são fornecidos com qualquer produto da Microsoft e não são produzidos pela Microsoft.

Os produtos de outro fabricante discutidos neste artigo são fabricados por fornecedores independentes da Microsoft; a Microsoft não concede qualquer garantia, implícita ou de outra natureza, relativamente ao desempenho ou à fiabilidade destes 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 associações no Microsoft Query, seleccione o botão Procurar na Ajuda e escreva:

   associações, descriçã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 Macintosh
  • Microsoft Excel 98 para Macintosh
  • Microsoft Query 2000
Palavras-chave: 
kbinfo kbhowto KB136699