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 entre si. Também utiliza associações para combinar registos de ambas as origens de dados, para que cada par de registos das origens se torne um registo nos resultados da consulta.
Este artigo aborda os vários tipos de associações e mostra-lhe como utilizá-las numa consulta. Por predefinição, é criada automaticamente uma associação se já existir uma relação entre duas origens de dados que utiliza numa consulta. Também é criada uma associação se existirem campos que correspondam claramente uns aos outros. Pode eliminar uma associação criada automaticamente. Este artigo fornece informações básicas sobre relações de tabela, incluindo como criar uma.
Observação
Pode associar consultas da mesma forma que associa tabelas e também pode associar ambas.
Neste artigo
- Visão geral
- Tipos de associações
- Mostrar linhas em que 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 associá-las onde existe um valor comum
- Associações cruzadas
- Associar tabelas com base numa desigualdade de valores de campo
- Eliminar uma associação
Visão geral
Uma base de dados é uma coleção de tabelas de dados que suportam relações lógicas entre si. Pode utilizar relações 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 em relações que foram definidas entre as tabelas. Pode criar associações manualmente em consultas, mesmo que não representem relações que já tenham sido definidas. Se utilizar outras consultas (em vez de ou além de 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 utilize como origens de dados.
As associações comportam-se de forma semelhante aos critérios de consulta na medida em que estabelecem regras que 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á combinado no conjunto de registos para formar uma única linha.
Existem quatro tipos básicos de associações: associações internas, associações externas, associações cruzadas e associações 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 consultar as relações que são com as 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.
Por vezes, as associações são direcionais. Esta área da caixa de diálogo mostra-lhe qual é a tabela 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.
Os campos de ambas as tabelas podem ser utilizados 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: associações internas, associações externas, associações cruzadas e associações desiguais. Associações cruzadas e associações desiguais são tipos de associação avançadas e raramente são utilizados, mas deve saber sobre eles para ter uma compreensão completa de como as associações funcionam.
Associações internas: apenas dados relacionados de ambas as tabelas combinadas
Uma associação interna é aquela em que o Access só inclui dados de uma tabela se existirem dados correspondentes na tabela relacionada e vice-versa. Na maioria das vezes, irá utilizar associações internas. Quando cria uma associação e não especifica 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, pelo que só vê dados quando existe uma imagem completa.
Associações externas: todos os dados relacionados combinados corretamente, bem como todos os restantes registos de uma tabela
Uma associação externa é como uma associação interna, mas adiciona as restantes linhas 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 direita – a segunda tabela na 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. Isto chama-se 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 colateral de adicionar duas tabelas a uma consulta e, em seguida, esquecer-se de as associar. O Access interpreta isto para significar 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. Uma vez que não é possível combinar dados, este tipo de associação raramente produz resultados úteis. Mas há alguns casos em que uma associação cruzada é exatamente o que você precisa.
Associações desiguais: como uma associação regular, mas com 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 em que existe um valor comum em ambas as tabelas associadas
Se quiser mostrar apenas as linhas que têm valores correspondentes no campo associado, utilize uma associação interna. O Access cria associações internas automaticamente.
As junções internas são o tipo de junção mais comum. 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. Quando uma consulta com uma associação interna é executada, apenas as linhas em que existe um valor comum em ambas as tabelas associadas serão incluídas nas operações de consulta.
Como fazer utilizar uma associação interna?
Na maioria das vezes, não precisa de fazer nada para utilizar uma associação interna. Se as tabelas que adicionar a uma consulta já tiverem relações, o Access cria automaticamente uma associação interna entre cada par de tabelas relacionadas quando adiciona as tabelas. Se a integridade referencial for imposta, o Access também apresenta 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 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 essas tabelas tiverem um campo com o mesmo tipo de dados ou um dos campos de associação é uma chave primária. Os símbolos "um" e "muitos" não são apresentados neste caso, porque a integridade referencial não é imposta.
Se adicionar consultas à consulta e não tiver criado relações entre essas consultas, o Access não cria automaticamente associações internas entre essas consultas ou entre consultas e tabelas. Geralmente, deve criá-los manualmente. Pode criar uma associação interna ao arrastar um campo de uma origem de dados para um campo noutra origem de dados. O Access exibe uma linha entre os dois campos para mostrar que uma junção foi criada.
Sintaxe SQL para uma associação interna
As associações internas são especificadas no SQL na cláusula FROM, conforme mostrado abaixo:
FROM table1 INNER JOIN table2 ON table1. campo1 comparar tabela2. campo2
A operação INNER JOIN tem estas partes:
| Parte | Descrição |
|---|---|
| tabela1, tabela2 | Os nomes das tabelas das quais os registros são combinados. |
| campo1, campo2 | Os nomes dos campos que são unidos. Se não forem numéricos, os campos têm de ter o mesmo tipo de dados e conter o mesmo tipo de dados, mas não têm de ter o mesmo nome. |
| comparar | Qualquer operador de comparação relacional: "=", "<", "", "><=", ">=" ou "<>". |
Para obter mais informações sobre a sintaxe de associação interna, veja o tópico Operação INNER JOIN.
Mostrar todas as linhas de uma tabela e as linhas correspondentes da outra tabela
As junções externas dizem a uma consulta que, embora algumas das linhas em ambos os lados da junção correspondam exatamente, a consulta deve incluir todas as linhas de uma tabela e também as linhas da outra tabela que compartilham um valor comum em ambos os lados da junção.
As junções externas podem ser junções externas à esquerda ou podem ser junções externas à direita. Em uma junção externa à esquerda, a consulta inclui todas as linhas da primeira tabela na cláusula FROM da instrução SQL e apenas as linhas da outra tabela em que o campo de junção contém valores comuns a ambas as tabelas. Em uma junçã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 junção contém valores comuns a ambas as tabelas.
Observação
Você pode facilmente dizer qual tabela é a tabela esquerda ou a tabela direita em uma determinada junção clicando duas vezes na junção e, em seguida, olhando na caixa de diálogo Propriedades de Junção . Você também pode alternar para o modo de exibição SQL e examinar a cláusula FROM.
Como algumas das linhas de um lado de uma junção externa não terão linhas correspondentes da outra tabela, alguns dos campos retornados na consulta resultam dessa outra tabela estarão vazios quando as linhas não corresponderem.
Como fazer usar uma junção externa?
Você cria uma junção externa modificando uma junção interna existente. Se nenhuma junção interna existir, você criará uma e, em seguida, alterá-la para uma junção externa.
Alterar uma junção interna para uma junção externa
- Na exibição Design de consulta, clique duas vezes na junção que você deseja alterar.
A caixa de diálogo Propriedades da Junção aparece. - Na caixa de diálogo Propriedades de Junção , observe as opções listadas ao lado da opção 2 e da opção 3.
- Clique na opção que você deseja usar e clique em OK.
- O Access exibe a junção e mostra uma seta que aponta da fonte de dados em que todas as linhas serão incluídas na fonte de dados em que somente as linhas que atendem à condição de junção serão incluídas.
Junções externas ambíguas
Se você criar uma consulta que contenha um JOIN LEFT e um JOIN INTERNO, o Access poderá não ser capaz de determinar qual operação de junção executar primeiro. Como os resultados são diferentes dependendo se a junção à esquerda ou a junção interna é executada primeiro, o Access exibe uma mensagem de erro:
Para corrigir esse erro, você deve modificar a consulta para que ela fique clara de qual junção será executada primeiro.
Sintaxe SQL para uma junção externa
As junções externas são especificadas no SQL na cláusula FROM, conforme mostrado abaixo:
FROM table1 [ LEFT | RIGHT ] TABELA JOIN2
ON table1.field1 compare table2.field2
As operações LEFT JOIN e RIGHT JOIN têm estas partes:
| Parte | Descrição |
|---|---|
| tabela1, tabela2 | Os nomes das tabelas das quais os registros são combinados. |
| campo1, campo2 | Os nomes dos campos que são unidos. Os campos devem ser do mesmo tipo de dados e conter o mesmo tipo de dados, mas não precisam ter o mesmo nome. |
| comparar | Qualquer operador de comparação relacional: "=", "<", ">", "<=", ">=" ou "<>". |
Para obter mais informações sobre a sintaxe de junção externa, consulte o tópico LEFT JOIN, RIGHT JOIN Operations.
Mostrar todas as linhas de ambas as tabelas e juntá-las onde existe um valor comum
Quando você deseja mostrar todas as linhas de duas tabelas e juntá-las com base em valores comuns, você usa uma junção externa completa. O acesso não dá suporte explicitamente a junções externas completas, mas você pode obter o mesmo efeito usando uma consulta sindical. O procedimento a seguir explica como fazer isso, mas se você quiser mais informações sobre consultas sindicais, consulte a seção Consulte Também .
Para usar uma consulta sindical para executar uma junção externa completa:
Crie uma consulta que tenha uma junção externa à esquerda no campo que você deseja usar para uma junção externa completa.
Na guia Página Inicial, no grupo Modos de Exibição, clique em Modo de Exibição e clique em Modo SQL.
Pressione CTRL+C para copiar o código SQL.
Exclua o ponto e vírgula no final da cláusula FROM e pressione ENTER.
Digite UNION e pressione Enter.
Observação
Não use o ALL palavra-chave quando você usa uma consulta sindical para executar uma junção externa completa.
Pressione CTRL+V para colar o código SQL copiado na etapa 3.
No código colado, altere JUNÇÃO ESQUERDA PARA JUNÇÃO DIREITA.
Exclua o ponto e vírgula no final da segunda cláusula FROM e pressione ENTER.
Adicione uma cláusula WHERE que especifica que o valor do campo de junção é 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]Você adicionaria a seguinte cláusula WHERE:
WHERE Products.ID IS NULLDigite um ponto e vírgula (;) no final da cláusula WHERE para indicar o fim da consulta sindical.
Na guia Design, no grupo Resultados, clique em Executar.
Junções cruzadas
As junções cruzadas são diferentes das junções internas e externas, na qual não são representadas explicitamente no Access. Em uma junção cruzada, cada linha de uma tabela é combinada com cada linha de outra tabela, resultando no que é chamado de produto cruzado ou um produto Cartesiano. Sempre que você executa uma consulta que tem tabelas que não estão explicitamente ingressadas, um produto cruzado é o resultado. As junções cruzadas geralmente não são intencionais, mas há casos em que podem ser úteis.
Por que eu usaria uma junção cruzada?
Se você quiser examinar todas as combinações possíveis de linhas entre duas tabelas ou consultas, use uma junção cruzada. Por exemplo, suponha que sua empresa teve um ano espetacular, e você está considerando dar descontos aos seus clientes. Você pode criar uma consulta que soma as compras de cada cliente, criar uma pequena tabela com vários percentuais de desconto possíveis e combinar os dois em outra consulta que executa uma junção cruzada. Você acaba com uma consulta que exibe um conjunto de descontos hipotéticos para cada cliente.
Como fazer usar uma junção cruzada?
Uma junção cruzada é produzida sempre que você inclui tabelas ou consultas em sua consulta e não cria pelo menos uma junção explícita para cada tabela ou consulta. O Access combina todas as linhas de cada tabela ou consulta que não estão explicitamente unidas a qualquer outra tabela ou consulta a todas as outras linhas nos resultados. Considere o cenário de desconto do parágrafo anterior. Suponha que você tenha 91 clientes e que deseja examinar cinco percentuais de desconto possíveis. Sua junção cruzada produz 455 linhas (o produto de 91 e 5).
Como você pode imaginar, junções cruzadas não intencionais podem criar um grande número de linhas em seus resultados de consulta. Além disso, esses resultados geralmente não têm sentido, porque se você não pretende combinar todas as linhas com todas as outras linhas, a maioria das linhas combinadas que aparecem nos resultados não fará sentido. Por fim, as consultas que usam junções cruzadas não intencionais podem levar muito tempo para serem executadas.
1. Os campos em círculo devem ser unidos uns aos outros.
1. Observe o número muito grande de registros.
1. Observe que o número de registros é muito menor.
Unir tabelas com base em uma desigualdade de valores de campo
As junções não precisam ser baseadas na equivalência dos campos ingressados. Uma junção pode ser baseada em qualquer operador de comparação, como maior que (>), menor que (<) ou não igual (<>). As junções que não se baseiam na equivalência são chamadas de junções desiguais.
Se você quiser combinar as linhas de duas fontes de dados com base em valores de campo que não são iguais, use uma junção desigual. Normalmente, as junções desiguais são baseadas em operadores de comparação maiores que (>), menores que (<), maiores ou iguais a (>=), ou inferiores ou iguais a (<=). Junções desiguais baseadas no operador não igual (<>) podem retornar quase tantas linhas quanto junções cruzadas, e os resultados podem ser difíceis de interpretar.
Como fazer usar uma junção desigual?
Não há suporte para junções desiguais no modo design. Se você deseja usá-los, você deve fazê-lo usando o modo de exibição SQL. No entanto, você pode criar uma junção no modo design, alternar para exibição SQL, localizar o operador de comparação igual (=) e alterá-lo para o operador que você deseja usar. Depois de fazer isso, você só poderá abrir a consulta no modo design novamente se alterar primeiro o operador de comparação de volta para igual (=) na exibição SQL.
Excluir uma junção
Se o Access criar automaticamente uma junção que você não deseja ou se você criar uma junção por engano, por exemplo, uma junção entre dois campos que têm tipos de dados diferentes, você poderá excluir a junção.
- Na grade de design da consulta, clique na junção que você deseja remover.
- Pressione 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 através de uma consulta de acréscimoCombine os resultados de várias consultas selecionar ao utilizar uma consulta uniãoCriar uma consulta com base em várias tabelasCriar, editar ou eliminar uma relação