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
- Tipos de junções
- Mostrar linhas em que existe um valor comum em ambas as tabelas unidas
- Mostrar todas as linhas de uma tabela e as linhas correspondentes da outra tabela
- Mostrar todas as linhas de ambas as tabelas e juntá-las onde houver um valor comum
- Junções cruzadas
- Unir tabelas com base em uma desigualdade de valores de campo
- Excluir uma junção
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:
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.
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.
Junções internas: somente dados relacionados de ambas as tabelas combinados
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.
Junções externas: todos os dados relacionados combinados corretamente, além de todos os registros restantes de uma tabela
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.
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
- 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. - 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.
- 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 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.
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:
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 a palavra-chave ALL ao usar uma consulta união para executar uma junção externa completa.
Pressione CTRL+V para colar o código SQL que você copiou na etapa 3.
No código que você colou, altere LEFT JOIN para RIGHT JOIN.
Exclua o ponto-e-vírgula no final da segunda cláusula FROM e pressione ENTER.
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 NULLDigite um ponto e vírgula (;) no final da cláusula WHERE para indicar o fim da consulta união.
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.
1. Os campos circulados 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 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.
- Na grade de design da consulta, clique na junção que você deseja remover.
- 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.
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