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
Nesta páginaSumá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çãoO 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 InternaA 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 SQLUma 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 ExternaOutro 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çãoUm 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 CompletaUm 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:
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áticaUm 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 NaturalQuase 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 CartesianoTentar 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:
| Outros Recursos Outros Sites de Suporte
ComunidadesObtenha Ajuda AgoraTraduções de Artigos
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email
Voltar ao topo