Associar tabelas e consultas

Aplica-se a
Access para Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Ao incluir várias fontes de dados em uma consulta do Access, você usa junções para limitar os registros que deseja ver, com base em como as fontes de dados estão relacionadas entre si. Você também usa junções para combinar registros de ambas as fontes de dados, de modo que cada par de registros das fontes se torne um registro nos resultados da consulta.

Este artigo discute os vários tipos de junções e mostra como usá-las em uma consulta. Por padrão, uma junção é criada automaticamente se já houver uma relação entre duas fontes de dados usadas em uma consulta. Uma junção também será criada se houver campos que correspondam claramente entre si. Você pode excluir uma junção criada automaticamente. Este artigo fornece informações básicas sobre relações de tabelas, incluindo como criar uma.

Observação

Você pode unir consultas da mesma maneira que associa tabelas e também pode unir ambas.

Neste artigo

Visão Geral

Um banco de dados é uma coleção de tabelas de dados que possuem relações lógicas entre si. Você usa relações para conectar tabelas por campos que elas têm em comum. Uma tabela pode fazer parte de qualquer número de relações, mas cada relação sempre tem exatamente duas tabelas. Em uma consulta, uma relação é representada por uma junção.

Quando você adiciona tabelas a uma consulta, o Access cria associações baseadas nas relações que foram definidas entre as tabelas. Você pode criar junções manualmente em consultas, mesmo que elas não representem relações que já foram definidas. Se você usar outras consultas (em vez de ou além de tabelas) como fontes de dados para uma consulta, poderá criar junções entre as consultas de origem e também entre essas consultas e quaisquer tabelas que você usa como fontes de dados.

As junções se comportam de maneira semelhante aos critérios de consulta, pois estabelecem regras às quais os dados devem corresponder para serem incluídos nas operações de consulta. Ao contrário dos critérios, as junções também especificam que cada par de linhas que satisfaz as condições de junção será combinado no conjunto de registros para formar uma única linha.

Existem quatro tipos básicos de junções: junções internas, junções externas, junções cruzadas e junções desiguais. Este artigo explora cada tipo de junção que você pode usar, por que você usa cada tipo e como criar as junções.

As junções são para consultas quais são as relações com as tabelas: uma indicação de como os dados em duas fontes podem ser combinados com base nos valores de dados que elas têm em comum. Veja uma ilustração de uma junção no modo Design da consulta, com as propriedades da junção abertas em uma caixa de diálogo:

A caixa Propriedades da Junção.

Essa linha entre as tabelas representa a junção. Clique duas vezes em uma junção para abrir a caixa de diálogo Propriedades da Junção (representada) e revise ou altere a junção.

Às vezes, as junções são direcionais. Esta área da caixa de diálogo mostra qual tabela é qual na junção e quais campos são usados para unir as tabelas.

Essa área determina o tipo de junção: a opção 1 é uma junção interna, 2 é uma junção externa esquerda e 3 é uma junção externa direita.

Os campos de ambas as tabelas podem ser usados, e os dados que pertencem a uma determinada tarefa são exibidos em cada uma. Em uma junção interna, nenhum outro dado é incluído. Em uma junção externa, registros não relacionados de uma tabela também são incluídos nos resultados da consulta.

Início da Página

Tipos de junções

Existem quatro tipos básicos de junções: junções internas, junções externas, junções cruzadas e junções desiguais. Junções cruzadas e junções desiguais são tipos de junções avançadas e raramente são usadas, mas você deve conhecê-las para ter uma compreensão completa de como as junções funcionam.

Uma junção interna é aquela em que o Access só inclui dados de uma tabela se houver dados correspondentes na tabela relacionada e vice-versa. Na maioria das vezes, você usará junções internas. Quando você cria uma junção e não especifica que tipo de junção é, o Access supõe que você deseja uma junção interna. As junções internas são úteis porque permitem combinar dados de duas fontes com base em valores compartilhados, portanto, você só verá os dados quando houver uma imagem completa.

Uma junção externa é como uma junção interna, mas adiciona as linhas restantes de uma das tabelas. As junções externas são direcionais: uma junção externa esquerda inclui todos os registros da tabela esquerda – a primeira tabela na junção – e uma junção externa direita inclui todos os registros da tabela direita – a segunda tabela na junção.

Junções externas completas: todos os dados, combinados sempre que possível

