Usar uma consulta união para combinar várias consultas em um único resultado

Usar uma consulta união para combinar várias consultas em um único resultado

Às vezes, você pode preferir listar os registros de uma tabela ou consulta com os de outras tabelas para formar um conjunto de registros, ou seja, uma lista com todos os registros das duas ou mais tabelas. Essa é a finalidade de uma consulta união no Access.

Para entender efetivamente as consultas união, primeiro você deve estar familiarizado com o design de consultas seleção básicas no Access. Para saber mais sobre como criar consultas seleção, confira Criar uma consulta seleção simples.

Observação: O conteúdo deste artigo destina-se ao uso com bancos de dados da área de trabalho do Access. Não é possível criar ou usar uma consulta união nos bancos de dados da Web do Access ou no Access Web Apps.

Observe um exemplo funcional de consulta união

Se nunca tiver criado uma consulta união, talvez seja útil primeiro observar um exemplo funcional no modelo do Access da Northwind. Você pode procurar o modelo de exemplo da Northwind na página de introdução do Access clicando em Arquivo > Novo ou pode baixar uma cópia diretamente deste local: Modelo de exemplo da Northwind.

Depois que o Access abrir o banco de dados da Northwind, descarte o formulário de diálogo de logon exibido e expanda o Painel de Navegação. Clique na parte superior do Painel de Navegação e escolha Tipo de Objeto para organizar todos os objetos do banco de dados por tipo. Em seguida, expanda o grupo Consultas e você verá uma consulta chamada Transações de produtos.

As consultas união são fáceis de diferenciar de outros objetos de consulta porque possuem um ícone especial que se parecem com dois círculos entrelaçados representando um conjunto unido a partir de dois conjuntos:

Captura de tela do ícone de uma consulta união no Access.

Ao contrário das consultas normais de seleção e ação, as tabelas não são relacionadas em uma consulta união, o que significa que o designer de consulta gráfica do Access não pode ser usado para criar ou editar consultas união. Isso ocorrerá se você abrir uma consulta união no Painel de Navegação. O Access abrirá a consulta e exibirá os resultados no modo Folha de Dados. No comando Modos, na guia Página Inicial, você observará que o Modo Design não está disponível quando você trabalha com consultas união. Você só pode alternar entre Modo Folha de Dados e Modo SQL ao trabalhar com consultas união.

Para continuar observando o exemplo de consulta união, clique em Página Inicial > Modos > Modo SQL para exibir a sintaxe SQL que a define. Nesta ilustração, adicionamos um espaçamento extra no SQL para que você possa ver facilmente as várias partes que formam uma consulta união.

Seu navegador não aceita vídeo. Instale o Microsoft Silverlight, o Adobe Flash Player ou o Internet Explorer 9.

Vamos observar os detalhes da sintaxe SQL dessa consulta união no banco de dados da Northwind:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], [Quantity]
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity]
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

A primeira e a terceira parte desta instrução SQL são essencialmente duas consultas seleção. Essas consultas recuperam dois conjuntos diferentes de registros: um da tabela Pedidos de produtos e um da tabela Compras de produtos.

A segunda parte dessa instrução SQL é a palavra-chave UNION que informa ao Access que essa consulta combinará esses dois conjuntos de registros.

A última parte desta instrução SQL determina a ordenação dos registros combinados usando uma instrução ORDER BY. Neste exemplo, o Access solicitará todos os registros usando o campo Data do pedido em ordem decrescente.

Observação: As consultas união são sempre somente leitura no Access. Não é possível alterar valores no modo Folha de Dados.

Criar uma consulta união criando e combinando consultas seleção

Embora você possa criar uma consulta união gravando diretamente a sintaxe SQL no modo SQL, talvez seja mais fácil criá-la por partes com consultas seleção. Em seguida, você pode copiar e colar as partes do SQL em uma consulta união combinada.

