Quando inclui várias origens de dados numa consulta do Access, utiliza associações para limitar os registos que pretende ver, com base na forma como as origens de dados estão relacionadas. Também utiliza associações para combinar registos de ambas as origens de dados, de modo a que cada par de registos das origens se torne num só registo nos resultados da consulta.
Este artigo aborda os vários tipos de associações e mostra como utilizá-las numa consulta. Por predefinição, uma associação é criada automaticamente se já existir uma relação entre duas origens de dados utilizadas numa consulta. Também é criada uma associação se existirem campos que correspondam claramente entre si. Pode eliminar uma associação criada automaticamente. Este artigo fornece informações básicas sobre relações entre tabelas, incluindo como criar uma.
Nota
Pode associar consultas da mesma forma que associa tabelas e também pode associar ambas.
Neste artigo
- Descrição geral
- Tipos de associações
- Mostrar linhas onde existe um valor comum em ambas as tabelas associadas
- Mostrar todas as linhas de uma tabela e as linhas correspondentes da outra tabela
- Mostrar todas as linhas de ambas as tabelas e associar-lhes onde existe um valor comum
- Associações cruzadas
- Associar tabelas com base numa desigualdade de valores de campo
- Eliminar uma associação
Descrição geral
Uma base de dados é uma coleção de tabelas de dados com relações lógicas entre si. As relações são utilizadas para ligar tabelas por campos que têm em comum. Uma tabela pode fazer parte de qualquer número de relações, mas cada relação tem sempre exatamente duas tabelas. Numa consulta, uma relação é representada por uma associação.
Quando adiciona tabelas a uma consulta, o Access cria associações baseadas nas relações que foram definidas entre as tabelas. Pode criar associações manualmente em consultas, mesmo que não representem relações que já foram definidas. Se utilizar outras consultas (em vez de ou para além das tabelas) como origens de dados para uma consulta, pode criar associações entre as consultas de origem e também entre essas consultas e quaisquer tabelas que utilizar como origens de dados.
As associações comportam-se de forma semelhante aos critérios de consulta, na medida em que estabelecem regras às quais os dados têm de corresponder para serem incluídos nas operações de consulta. Ao contrário dos critérios, as associações também especificam que cada par de linhas que satisfazem as condições de associação serão combinadas no conjunto de registos para formar uma única linha.
Existem quatro tipos básicos de associações: internas e externas, cruzadas e desiguais. Este artigo explora cada tipo de associação que pode utilizar, por que motivo utiliza cada tipo e como criar as associações.
As associações são para consultas que relações são para tabelas: uma indicação de como os dados em duas origens podem ser combinados com base nos valores de dados que têm em comum. Eis uma ilustração de uma associação na Vista de Estrutura da consulta, com as propriedades da associação abertas numa caixa de diálogo:
Esta linha entre as tabelas representa a associação. Faça duplo clique numa associação para abrir a caixa de diálogo Propriedades da Associação (ilustrada) e rever ou alterar a associação.
As associações são, por vezes, direcionais. Esta área da caixa de diálogo mostra que tabela é qual na associação e que campos são utilizados para associar as tabelas.
Esta área determina o tipo de associação: a opção 1 é uma associação interna, 2 é uma associação externa à esquerda e 3 é uma associação externa à direita.
Podem ser utilizados os campos de ambas as tabelas e os dados relativos a uma determinada tarefa são apresentados de cada uma. Numa associação interna, não são incluídos outros dados. Numa associação externa, os registos não relacionados de uma tabela também são incluídos nos resultados da consulta.
Tipos de associações
Existem quatro tipos básicos de associações: internas e externas, cruzadas e desiguais. As associações cruzadas e as associações desiguais são tipos de associação avançados e raramente são utilizados, mas deve conhecê-las para ter uma compreensão completa de como as associações funcionam.
Associações internas: apenas dados relacionados de ambas as tabelas combinados
Uma associação interna é uma associação em que o Access apenas inclui dados de uma tabela se existirem dados correspondentes na tabela relacionada e vice-versa. Na maioria das vezes, utilizará associações internas. Quando cria uma associação sem especificar que tipo de associação é, o Access assume que pretende uma associação interna. As associações internas são úteis porque permitem combinar dados de duas origens com base em valores partilhados, de forma a que só veja os dados quando existir uma imagem completa.
Associações externas: todos os dados relacionados foram combinados corretamente, assim como todos os registos restantes de uma tabela
Uma associação externa é como uma associação interna, mas adiciona as linhas restantes de uma das tabelas. As associações externas são direcionais: uma associação externa à esquerda inclui todos os registos da tabela à esquerda (a primeira tabela na associação) e uma associação externa à direita inclui todos os registos da tabela da direita – a segunda tabela da associação.
Associações externas completas: todos os dados, combinados sempre que possível
Em alguns sistemas, uma associação externa pode incluir todas as linhas de ambas as tabelas, com linhas combinadas quando correspondem. Esta opção é denominada associação externa completa, e o Access não as suporta explicitamente. No entanto, pode utilizar uma associação cruzada e critérios para obter o mesmo efeito.
Associações cruzadas: todos os dados, combinados de todas as formas possíveis
Na maioria das vezes, uma associação cruzada é um efeito secundário que consiste em adicionar duas tabelas a uma consulta e, em seguida, esquecer-se de as associar. O Access interpreta isto como significando que pretende ver todos os registos de uma tabela combinados com todos os registos da outra tabela – todas as combinações possíveis de registos. Como não é possível combinar dados, este tipo de associação raramente produz resultados úteis. No entanto, existem alguns casos em que uma associação cruzada é precisamente o que precisa.
Associações desiguais: como uma associação normal, mas utilizando uma comparação diferente para combinar linhas
As associações desiguais utilizam um operador diferente do sinal de igual (=) para comparar valores e determinar se e como combinar os dados. As associações desiguais não são explicitamente suportadas, mas pode utilizar uma associação cruzada e critérios para obter o mesmo efeito.
Mostrar linhas onde existe um valor comum em ambas as tabelas associadas
Se quiser mostrar apenas essas linhas que têm valores correspondentes no campo associado, utilize uma associação interna. O Access cria associações internas automaticamente.
As associações internas são o tipo de associação mais comum. Eles indicam a uma consulta que as linhas de uma das tabelas associadas correspondem a linhas na outra tabela, com base nos dados nos campos associados. Ao executar uma consulta com uma associação interna, apenas as linhas em que exista um valor comum a ambas as tabelas associadas serão incluídas nas operações de consulta.
Como devo proceder para utilizar uma associação interna?
Na maioria das vezes, não precisa de fazer nada para utilizar uma associação interna. Se as tabelas adicionadas a uma consulta já possuírem relações, o Access criará automaticamente uma associação interna entre cada par de tabelas relacionadas quando adicionar as tabelas. Se for imposta a integridade referencial, o Access apresentará também um "1" acima da linha de associação para mostrar que tabela está no lado "um" de uma relação um-para-muitos e um símbolo de infinito (∞) para mostrar que tabela está no lado "muitos".
Mesmo que não tenha criado relações, o Access cria automaticamente associações internas se adicionar duas tabelas a uma consulta e se essas tabelas tiverem, cada uma delas, um campo com o mesmo tipo de dados ou um dos campos de associação for uma chave primária. Os símbolos "um" e "muitos" não são apresentados neste caso, uma vez que a integridade referencial não é aplicada.
Se adicionar consultas à sua consulta e não tiver criado relações entre as mesmas, o Access não criará automaticamente associações internas entre essas consultas ou entre consultas e tabelas. Geralmente, você deve criá-los você mesmo. Para criar uma associação interna, arraste um campo de uma origem de dados para um campo noutra origem de dados. O Access apresenta uma linha entre os dois campos para mostrar que foi criada uma associação.
Sintaxe SQL para uma associação interna
As associações internas são especificadas em SQL na cláusula FROM, como mostrado abaixo:
FROM table1 INNER JOIN table2 ON table1. campo1 comparar tabela2. campo2
A operação INNER JOIN tem as seguintes partes:
| Parte | Descrição |
|---|---|
| tabela1, tabela2 | Os nomes das tabelas das quais os registos são combinados. |
| campo1, campo2 | Os nomes dos campos que estão associados. Se não forem numéricos, os campos têm de ser do mesmo tipo de dados e conter o mesmo tipo de dados, mas não necessitam de ter o mesmo nome. |
| comparar | Qualquer operador de comparação relacional: "=," "<," ">," "<=," "=," ou> "<>." |
Para obter mais informações sobre a sintaxe de inner join, consulte o tópico Operação INNER JOIN.
Mostrar todas as linhas de uma tabela e as linhas correspondentes da outra tabela
As associações externas indicam a uma consulta que, embora algumas das linhas de ambos os lados da associação correspondam exatamente, a consulta deve incluir todas as linhas de uma tabela e também as linhas da outra tabela que partilham um valor em comum em ambos os lados da associação.
As associações externas podem ser associações externas à esquerda ou podem ser associações externas à direita. Numa associação externa à esquerda, a consulta inclui todas as linhas da primeira tabela da cláusula FROM da instrução SQL e apenas as linhas da outra tabela em que o campo de associação contém valores comuns a ambas as tabelas. Numa associação externa à direita, a consulta inclui todas as linhas da segunda tabela na cláusula FROM da instrução SQL e apenas as linhas da outra tabela em que o campo de associação contém valores comuns a ambas as tabelas.
Nota
Pode saber facilmente qual é a tabela da esquerda ou a tabela da direita numa determinada associação ao fazer duplo clique na mesma e, em seguida, ao procurar na caixa de diálogo Propriedades da Associação . Também pode mudar para a vista de SQL e, em seguida, examinar a cláusula FROM.
Uma vez que algumas das linhas de um lado de uma associação externa não terão linhas correspondentes da outra tabela, alguns dos campos devolvidos nos resultados da consulta dessa outra tabela estarão vazios quando as linhas não corresponderem.
Como devo proceder para utilizar uma associação externa?
Pode criar uma associação externa ao modificar uma associação interna existente. Se não existir associação interna, crie uma e altere-a para associação externa.
Alterar uma associação interna para uma associação externa
- Na vista de Estrutura da consulta, faça duplo clique na associação que pretende alterar.
A caixa de diálogo Propriedades da Associação é apresentada. - Na caixa de diálogo Propriedades da Associação , tenha em atenção as opções listadas ao lado da opção 2 e da opção 3.
- Clique na opção que pretende utilizar e, em seguida, clique em OK.
- O Access apresenta a associação e mostra uma seta que aponta a partir da origem de dados onde todas as linhas serão incluídas para a origem de dados onde apenas as linhas que satisfazem a condição de associação serão incluídas.
Associações externas ambíguas
Se criar uma consulta que contenha uma operação LEFT JOIN e uma INNER JOIN, o Access poderá não conseguir determinar a operação de associação a executar primeiro. Uma vez que os resultados são diferentes consoante a associação à esquerda ou a associação interna seja efetuada primeiro, o Access apresenta uma mensagem de erro:
Para corrigir este erro, tem de modificar a consulta para que fique claro que associação executar primeiro.
Sintaxe SQL para uma associação externa
As associações externas são especificadas em SQL na cláusula FROM, conforme apresentado abaixo:
FROM tabela1 [ LEFT | RIGHT ] JOIN table2
ON tabela1.campo1 comparar tabela2.campo2
As operações LEFT JOIN e RIGHT JOIN têm as seguintes partes:
| Parte | Descrição |
|---|---|
| tabela1, tabela2 | Os nomes das tabelas das quais os registos são combinados. |
| campo1, campo2 | Os nomes dos campos que estão associados. Os campos têm de ser do mesmo tipo de dados e conter o mesmo tipo de dados, mas não necessitam de ter o mesmo nome. |
| comparar | Qualquer operador de comparação relacional: "=," "<," ">," "<=," "=," ou> "<>." |
Para obter mais informações sobre a sintaxe de associação externa, consulte o tópico Operações LEFT JOIN, RIGHT JOIN.
Mostrar todas as linhas de ambas as tabelas e associar-lhes onde existe um valor comum
Quando quiser mostrar todas as linhas de duas tabelas e associá-las com base em valores comuns, deve utilizar uma associação externa completa. O Access não suporta explicitamente associações externas completas, mas pode conseguir o mesmo efeito ao utilizar uma consulta união. O seguinte procedimento explica como fazê-lo, mas se quiser obter mais informações sobre consultas união, consulte a secção Consulte Também .
Para utilizar uma consulta união para realizar uma associação externa completa:
Crie uma consulta que contenha uma associação externa à esquerda no campo que pretende utilizar para uma associação externa completa.
No separador Base, no grupo Vistas, clique em Vista e, em seguida, clique em Vista de SQL.
Prima CTRL+C para copiar o código SQL.
Elimine o ponto e vírgula no final da cláusula FROM e, em seguida, prima ENTER.
Escreva UNION e prima ENTER.
Nota
Não utilize a palavra-chave ALL quando utilizar uma consulta união para realizar uma associação externa completa.
Prima CTRL+V para colar o código SQL que copiou no passo 3.
No código que colou, altere LEFT JOIN para RIGHT JOIN.
Elimine o ponto e vírgula no final da segunda cláusula FROM e, em seguida, prima ENTER.
Adicione uma cláusula WHERE que especifique que o valor do campo join é NULL na primeira tabela listada na cláusula FROM (a tabela à esquerda).
Por exemplo, se a cláusula FROM for:FROM Products RIGHT JOIN [Order Details] ON Products.ID = [Order Details].[Product ID]Acrescentaria a seguinte cláusula WHERE:
WHERE Products.ID IS NULLEscreva um ponto e vírgula (;) no final da cláusula WHERE para indicar o fim da consulta união.
No separador Estrutura, no grupo Resultados, clique em Executar.
Associações cruzadas
As associações cruzadas são diferentes das associações internas e externas, uma vez que não estão explicitamente representadas no Access. Numa associação cruzada, cada linha de uma tabela é combinada com cada linha de outra tabela, resultando no que é designado por produto cruzado ou produto cartesiano. Sempre que executar uma consulta com tabelas que não estejam explicitamente associadas, o resultado será apresentado um produto cruzado. Normalmente, as associações cruzadas não são intencionais, mas podem ser úteis em casos de associação.
Por que motivo devo utilizar uma associação cruzada?
Se quiser examinar todas as combinações possíveis de linhas entre duas tabelas ou consultas, utilize uma associação cruzada. Por exemplo, suponha que sua empresa teve um ano espetacular e você está pensando em dar descontos aos seus clientes. Pode criar uma consulta que soma as compras de cada cliente, criar uma pequena tabela com várias percentagens de desconto possíveis e combinar as duas noutra consulta que efetua uma associação cruzada. Você acaba com uma consulta que exibe um conjunto de descontos hipotéticos para cada cliente.
Como devo proceder para utilizar uma associação cruzada?
Uma associação cruzada é produzida sempre que incluir tabelas ou consultas na sua consulta e não crie, pelo menos, uma associação explícita para cada tabela ou consulta. O Access combina todas as linhas de cada tabela ou consulta que não estejam explicitamente associadas a outras tabelas ou consultas a linhas alternadas nos resultados. Tenha em conta o cenário de desconto do parágrafo anterior. Suponha que tem 91 clientes e que pretende ver cinco percentagens de desconto possíveis. A sua associação cruzada produz 455 linhas (o produto de 91 e 5).
Como pode imaginar, as associações cruzadas não intencionais podem criar um grande número de linhas nos resultados da sua consulta. Além disso, estes resultados não fazem geralmente sentido, porque se não pretende combinar todas as linhas com linhas alternadas, a maioria das linhas combinadas que aparecem nos resultados não fará sentido. Por fim, as consultas que utilizam associações cruzadas não intencionais podem demorar muito tempo a serem executadas.
1. Os campos em círculo devem ser unidos uns aos outros.
1. Repare num número muito elevado de registos.
1. Repare que o número de registos é muito menor.
Associar tabelas com base numa desigualdade de valores de campo
As associações não têm de ser baseadas na equivalência dos campos associados. Uma associação pode ser baseada em qualquer operador de comparação, como maior que (>), menor que (<), ou não igual a (<>). As associações que não se baseiam em equivalência são denominadas associações desiguais.
Se quiser combinar as linhas de duas origens de dados com base em valores de campo que não sejam iguais, deverá utilizar uma associação desigual. Normalmente, as associações desiguais baseiam-se nos operadores de comparação maior que (>), menor que (<), maior que ou igual a (>=) ou menor que ou igual a (<=). As associações desiguais baseadas no operador Não É Igual (<>) podem devolver quase tantas linhas como as associações cruzadas e os resultados podem ser difíceis de interpretar.
Como devo proceder para utilizar uma associação desigual?
As associações desiguais não são suportadas na vista Estrutura. Se pretender utilizá-los, tem de o fazer através da vista SQL. No entanto, pode criar uma associação na vista Estrutura, mudar para a vista SQL, encontrar o operador de comparação de igual (=) e alterá-lo para o operador que pretende utilizar. Depois de o fazer, só pode abrir novamente a consulta na vista Estrutura se primeiro alterar o operador de comparação novamente para igual (=) na vista SQL.
Eliminar uma associação
Se o Access criar automaticamente uma associação que não pretende ou se criar uma associação por engano, por exemplo, uma associação entre dois campos com tipos de dados diferentes, pode eliminar a associação.
- Na grelha de estrutura da consulta, clique na associação que pretende remover.
- Prima DELETE.
-ou-
- Na grelha de estrutura da consulta, clique com o botão direito do rato na associação que pretende remover e, em seguida, clique em Eliminar.
Adicionar registos a uma tabela utilizando uma consulta de acréscimoCombinar os resultados de várias consultas selecionar utilizando uma consulta uniãoCriar uma consulta com base em múltiplas tabelasCriar, editar ou eliminar uma relação