Às vezes, talvez você queira combinar registros de uma tabela ou consulta com registros de uma ou mais outras tabelas em um único resultado. É isso que uma consulta sindical faz 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.
Observe um exemplo funcional de consulta união
Se você nunca criou uma consulta sindical antes, pode ajudar a primeiro estudar um exemplo de trabalho no modelo northwind access. Você pode pesquisar o modelo de exemplo northwind na página introdução do Access selecionando Arquivo>Novo. Você também pode baixar uma cópia diretamente do modelo de exemplo northwind.
Depois que o Access abrir o banco de dados Northwind, descarte a caixa de diálogo de logon exibida pela primeira vez e expanda o Painel de Navegação. Selecione a parte superior do Painel de Navegação e selecione Tipo de Objeto para organizar todos os objetos de banco de dados por tipo. Em seguida, expanda o grupo Consultas e você verá uma consulta chamada Transações de Produto.
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:
Ao contrário das consultas de seleção e ação normais, as tabelas não estão relacionadas em uma consulta sindical. Isso significa que você não pode usar o designer de consulta gráfica Access para criar ou editar consultas sindicais. Se você abrir uma consulta sindical no Painel de Navegação, o Access a abrirá e exibirá os resultados no modo de exibição de folha de dados. Em Exibições na guia Página Inicial , observe que o Modo de Exibição de Design não está disponível quando você trabalha com consultas sindicais. Você só pode alternar entre o Modo de Exibição de Folha de Dados e o Modo de Exibição do SQL.
Para continuar o estudo desse exemplo de consulta de união, clique em ModosdeExibiçãoSQL do Home > Views > para exibir a sintaxe que a SQL define. Nesta ilustração, adicionamos alguns espaçamentos extras no SQL para que você possa ver facilmente as várias partes que compõem uma consulta sindical.
Vamos examinar a SQL sintaxe dessa consulta sindical do banco de dados Northwind em detalhes:
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 SQL instrução é a UNION palavra-chave, que informa ao Access para combinar esses dois conjuntos de registros.
A última parte desta SQL instrução determina a ordem dos registros combinados usando uma instrução ORDER BY . Neste exemplo, o Access ordena todos os registros pelo campo Data da Ordem 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
Mesmo que você possa criar uma consulta sindical escrevendo a SQL sintaxe diretamente no SQL View, talvez seja mais fácil construí-la em partes com consultas selecionadas. 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.
- Na guia Criar, no grupo Consultas, clique em Design da Consulta.
- Clique duas vezes na tabela que tem os campos que você deseja incluir. A tabela é adicionada à janela de design da consulta.
- 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.
- Opcionalmente, adicione critérios aos campos, digitando as expressões apropriadas na linha Critérios da grade de campo.
- 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.
- Alterne a consulta para o modo Design.
- Salve a consulta seleção e deixe-a aberta.
- Repita este procedimento para cada consulta seleção que deseja combinar.
Agora que você criou suas consultas selecionadas, é hora de combiná-las. Nesta etapa, você cria a consulta sindical copiando e colando as SQL instruções.
- Na guia Criar, no grupo Consultas, clique em Design da Consulta.
- Na guia Design, no grupo Consulta, clique em União. O Access oculta a janela de design da consulta e mostra a guia objeto SQL View . Neste ponto, a guia está vazia.
- Clique na guia da primeira consulta seleção a ser combinada na consulta união.
- Na guia Página Inicial , clique em Exibir Exibição>SQL.
- Copie a
SQLinstrução para a consulta selecionada. Clique na guia da consulta união que você começou a criar anteriormente. - Cole a
SQLinstrução para a consulta de seleção na guia objeto SqL View da consulta de união. - Exclua o ponto e vírgula (
;) no final da instrução de consultaSQLselecionada. - Pressione Enter para mover o cursor para baixo de uma linha e digite
UNIONna nova linha. - Clique na guia da próxima consulta seleção a ser combinada na consulta união.
- Repita as etapas 5 a 10 até que você tenha copiado e colado todas as
SQLinstruções para as consultas selecionadas na janela Exibição SQL da consulta sindical. Não exclua o ponto e vírgula ou digite nada seguindo aSQLinstrução da última consulta selecionada. - 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
Aqui está um exemplo que você pode recriar no banco de dados de exemplo 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.
Estas são as etapas necessárias para criar este exemplo:
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.
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.
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 o
UNIONpalavra-chave. Verifique os resultados no modo Folha de Dados.Adicione uma cláusula de ordenação a uma das consultas e cole a
ORDER BYinstrução na consulta de união no Modo de Exibição SQL. 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.A final
SQLque combina e classifica os nomes para este exemplo de consulta sindical é a 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ê estiver muito confortável escrevendo SQL sintaxe, poderá escrever sua própria SQL instrução para a consulta de união diretamente no SQL View. 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.
Combinar três ou mais tabelas ou consultas em uma consulta união
No exemplo da seção anterior que usa o banco de dados Northwind, os dados de apenas duas tabelas são combinados. No entanto, você pode combinar três ou mais tabelas com muita facilidade em uma consulta sindical. Por exemplo, baseando-se no exemplo anterior, talvez você também queira incluir os nomes dos funcionários na saída da consulta. Você pode realizar essa tarefa adicionando uma terceira consulta e combinando 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];
Quando você exibir o resultado no modo de exibição de folha de dados, todos os funcionários serão listados com o nome da empresa de exemplo, o que provavelmente não é muito útil. Se você quiser que esse campo mostre se uma pessoa é um funcionário interno, de um fornecedor ou de um cliente, você pode incluir um valor fixo em vez do nome da empresa. Veja como é a SQL aparência:
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 |
Pode reduzir ainda mais a consulta porque o Access lê os nomes dos campos de saída apenas a partir da primeira consulta numa consulta união. Aqui, o resultado da segunda e terceira secções de consulta é removido:
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];
Filtragem em consultas união
Numa consulta união do Access, a ordenação só é permitida uma vez, mas pode filtrar cada consulta individualmente. Com base na consulta união da secção anterior, eis um exemplo que filtra cada consulta ao adicionar uma WHERE cláusula.
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 |
Combinação de tipos de dados
Se as consultas que associar forem muito diferentes, poderá deparar-se com uma situação em que um campo de saída tem de 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 campos: Comprar e Vender. Vamos também supor que você deseja um valor zero fixo para o campo sem valor. Aqui está como é a SQL aparência para esta consulta sindical:
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 |
Continuando este exemplo, e se você quiser que os campos com valores zero estejam vazios? Você pode modificar o SQL para exibir nada em vez de zero adicionando o Null palavra-chave, conforme mostrado aqui:
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 para o valor em branco dos campos? O SQL para esta tentativa pode ser semelhante a este:
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. Você pode fazer isso com esta expressão:
IIf(False, 0, Null)
A condição para marcar, False, nunca Trueé , portanto, a expressão sempre retorna Null. No entanto, o Access ainda avalia as duas opções de saída e trata a saída como numérica ou Null.
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;
Você não precisa 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
Este é um pequeno truque. Como a condição é sempre falsa, a consulta não retorna nada. 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
Neste exemplo, a consulta combinada no banco de dados Northwind retorna 100 registros, enquanto as duas consultas individuais retornam 58 e 43 registros para um total de 101 registros. Essa diferença acontece porque dois registros não são exclusivos. Consulte Trabalhar com registros distintos em consultas sindicais usando UNION ALL para saber como resolver esse cenário usando UNION ALL.
Adicionar totais a uma consulta união
Um uso especial para uma consulta sindical é combinar um conjunto de registros com um registro que contém 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.
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];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 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))Alterne para o modo Folha de Dados e você verá apenas um registro:
MáxDeData de Recebimento SomaDeQuantidade 05/04/2006 510 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];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. Também poderá querer incluir valores fixos em ambas as consultas, como "Detalhe" e "Total" para separar visualmente o registo total dos outros registos. Revise usando valores fixos na seção Combinar três ou mais tabelas ou consultas em uma consulta união.
Trabalhar com registros distintos em consultas união usando UNION ALL
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 SQL união para incluir Product ID = 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 |
Claro que um registo não devolve o dobro da quantidade total.
Verá este resultado porque, num dia, a mesma quantidade de chocolates foi vendida duas vezes, conforme registado na tabela Detalhes da Nota de Encomenda. 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 anteriormente indicada, pode ver que o campo ID da Nota de Encomenda não está incluído e que os dois campos não constituem dois registos distintos.
Se quiser incluir todos os registos, utilize UNION ALL em vez de UNION no .SQL É provável que isto afete a ordenação dos resultados, pelo que também poderá querer incluir uma ORDER BY cláusula para determinar uma sequência de ordenação. Eis a modificação SQL com base no 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 |
Usar uma consulta união para filtrar registros em um formulário por meio de um controle de caixa de combinação
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.
Crie uma consulta selecionar simples com esta
SQLsintaxe:SELECT Employees.City, Employees.City AS Filter FROM Employees;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 Olhando para esses resultados você poderá não ver muito valor. No entanto, expanda a consulta e transforme-a numa consulta união com o seguinte
SQL:SELECT Employees.City, Employees.City AS Filter FROM Employees UNION SELECT "<All>", "*" AS Filter FROM Employees ORDER BY City;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 efetua uma união dos nove registos, anteriormente apresentados, com valores de campo fixos de <Todos> e "*". Uma vez que esta cláusula união não contém
UNION ALL, o Access devolve apenas registos distintos. Isto significa que cada cidade é devolvida apenas uma vez com valores idênticos fixos.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.
FilterNa propriedade do próprio formulário, pode adicionar código como o seguinte para ativar um filtro de formulário com o valor selecionado no controlo da caixa de combinação:Me.Filter = "[City] Like '" & Me![FilterComboBoxName].Value & "'" Me.FilterOn = TrueEm seguida, o utilizador do formulário pode filtrar os registos de formulário para um nome de cidade específico ou selecionar <Todos> para listar todos os registos de todas as cidades.