Em alguns sistemas, uma junção externa pode incluir todas as linhas de ambas as tabelas, com linhas combinadas quando elas correspondem. Isso é chamado de junção externa completa, e o Access não dá suporte explicitamente a elas. No entanto, você pode usar uma junção cruzada e critérios para obter o mesmo efeito.

Junções cruzadas: todos os dados, combinados de todas as formas possíveis

Na maioria das vezes, uma união cruzada é um efeito colateral da adição de duas tabelas a uma consulta e do esquecimento de juntá-las. O Access interpreta isso como significando que você deseja ver todos os registros de uma tabela combinados com todos os registros da outra tabela, ou seja, todas as combinações possíveis de registros. Como nenhum dado pode ser combinado, esse tipo de junção raramente produz resultados úteis. Mas há alguns casos em que uma junção cruzada é exatamente o que você precisa.

Junções desiguais: como uma junção normal, mas usando uma comparação diferente para combinar linhas

Junções desiguais usam um operador diferente do sinal de igual (=) para comparar valores e determinar se e como combinar os dados. Não há suporte explícito para junções desiguais, mas você pode usar uma junção cruzada e critérios para obter o mesmo efeito.

Mostrar linhas em que existe um valor comum em ambas as tabelas unidas

Se você quiser mostrar somente as linhas que têm valores correspondentes no campo associado, use uma junção interna. O Access cria junções internas automaticamente.

As junções internas são o tipo de junção mais comum. Eles informam a uma consulta que as linhas de uma das tabelas unidas correspondem às linhas da outra tabela, com base nos dados nos campos associados. Quando uma consulta com uma junção interna é executada, somente as linhas em que existe um valor comum em ambas as tabelas unidas serão incluídas nas operações de consulta.

Como fazer usar uma junção interna?

Na maioria das vezes, você não precisa fazer nada para usar uma junção interna. Se as tabelas adicionadas a uma consulta já tiverem relações, o Access criará automaticamente uma junção interna entre cada par de tabelas relacionadas, quando você adicionar as tabelas. Se a integridade referencial for imposta, o Access também exibirá um "1" acima da linha de junção para mostrar qual tabela está no lado "um" de uma relação um-para-muitos e um símbolo de infinito () para mostrar qual tabela está no lado "muitos".

Mesmo que você não tenha criado relações, o Access cria automaticamente junções internas se você adicionar duas tabelas a uma consulta e cada uma dessas tabelas tiver um campo com o mesmo tipo de dados ou compatível e um dos campos de junção for uma chave primária. Os símbolos "um" e "muitos" não são exibidos nesse caso, pois a integridade referencial não é imposta.

Se você adicionar consultas a sua consulta e não tiver criado relações entre elas, o Access não criará automaticamente junções internas entre essas consultas ou entre consultas e tabelas. Geralmente, você deve criá-los por conta própria. Para criar uma junção interna, arraste um campo de uma fonte de dados para um campo em outra fonte de dados. O Access exibe uma linha entre os dois campos para mostrar que uma junção foi criada.

Sintaxe SQL para uma junção interna

As junçõ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 deverão 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 interna, consulte o tópico Operação de junção interna.

Início da Página

Mostrar todas as linhas de uma tabela e as linhas correspondentes da outra tabela

As junções externas informam 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 direitas. Em uma junção externa esquerda, a consulta inclui todas as linhas da primeira tabela na cláusula FROM da instrução SQL e somente 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 somente 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 da esquerda ou da direita em uma determinada junção clicando duas vezes na junção e, em seguida, procurando na caixa de diálogo Propriedades da Junção . Você também pode alternar para o modo de exibição SQL e, em seguida, examinar a cláusula FROM.

Como algumas das linhas de um lado de uma associação externa não terão linhas correspondentes da outra tabela, alguns dos campos retornados nos resultados da consulta dessa outra tabela ficarão vazios quando as linhas não corresponderem.

Como fazer usar uma junção externa?

Para criar uma junção externa, modifique uma junção interna existente. Se não houver nenhuma junção interna, você criará uma e a alterará para uma junção externa.

Alterar uma junção interna para uma junção externa

  1. Na exibição Design da consulta, clique duas vezes na junção que você deseja alterar.
    A caixa de diálogo Propriedades da Junção aparece.
  2. Na caixa de diálogo Propriedades da Junção , observe as opções listadas ao lado da opção 2 e da opção 3.
  3. Clique na opção que você deseja usar e clique em OK.
  4. O Access exibe a junção e mostra uma seta que aponta da fonte de dados onde todas as linhas serão incluídas para a fonte de dados onde apenas as linhas que atenderem à condição de junção serão incluídas.