Se você quiser pular a leitura das etapas e, em vez disso, assistir a um exemplo, confira a próxima seção, Assista a um exemplo de criação de uma consulta união.

  1. Na guia Criar, no grupo Consultas, clique em Design da Consulta.

  2. Na caixa de diálogo Mostrar Tabela, clique duas vezes na tabela que possui os campos a serem incluídos. A tabela é adicionada à janela de design da consulta.

  3. Feche a caixa de diálogo Mostrar Tabela.

  4. Na janela de design de consulta, clique duas vezes em cada um dos campos que você deseja incluir. Ao selecionar campos, verifique se adicionou o mesmo número de campos que adicionou às outras consultas seleção, na mesma ordem. Preste bastante atenção aos tipos de dados dos campos e verifique se eles possuem tipos de dados compatíveis com os campos na mesma posição das outras consultas que você está combinando. Por exemplo, se a primeira consulta seleção tiver cinco campos, o primeiro deles contendo dados de data/hora, verifique se as outras consultas seleção que você está combinando também têm cinco campos, o primeiro deles contendo dados de data/hora, e assim por diante.

  5. Opcionalmente, adicione critérios aos campos, digitando as expressões apropriadas na linha Critérios da grade de campo.

  6. Após terminar de adicionar campos e critérios de campo, execute a consulta seleção e examine a saída. Na guia Design, no grupo Resultados, clique em Executar.

  7. Alterne a consulta para o modo Design.

  8. Salve a consulta seleção e deixe-a aberta.

  9. Repita este procedimento para cada consulta seleção que deseja combinar.

Agora que você criou suas consultas seleção, chegou a hora de combiná-las. Nesta etapa, você pode criar a consulta união copiando e colando instruções SQL.

  1. Na guia Criar, no grupo Consultas, clique em Design da Consulta.

  2. Feche a caixa de diálogo Mostrar Tabela.

  3. Na guia Design, no grupo Consulta, clique em União. O Access oculta a janela de design da consulta e mostra a guia de objeto Modo SQL. Neste ponto, a guia de objeto Modo SQL estará vazia.

  4. Clique na guia da primeira consulta seleção a ser combinada na consulta união.

  5. Na guia Página Inicial, clique em Exibir> Modo SQL.

  6. Copie a instrução SQL da consulta seleção. Clique na guia da consulta união que você começou a criar anteriormente.

  7. Cole a instrução SQL da consulta seleção na guia de objeto Modo SQL da consulta união.

  8. Exclua o ponto-e-vírgula (;) no final da instrução SQL da consulta seleção.

  9. Pressione Enter para mover o cursor uma linha para baixo e digite UNION na nova linha.

  10. Clique na guia da próxima consulta seleção a ser combinada na consulta união.

  11. Repita as etapas de 5 a 10 até que você tenha copiado e colado todas as instruções SQL das consultas seleção na janela do modo SQL da consulta união. Não exclua o ponto-e-vírgula, nem digite nada após a instrução SQL da última consulta seleção.

  12. Na guia Design, no grupo Resultados, clique em Executar.

Os resultados da sua consulta união aparecem no modo Folha de Dados.

Assista a um exemplo sobre como criar uma consulta união

Veja um exemplo que você pode recriar no banco de dados de exemplo da Northwind. Essa consulta união reúne os nomes das pessoas da tabela Clientes e combina-os com os nomes das pessoas da tabela Fornecedores. Se você quiser acompanhar, siga estas etapas na sua cópia do banco de dados de exemplo da Northwind.

Seu navegador não aceita vídeo. Instale o Microsoft Silverlight, o Adobe Flash Player ou o Internet Explorer 9.

Estas são as etapas necessárias para criar este exemplo:

  1. Crie duas consultas seleção chamadas Consulta1 e Consulta2 usando as tabelas Clientes e Fornecedores, respectivamente, como fontes de dados. Use os campos nome e sobrenome como valores de exibição.

  2. Crie uma nova consulta chamada Consulta3 sem fontes de dados inicialmente e, em seguida, clique no comando União na guia Design para transformar essa consulta em uma consulta União.

  3. Copie e cole as instruções SQL da Consulta1 e da Consulta2 para a Consulta3. Certifique-se de remover o ponto e vírgula extra e adicionar a palavra-chave UNION. Verifique os resultados no modo Folha de Dados.

  4. Inclua uma cláusula ordenação em uma das consultas e, em seguida, cole a instrução ORDER BY no modo SQL da consulta união. Observe que, na Consulta3, a consulta união, quando a ordenação está prestes a ser anexada, primeiro, os pontos e vírgulas são removidos e, em seguida, o nome da tabela dos nomes de campo.

  5. O SQL final que combina e classifica os nomes deste exemplo de consulta união é o seguinte:

    SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
    FROM Customers
    
    UNION
    
    SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
    FROM Suppliers
    
    ORDER BY [Last Name], [First Name];

Se você se sentir muito preparado para gravar a sintaxe SQL, certamente poderá gravar sua própria instrução SQL para a consulta união diretamente no modo SQL. No entanto, talvez seja útil seguir a abordagem de copiar e colar o SQL de outros objetos de consulta. As consultas podem ser muito mais complicadas do que os exemplos simples de consultas seleção usados aqui. Pode ser vantajoso criar e testar cuidadosamente cada consulta antes de combiná-las na consulta união. Se a consulta união não for executada, você poderá ajustar cada consulta individualmente até conseguir e, em seguida, recriar sua consulta união com a sintaxe corrigida.

Examine as demais seções deste artigo para saber mais dicas e truques sobre como usar consultas união.

No exemplo da seção anterior que usou o banco de dados da Northwind, somente os dados de duas tabelas são combinados. No entanto, é possível combinar facilmente três ou mais tabelas em uma consulta união Por exemplo, com base no exemplo anterior, convém também incluir os nomes dos funcionários na saída de consulta. Você pode realizar essa tarefa adicionando uma terceira consulta e combinando-a com a instrução SQL anterior com uma palavra-chave UNION adicional como esta:

SELECT Customers.Company, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT Suppliers.Company, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT Employees.Company, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];

Ao visualizar o resultado no modo Folha de Dados, todos os funcionários serão listados com o nome da empresa de exemplo, o que provavelmente não ajuda muito. Se você quiser que o campo indique se uma pessoa é um funcionário interno ou se pertence a um fornecedor ou cliente, é possível incluir um valor fixo no lugar do nome da empresa. Veja aqui como o SQL ficaria:

SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers

UNION

SELECT "Supplier" As Employment, Suppliers.[Last Name], Suppliers.[First Name]
FROM Suppliers

UNION

SELECT "In-house" As Employment, Employees.[Last Name], Employees.[First Name]
FROM Employees

ORDER BY [Last Name], [First Name];

Veja como o resultado é exibido no modo Folha de Dados. O Access exibe esses cinco registros de exemplo:

Contratação

Sobrenome

Nome

Internos

Fernandes

Brenda

Internos

Cunha

Laura

Fornecedor

Rodrigues

Mateus

Cliente

Castro

Henrique

Cliente

Teixeira

Antônio

A consulta acima pode ser reduzida ainda mais, pois o Access lê somente os nomes dos campos de saída da primeira consulta em uma consulta união. Aqui você vê que removemos a saída da segunda e terceira seções de consulta:

SELECT "Customer" As Employment, [Last Name], [First Name]
FROM Customers

UNION

SELECT "Supplier", [Last Name], [First Name]
FROM Suppliers

UNION

SELECT "In-house", [Last Name], [First Name]
FROM Employees

ORDER BY [Last Name], [First Name];

Em uma consulta união do Access, a ordenação só é permitida uma vez, mas cada consulta pode ser filtrada individualmente. Com base na consulta união da seção anterior, veja um exemplo de onde filtramos cada consulta adicionando uma cláusula WHERE.

SELECT "Customer" As Employment, Customers.[Last Name], Customers.[First Name]
FROM Customers
WHERE [State/Province] = "UT"

UNION