Junções externas ambíguas

Se você criar uma consulta que contenha uma JUNÇÃO ESQUERDA e uma JUNÇÃO INTERNA, talvez o Access não seja capaz de determinar qual operação de associaçã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 fique claro qual junção deve 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 ] JOIN table2
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 Operações LEFT JOIN, RIGHT JOIN.

Início da Página

Mostrar todas as linhas de ambas as tabelas e juntá-las onde houver 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 Access não oferece suporte explícito a junções externas completas, mas você pode obter o mesmo efeito usando uma consulta união. O procedimento a seguir explica como fazer isso, mas se você quiser obter mais informações sobre consultas sindicais, consulte a seção Consulte também .

Para usar uma consulta união para executar uma junção externa completa:

  1. Crie uma consulta que tenha uma junção externa esquerda no campo que você deseja usar para uma junção externa completa.

  2. Na guia Página Inicial, no grupo Modos de Exibição, clique em Modo de Exibição e clique em Modo SQL.

  3. Pressione CTRL+C para copiar o código SQL.

  4. Exclua o ponto-e-vírgula no final da cláusula FROM e pressione ENTER.

  5. Digite UNION e pressione Enter.

    Observação

    Não use a palavra-chave ALL ao usar uma consulta união para executar uma junção externa completa.

  6. Pressione CTRL+V para colar o código SQL que você copiou na etapa 3.

  7. No código que você colou, altere LEFT JOIN para RIGHT JOIN.

  8. Exclua o ponto-e-vírgula no final da segunda cláusula FROM e pressione ENTER.

  9. Adicione uma cláusula WHERE que especifique 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 NULL

  10. Digite um ponto e vírgula (;) no final da cláusula WHERE para indicar o fim da consulta união.

  11. 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, pois não são explicitamente representadas 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ê executar uma consulta que tenha tabelas que não são explicitamente unidas, um produto cruzado será 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 tenha tido um ano espetacular e você esteja pensando em dar descontos aos seus clientes. Você pode criar uma consulta que some as compras de cada cliente, criar uma pequena tabela com várias porcentagens de desconto possíveis e combinar as duas em outra consulta que execute 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 nenhuma outra tabela ou consulta a todas as outras linhas nos resultados. Considere o cenário de reembolso do parágrafo anterior. Suponha que você tenha 91 clientes e que queira examinar cinco porcentagens 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 nos resultados da consulta. Além disso, esses resultados geralmente não têm sentido, porque se você realmente 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.

Junção cruzada não intencional na consulta Modo Design 1. Os campos circulados devem ser unidos uns aos outros.

Produto cruzado não intencional 1. Observe o número muito grande de registros.

O resultado da consulta corrigido 1. Observe que o número de registros é muito menor.

Início da Página

Unir tabelas com base em uma desigualdade de valores de campo

As junções não precisam ser baseadas na equivalência dos campos unidos. Uma junção pode ser baseada em qualquer operador de comparação, como maior que (>), menor que (<) ou não igual a (<>). As junções que não são baseadas em 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 nos operadores de comparação maior que (>), menor que (<), maior ou igual a (>=) ou menor ou igual a (<=). As junções desiguais baseadas no operador não é igual (<>) podem retornar quase tantas linhas quanto as junções cruzadas, e os resultados podem ser difíceis de interpretar.

Como fazer para usar uma junção desigual?

Não há suporte para junções desiguais no modo Design. Se você deseja usá-los, deve fazê-lo usando o modo SQL. No entanto, você pode criar uma junção no modo Design, alternar para o modo SQL, localizar o operador de comparação igual (=) e alterá-lo para o operador que deseja usar. Depois de fazer isso, você só poderá abrir a consulta no modo Design novamente se primeiro alterar o operador de comparação de volta para igual (=) no modo SQL.

Excluir uma junção

Se o Access criar automaticamente uma junção que você não quer, 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.

  1. Na grade de design da consulta, clique na junção que você deseja remover.
  2. Pressione Delete.

–ou–

  • Na grade de design da consulta, clique com o botão direito do mouse na junção que você deseja remover e clique em Excluir.

Início da Página

Adicionar registros a uma tabela usando uma consulta acréscimoCombinar os resultados de várias consultas seleção usando uma consulta uniãoCriar uma consulta com base em várias tabelasCriar, editar ou excluir uma relação