SELECT "Supplier", [Last Name], [First Name]
FROM Suppliers
WHERE [Job Title] = "Sales Manager"

UNION

SELECT "In-house", Employees.[Last Name], Employees.[First Name]
FROM Employees
WHERE City = "Seattle"

ORDER BY [Last Name], [First Name];

Alterne para o modo Folha de Dados e você verá resultados semelhantes a este:

Contratação

Sobrenome

Nome

Fornecedor

Cardoso

Lara C.

Internos

Fernandes

Brenda

Cliente

Pena

Fábio

Internos

Pena

Alice

Fornecedor

Lima

Yara

Cliente

Mendes

Nicolau

Fornecedor

Soares

Marcos

Fornecedor

Silva

Matheus

Internos

Mendes

Nicolau

Fornecedor

Mello

Melissa

Internos

Gonçalves

Pedro

Se as consultas união forem muito diferentes, você poderá encontrar uma situação em que um campo de saída deverá combinar dados de diferentes tipos de dados. Nesse caso, a consulta união normalmente retornará os resultados como um tipo de dados de texto, pois esse tipo de dados pode conter texto e números.

Para entender como isso funciona, usaremos a consulta união Transações de produtos no banco de dados de exemplo da Northwind. Abra esse banco de dados de exemplo e, em seguida, abra a consulta Transações de produtos no modo Folha de Dados. Os últimos dez registros devem ser semelhantes a essa saída:

ID do Produto

Data do Pedido

Nome da Empresa

Transação

Quantidade

77

22/01/2006

Fornecedor B

Compra

60

80

22/01/2006

Fornecedor D

Compra

75

81

22/01/2006

Fornecedor A

Compra

125

81

22/01/2006

Fornecedor A

Compra

200

7

20/01/2006

Empresa D

Vendas

10

51

20/01/2006

Empresa D

Vendas

10

80

20/01/2006

Empresa D

Vendas

10

34

15/01/2006

Empresa AA

Vendas

100

80

15/01/2006

Empresa AA

Vendas

30

Vamos supor que você queira dividir o campo Quantidade em dois: Comprar e Vender. Vamos também supor que você queira ter um valor zero fixo para o campo sem valor. Veja como o SQL procurará essa consulta união:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], 0 As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, 0 As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC; 

Se você mudar para o modo Folha de Dados, verá os dez últimos registros exibidos da seguinte forma:

ID do Produto

Data do Pedido

Nome da Empresa

Transação

Comprar

Vender

74

22/01/2006

Fornecedor B

Compra

20

0

77

22/01/2006

Fornecedor B

Compra

60

0

80

22/01/2006

Fornecedor D

Compra

75

0

81

22/01/2006

Fornecedor A

Compra

125

0

81

22/01/2006

Fornecedor A

Compra

200

0

7

20/01/2006

Empresa D

Vendas

0

10

51

20/01/2006

Empresa D

Vendas

0

10

80

20/01/2006

Empresa D

Vendas

0

10

34

15/01/2006

Empresa AA

Vendas

0

100

80

15/01/2006

Empresa AA

Vendas

0

30

Prosseguindo com o exemplo, e se você quiser que os campos com zero fiquem vazios? Você pode modificar o SQL para exibir nada em vez de zero. Para isso, adicione a palavra-chave Null da seguinte forma:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], Null As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

No entanto, como você pode ter observado após ter alternado para o modo Folha de Dados, agora você tem um resultado inesperado. Na coluna Comprar, todos os campos estão limpos:

ID do Produto

Data do Pedido

Nome da Empresa

Transação

Comprar

Vender

74

22/01/2006

Fornecedor B

Compra

 

 

77

22/01/2006

Fornecedor B

Compra

 

 

80

22/01/2006

Fornecedor D

Compra

 

 

81

22/01/2006

Fornecedor A

Compra

 

 

81

22/01/2006

Fornecedor A

Compra

 

 

7

20/01/2006

Empresa D

Vendas

 

10

51

20/01/2006

Empresa D

Vendas

 

10

80

20/01/2006

Empresa D

Vendas

 

10

34

15/01/2006

Empresa AA

Vendas

 

100

80

15/01/2006

Empresa AA

Vendas

 

30

Isso acontece porque o Access determina os tipos de dados dos campos na primeira consulta. Neste exemplo, Null não é um número.

Então, o que acontece se você tentar inserir uma cadeia de caracteres vazia no valor em branco dos campos? O SQL dessa tentativa deve se parecer com o seguinte:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], "" As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, "" As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

Ao alternar para o modo Folha de Dados, você verá que o Access recuperou os valores de Comprar, mas converteu os valores em texto. Você pode dizer que estes são valores de texto já que eles estão alinhados à esquerda no modo Folha de Dados. A cadeia de caracteres vazia na primeira consulta não é um número e é por isso que você vê esses resultados. Você também notará que os valores de Vender também são convertidos em texto porque os registros de compra contêm uma cadeia de caracteres vazia.

ID do Produto

Data do Pedido

Nome da Empresa

Transação

Comprar

Vender

74

22/01/2006

Fornecedor B

Compra

20

 

77

22/01/2006

Fornecedor B

Compra

60

 

80

22/01/2006

Fornecedor D

Compra

75

 

81

22/01/2006

Fornecedor A

Compra

125

 

81

22/01/2006

Fornecedor A

Compra

200

 

7

20/01/2006

Empresa D

Vendas

 

10

51

20/01/2006

Empresa D

Vendas

 

10

80

20/01/2006

Empresa D

Vendas

 

10

34

15/01/2006

Empresa AA

Vendas

 

100

80

15/01/2006

Empresa AA

Vendas

 

30

Então, como você resolve esse enigma?

Uma solução é forçar a consulta a esperar que o valor do campo seja um número. Isso pode ser feito com a expressão:

IIf(False, 0, Null)

A condição para verificar, False, nunca será True, portanto, a expressão sempre retornará Null, mas o Access ainda avaliará as duas opções de saída e decidirá a saída como numérica ou nula.

Veja aqui como podemos usar essa expressão no exemplo funcional:

SELECT [Product ID], [Order Date], [Company Name], [Transaction], IIf(False, 0, Null) As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

Observe que não é necessário modificar a segunda consulta.

Se você alternar para o modo Folha de Dados, verá um resultado que desejamos:

ID do Produto

Data do Pedido

Nome da Empresa

Transação

Comprar

Vender

74

22/01/2006

Fornecedor B

Compra

20

 

77

22/01/2006

Fornecedor B

Compra

60

 

80

22/01/2006

Fornecedor D

Compra

75

 

81

22/01/2006

Fornecedor A

Compra

125

 

81

22/01/2006

Fornecedor A

Compra

200

 

7

20/01/2006

Empresa D

Vendas

 

10

51

20/01/2006

Empresa D

Vendas

 

10

80

20/01/2006

Empresa D

Vendas

 

10

34

15/01/2006

Empresa AA

Vendas

 

100

80

15/01/2006

Empresa AA

Vendas

 

30

Um método alternativo para obter o mesmo resultado é preceder as consultas na consulta união com outra consulta:

SELECT 
    0 As [Product ID], Date() As [Order Date], 
    "" As [Company Name], "" As [Transaction], 
    0 As Buy, 0 As Sell
FROM [Product Orders]
WHERE False

Para cada campo, o Access retorna valores fixos do tipo de dados que você definir. Claro, você não quer que a saída desta consulta interfira nos resultados, portanto, o truque para evitar isso é incluir uma cláusula WHERE em False:

WHERE False

É um truque simples já que isso é sempre falso e, em seguida, a consulta não retornará resultados. Combinando essa declaração com o SQL existente, chegaremos a uma instrução completa, conforme descrita a seguir:

SELECT 
    0 As [Product ID], Date() As [Order Date], 
    "" As [Company Name], "" As [Transaction], 
    0 As Buy, 0 As Sell
FROM [Product Orders]
WHERE False

UNION

SELECT [Product ID], [Order Date], [Company Name], [Transaction], Null As Buy, [Quantity] As Sell
FROM [Product Orders]

UNION

SELECT [Product ID], [Creation Date], [Company Name], [Transaction], [Quantity] As Buy, Null As Sell
FROM [Product Purchases]

ORDER BY [Order Date] DESC;

Observação: Aqui neste exemplo, a consulta combinada usando o banco de dados da Northwind retorna 100 registros, enquanto as duas consultas individuais retornam 58 e 43 registros para um total de 101 registros. Essa discrepância ocorre porque os dois registros não são exclusivos. Confira a seção Trabalhar com registros distintos em consultas união usando UNION ALL para aprender como resolver esse cenário usando UNION ALL.

Um caso especial de consulta união é combinar um conjunto de registros com um registro que contenha a soma de um ou mais campos.

Veja outro exemplo que você pode criar no banco de dados de exemplo da Northwind para ilustrar a forma de obter um total em uma consulta união.

  1. Crie uma nova consulta simples para exibir a compra de cervejas (ID do produto = 34 no banco de dados da Northwind) usando a seguinte sintaxe SQL:

    SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
    ORDER BY [Purchase Order Details].[Date Received];
  2. Alterne para o modo Folha de Dados e você verá quatro compras:

    Data de recebimento

    Quantidade

    22/01/2006

    100

    22/01/2006

    60

    04/04/2006

    50

    05/04/2006

    300

  3. Para obter o total, crie uma consulta agregação simples usando o SQL a seguir:

    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
  4. Alterne para o modo Folha de Dados e você verá apenas um registro:

    MáxDeData de Recebimento

    SomaDeQuantidade

    05/04/2006

    510

  5. Combine essas duas consultas em uma consulta união para anexar o registro com a quantidade total aos registros de compra:

    SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
    UNION
    
    SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
    FROM [Purchase Order Details]
    WHERE ((([Purchase Order Details].[Product ID])=34))
    
    ORDER BY [Purchase Order Details].[Date Received];
  6. Alterne para o modo Folha de Dados e você verá as quatro compras com a soma de cada uma seguida de um registro que totaliza a quantidade:

    Data de recebimento

    Quantidade

    22/01/2006

    60

    22/01/2006

    100

    04/04/2006

    50

    05/04/2006

    300

    05/04/2006

    510

Isso abrange os princípios básicos da adição de totais em uma consulta união. Você também pode querer incluir valores fixos em ambas consultas, como "Detalhe" e "Total", para separar visualmente o registro total dos outros registros. Revise usando valores fixos na seção Combinar três ou mais tabelas ou consultas em uma consulta união.

As consultas união no Access por padrão incluem apenas registros distintos. Mas e se você quiser incluir todos os registros? Outro exemplo pode ser útil nesse caso.

Na seção anterior, mostramos como criar um total em uma consulta união. Modifique essa consulta união SQL para incluir ID do produto = 48:

SELECT [Purchase Order Details].[Date Received], [Purchase Order Details].Quantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

UNION

SELECT Max([Date Received]), Sum([Quantity]) AS SumOfQuantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

ORDER BY [Purchase Order Details].[Date Received];

Alterne para o modo Folha de Dados e você verá um resultado um tanto enganador:

Data de recebimento

Quantidade

22/01/2006

100

22/01/2006

200

Um registro, claro, não retorna o dobro da quantidade no total.

Você vê esse resultado porque em um dia a mesma quantidade de chocolates foi vendida duas vezes, conforme registrado na tabela Detalhes do pedido de compra. Veja um resultado de consulta seleção simples mostrando os dois registros no banco de dados de exemplo da Northwind:

ID do pedido de compra

Produto

Quantidade

100

Northwind Traders - Chocolate

100

92

Northwind Traders - Chocolate

100

Na consulta união observada anteriormente, você pode ver que o campo ID do pedido de compra não for incluído e os dois campos não formam dois registros distintos.

Se quiser incluir todos os registros, use UNION ALL em vez de UNION no seu SQL. Isso provavelmente terá um impacto na classificação dos resultados, portanto, convém incluir também uma cláusula ORDER BY para determinar uma ordem de classificação. Veja o SQL modificado que forma o exemplo anterior:

SELECT [Purchase Order Details].[Date Received], Null As [Total], [Purchase Order Details].Quantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

UNION ALL

SELECT Max([Date Received]), "Total" As [Total], Sum([Quantity]) AS SumOfQuantity
FROM [Purchase Order Details]
WHERE ((([Purchase Order Details].[Product ID])=48))

ORDER BY [Total];

Alterne para o modo Folha de Dados e você deverá ver todos os detalhes além de um total como o último registro:

Data de recebimento

Total

Quantidade

22/01/2006

 

100

22/01/2006

 

100

22/01/2006

Total

200

Um uso comum para uma consulta união é o de servir como fonte de registro para um controle de caixa de combinação em um formulário. Você pode usar essa caixa de combinação para marcar um valor para filtrar os registros do formulário. Por exemplo, filtrando os registros de funcionários por cidade.

Para ver como isso funciona, veja outro exemplo que você pode criar no banco de dados de exemplo da Northwind para ilustrar esse cenário.

  1. Crie uma consulta seleção simples usando a seguinte sintaxe SQL:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees;
  2. Alterne para o modo Folha de Dados e você verá os seguintes resultados:

    Cidade

    Filtro

    São Paulo

    São Paulo

    Palmares

    Palmares

    Fortaleza

    Fortaleza

    Rio de Janeiro

    Rio de Janeiro

    São Paulo

    São Paulo

    Fortaleza

    Fortaleza

    São Paulo

    São Paulo

    Fortaleza

    Fortaleza

    São Paulo

    São Paulo

  3. Olhando para esses resultados você poderá não ver muito valor. Expanda a consulta e transforme-a em uma consulta união usando o seguinte SQL:

    SELECT Employees.City, Employees.City AS Filter
    FROM Employees
    
    UNION
    
    SELECT "<All>", "*" AS Filter
    FROM Employees
    
    ORDER BY City;
  4. Alterne para o modo Folha de Dados e você verá os seguintes resultados:

    Cidade

    Filtro

    <Todos>

    *

    Palmares

    Palmares

    Rio de Janeiro

    Rio de Janeiro

    Fortaleza

    Fortaleza

    São Paulo

    São Paulo

    O Access executa uma união dos nove registros, mostrados anteriormente, com valores de campo fixos de <Tudo> e "*".

    Como essa cláusula de união não contém UNION ALL, o Access retorna apenas registros distintos, o que significa que cada cidade é retornada apenas uma vez com valores idênticos fixos.

  5. Agora que você tem uma consulta união concluída e que exibe cada nome de cidade apenas uma vez, juntamente com uma opção que efetivamente marca todas as cidades, você pode usar essa consulta como fonte de registro para uma caixa de combinação em um formulário. Usando este exemplo específico como modelo, você poderia criar um controle de caixa de combinação no formulário, definir essa consulta como uma fonte de registro, definir a propriedade Largura de Coluna do filtro Coluna como 0 (zero) para ocultá-la visualmente e, em seguida, definir a propriedade Coluna Associada como 1 para indicar o índice da segunda coluna. Na propriedade Filtro do próprio formulário, você pode adicionar código, como o código abaixo, para ativar um filtro de formulário usando o valor do que foi marcado no controle de caixa de combinação:

    Me.Filter = "[City] Like '" & Me![FilterComboBoxName].Value & "'"
    Me.FilterOn = True

    O usuário do formulário pode filtrar os registros de formulário usando um nome de cidade específico ou marcar <Todos> para listar todos os registros de todas as cidades.

Início da página

Expanda suas habilidades no Office
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Office Insider

Essas informações foram úteis?

Obrigado por seus comentários!

Agradecemos pelos seus comentários! Parece que pode ser útil conectar você a um de nossos agentes de suporte do Office.

×