As consultas (queries) permitem colocar questões às tabelas da base de dados (BD). Pode-se resumir as funcionalidades das consultas a:
Exemplo: É possível obter uma lista dos alunos que moram no Porto ou o nome daqueles que têm 19 anos de idade.¨
Também é possível seleccionar registos e campos em Access com recurso a filtros bem como procurar registos com determinados valores de um campo com a pesquisa (
Edit, Find), mas dado que estes são mecanismos específicos deste SGBD não serão descritos aqui.Existem vários tipos de consultas:

Para criar uma consulta, clicar no botão
New do separador Queries da janela de BD. Aparece então uma caixa de diálogo que permite seleccionar a forma como a consulta será criada:As opções disponíveis são:
Consultas de Selecção
Seleccionando
Design View na caixa de diálogo acima, é apresentada uma janela de QBE (Query By Example) sobreposta por uma caixa de diálogo onde é possível seleccionar tabelas. As tabelas seleccionadas servem como fonte de registos, isto é, são essas as tabelas a interrogar na consulta a criar.Exemplo: Para criar uma consulta que seleccione os nomes de todos os alunos que vivem em Moura a fonte de registos será a tabela
Alunos:
¨
A janela da consulta está dividida em duas partes, as tabelas a consultar, em cima, e a estrutura da consulta, em baixo.
As colunas em que está dividida a zona de estrutura servem para especificar os campos que serão visualizados e/ou que servirão para construir o critério para seleccionar os registos desejados. Para acrescentar um campo basta arrastar, fazer um duplo clique no campo da tabela (em cima) ou então seleccionar no menu da linha
Field, que é apresentado quando se selecciona uma coluna, e clicar no botão que aparece no lado direito.Exemplo: A consulta do exemplo anterior envolve apenas dois campos:
Nome, para visualizar e Localidade, que servirá para definir o critério, neste caso, Moura. Assim, acrescenta-se apenas estes campos.¨A linha
Criteria e as que lhe sucedem servem para definir para cada campo os critérios que servirão para seleccionar os registos a visualizar.Exemplo: Dado que se pretende obter apenas os registos dos alunos que são de Moura, a estrutura da consulta seria a seguinte:

¨
Critérios mais complexos, isto é, critérios que envolvem múltiplas condições podem ser elaborados da seguinte maneira. Condições definidas na mesma linha representam conjunções (E lógico). Condições definidas em linhas diferentes representam disjunções (OU lógico). Assim, serão seleccionados só aqueles registos que satisfazem todas as condições de pelo menos uma linha.
Exemplo: A estrutura de uma consulta para obter o morada de todos os alunos nascidos depois de 78 e que ou o seu primeiro nome é Paulo ou são do Porto, é:

Por questão de clareza, pode-se representar a expressão de critério em lógica da seguinte forma: (Data de Nascimento > 31/12/1978 Ù (Nome = "Paulo*" Ú Localidade = "Porto")).¨
Como dito anteriormente, valores que representem datas são representadas nas expressões entre sinais de cardinalidade (#).
Para além de poder construir conjunções e disjunções pela disposição das condições nas linhas e colunas é possível usar operadores de critérios. Com estes operadores pode-se construir conjunções e disjunções no mesmo campo de forma mais simples, para além de permitirem outras operações.
|
Operador |
Descrição |
Exemplo |
|
Not [Não] |
Negação. |
Not "Porto" Qualquer valor excepto Porto. |
|
Like [Como] |
Identidade com possibilidade de usar caracteres de substituição. |
Like "Paulo*" Qualquer valor que comece por Paulo. |
|
Between…And [Entre…E] |
Intervalo. |
Between #1-1-1978# And #1-7-1978# Datas entre 1/1/78 e 1/7/78. |
|
In(…) [Em(…)] |
Conjunto de valores. |
In ("Porto"; "Moura") Apenas Porto ou Moura. |
|
And [E] |
Conjunção. |
Not "Porto" And Not "Moura" Qualquer valor excepto Porto e Moura. |
|
Or [Ou] |
Disjunção. |
"Porto" Or "Moura" Apenas Porto ou Moura. |
A linha
Sort possibilita definir a ordem pela qual os registos são apresentados. Cada campo da consulta pode ser ordenado por ordem crescente (Ascending), decrescente (Descending) ou não ser ordenado (not sorted). Esta última opção faz com que os registos sejam apresentados pela mesma ordem em que aparecem na tabela. No caso de a ordenação envolver mais do que um campo, a sequência dos campos na grelha determina a ordem que será seguida na ordenação. A ordenação é definida usando um menu idêntico ao da linha Field.Exemplo: Para facilitar a utilização do resultado da consulta em que se selecciona os alunos de Moura, ordena-se por ordem crescente do campo
Nome.¨A linha
Show permite seleccionar os campos que serão visualizados. Pode fazer sentido incluir na estrutura de consulta um campo que não se quer visualizar, por exemplo, no caso em que esse campo serve apenas como critério, isto é, serve para seleccionar registos. A activação/desactivação é feita clicando na check box respectiva.Exemplo: Na consulta do exemplo anterior, dado que o campo
Localidade serviu apenas para definir um critério e que o seu valor vai ser sempre Moura, a sua visualização iria apenas trazer confusão, pelo que é desactivada. No caso da 2ª consulta de exemplo, não será apropriado deixar de visualizar qualquer dos campos envolvidos.¨Depois de definida a consulta pode ser executada com o comando Query, Run. A maior parte das consultas produz um conjunto de registos. Este conjunto pode ser visto como uma tabela e, na realidade, é visualizado como uma tabela. No entanto, quando se grava uma consulta, o que é guardado é a sua estrutura e não o conjunto de registos produzido pela sua execução. Por esse motivo a tabela resultante da execução de uma consulta é designada por tabela virtual.
Exemplo: Podemos agora gravar as consultas criadas, executando o comando
File, Save, o Access pede mais uma vez um nome, que poderá ser Alunos de Moura para a 1ª e Paulos ou Portuenses nascidos depois de 78 para a 2ª.Executando a 1ª, o resultado será:

¨
Esta semelhança é muito importante porque permite usar uma consulta onde fôr esperada uma tabela. Uma das consequências mais importantes desta funcionalidade é a possibilidade de usar consultas como fontes de registos de outras consultas.
Outra consequência muito importante é ser frequentemente possível editar as tabelas virtuais resultantes da execução de uma consulta. Assim, será possível acrescentar novos registos e apagar registos existentes ou alterá-los. Pode-se, inclusivamente, alterar um registo de forma a que ele não verifique os critérios da consulta. Esse registo só deixará de aparecer na tabela gerada pela consulta na próxima vez que esta fôr executada.
Exemplo: É possível alterar a localidade onde mora o aluno de nome
António Silva para Porto na consulta Alunos de Moura. Embora este registo já não verifique o critério de selecção da consulta, ele permanece na tabela virtual. Fechando e voltando a abrir a consulta, deixará então de ser mostrado.Não é possível acrescentar registos em nenhuma das consultas criadas porque em nenhuma delas é possível editar os campos
Morada e Data de Nascimento que são obrigatórios (propriedade Required = Yes). No entanto, é possível eliminar registos em qualquer uma dessas consultas.¨A tabela gerada por uma consulta pode ter registos repetidos. Frequentemente é desejável que tal não aconteça. Para tal é possível alterar a propriedade
Unique Values da consulta para Yes. Assim, quando houver registos repetidos na tabela virtual será apresentado apenas um. As consultas com a propriedade Unique Values activada não são editáveis.Exemplo: Para obter uma lista das localidades das quais existem alunos inscritos criar uma consulta com apenas um campo,
Localidade e alterar para Yes o valor da propriedade Unique Values.¨As propriedades dos campos de uma consulta incluem
Format e Input Mask tal como na definição da tabela.A utilização de constantes na definição de critérios em consultas leva a:
Em muitas situações é possível substituir essas constantes por parâmetros. O valor de um parâmetro é perguntado ao utilizador cada vez que a consulta é executada. Para utilizar esse valor no critério da consulta basta usar o seu nome entre parêntesis rectos ('
[', seguido pelo nome do parâmetro, seguido por ']').Exemplo: A criação de consultas equivalentes a Alunos de Moura para cada uma das diferentes localidades é pouco apetecível. Para obter uma lista dos nomes dos alunos de uma localidade a indicar pelo utilizador, criar uma consulta semelhante à
Alunos de Moura mas incluindo um parâmetro no critério:
Quando se executa esta consulta é apresentada uma caixa de diálogo em que é possível indicar o valor que o parâmetro vai tomar:

Note-se a utilização de uma pergunta para nome do parâmetro. Como o nome do parâmetro é mostrado na caixa de diálogo apresentada ao utilizador, este tipo de nomes permite tornar a utilização da consulta mais fácil do que abreviaturas ou nomes enigmáticos com significado apenas para o criador da BD.¨
É possível definir o tipo de valores que pode ser dado a um parâmetro executando o comando
Query, Parameters. Os tipos disponíveis permitem não só definir o tipo de valores como também o seu tamanho, tal como para os campos de uma tabela.Exemplo: Para definir o parâmetro Qual a Localidade? como sendo do tipo texto, executar o comando
Query, Parameters e escrever o nome do parâmetro na coluna da esquerda e seleccionar Text na coluna da direita:
¨
Campos CalculadosÉ frequentemente necessário obter informação a partir dos valores guardados nos campos. Por exemplo, pretende-se saber a idade quando se guarda a data de nascimento, o nome próprio quando se guarda o nome completo ou o montante total gasto na transacção de um artigo quando se guarda o preço unitário e a quantidade comprada. Para isso usa-se campos calculados. Os campos calculados são elaborados na linha
Field e têm o formato seguinte:Nome do campo
: Expressão de cálculoA expressão de cálculo é constituida por valores de campos, constantes aritméticas e outras, manipuladas por operadores aritméticos, funções do Access e funções criadas pelo utilizador. A utilização dos valores de campos é semelhante à de valores dados aos parâmetros pelo utilizador, isto é, o nome do campo entre parêntesis rectos.
Exemplo: Para obter uma lista dos anos de nascimento dos alunos, criar a seguinte consulta:

Year é uma função do Access que extraí o ano de uma data dada como argumento. Gravar a consulta com o nome
Ano de nascimento dos alunos.¨Sempre que possível, é preferível calcular um campo a guardá-lo, para não desperdiçar espaço de armazenamento e para evitar situações de inconsistência causadas por erros na introdução ou por esquecimento na alteração de dados.
Frequentemente os utilizadores de uma BD estão interessados em analisar a informação lá guardada de forma agregada. Por exemplo, para o director comercial de uma empresa pode ser mais informativo analisar o total de vendas feitas por artigo do que os registos de vendas individuais. As consultas de sumarização do Access permitem calcular este tipo de informação estatística (somas, médias, etc) agrupando os registos por um ou mais campos.

Activando a opção
View, Totals é acrescentada a linha Total à estrutura da consulta que dá acesso a um menu pull-down com as opções de sumarização:
Esta lista apresenta um conjunto de operações estatísticas que podem ser efectuadas em grupos de valores:
|
Operação |
Descrição |
|
Sum [Soma] |
Soma. Para campos numéricos e monetários. |
|
Avg [Média] |
Média. Para campos numéricos e monetários. Ignora registos com valor nulo. |
|
Min |
Menor valor. Em campos com texto usa a ordem alfabética, ignorando se as letras são minúsculas ou maiúsculas. Ignora registos com valor nulo. |
|
Max |
Maior valor. Em campos com texto usa a ordem alfabética, ignorando se as letras são minúsculas ou maiúsculas. Ignora registos com valor nulo. |
|
Count [Contar] |
Conta o número de registos com valor não nulo. Para contar todos os registos, criar um campo calculado com a expressão Count(*). |
|
StDev [DesvP] |
Desvio-padrão. Para campos numéricos e monetários. |
|
Var |
Variância. Para campos numéricos e monetários. |
|
First [Primeiro] |
Valor do 1º registo. |
|
Last [Último] |
Valor do ultimo registo. |
As funções de sumarização podem ser usadas como funções em expressões. Os campos sumarizados não podem ser ordenados.
No menu são disponibilizadas mais três opções para identificar o campo usado para agrupar registos, calcular expressões envolvendo várias estatísticas sobre um campo e seleccionar registos:
|
Operação |
Descrição |
|
Group By [Agrupar Por] |
Agrega pelos valores deste campo. É possível agregar por mais do que um campo. |
|
Expression [Expressão] |
Calcular valores baseados nas funções de sumarização apresentadas acima. A expressão será indicada na linha Field como para os campos calculados e tem que incluir obrigatoriamente uma função de sumarização. |
|
Where [Onde] |
Selecção de registos. O critério propriamente dito é definido como noutra consulta qualquer, isto é, nas linhas de Criteria. |
Um campo pode ser usado mais do que uma vez numa consulta de sumarização:
Exemplo: Para sumarizar informação relativa ao ano de nascimento dos alunos agrupando por localidade criar uma consulta com a seguinte estrutura:

Esta consulta usa outra consulta,
Exemplo: Para obter o nome do primeiro aluno de cada localidade exceptuando o Porto, criar uma consulta com a seguinte estrutura sobre a tabela
Alunos:
¨
Naturalmente, não é possível editar as tabelas geradas por uma consulta de sumarização.
Consultas de Referência CruzadaQuando se agrega dados agrupando-os por vários campos, a tabela resultante pode ser de difícil interpretação. As consultas de referência cruzada apresentam os dados sumariados num formato que facilita essa tarefa. Este tipo de consultas pode ser construido na vista de estrutura ou usando o assistente próprio (Crosstab Query Wizard ou Assistente de Consultas de Referência Cruzada). Neste texto vamos utilizar apenas o assistente. Uma forma simples de aprender a usar a vista de estrutura para construir consultas deste tipo é analisando e experimentando com uma consulta construida com o assistente. Uma utilização comum de consultas de referência cruzada permite mostrar como os valores de um campo se distribuem pelos valores de outro campo.
Para construir uma consulta de referência cruzada, clicar no botão
New do separador Queries e seleccionar o assistente respectivo (Crosstab Query Wizard [Assistente de Consultas de Referência Cruzada]). É apresentada uma caixa de diálogo para escolha da fonte de registos.
Exemplo: Para criar uma consulta que mostre a distribuição de alunos por ano de nascimento e localidade, chama-se o assistente de consultas de referência cruzada e selecciona-se a consulta
Ano de nascimento dos alunos como fonte:
¨
Nas caixas de diálogo seguintes seleccionam-se os campos cujos valores serão usados como títulos de linhas e de colunas. Pode-se ter até três campos a definir títulos de linhas e apenas um para colunas. Na zona inferior da caixa de diálogo pode-se antever o aspecto da consulta. Depois indica-se qual o campo a sumariar e que função usar. Na mesma caixa de diálogo, escolhe-se entre incluir ou não os totais por linha. Finalmente dá-se uma nome à consulta.
Exemplo: Seleccionar o campo
Localidade para fornecer os títulos das linhas. Depois seleccionar o campo Ano de Nascimento para colunas. Em seguida, indicar que se quer contar o número de registos com valores não nulos no campo Nome:
Gravar a consulta com o nome
Distribuição de alunos por localidade e ano de nascimento. O resultado é:
¨
Como nas consultas de sumarização normais, as tabelas geradas não são editáveis.
Consultas de AcçãoAs consultas apresentadas até agora permitem consultar e processar a informação existente na BD. Como foi mostrado, nalguns casos é possível acrescentar, eliminar ou alterar os registos da tabela virtual resultante da execução de uma consulta. No entanto, é frequente surgirem situações em que é necessário fazer um conjunto de operações repetitivas de alteração da tabela, por exemplo, acrescentar um movimento para pagamento de juros em todas as contas de um banco, actualizar o salário de todos os funcionários de uma empresa ou apagar os registos das matérias-primas que já não existem em armazém há mais de 5 anos. Fazer este tipo de operações manualmente, mesmo que estejam disponíveis consultas que seleccionem apenas os registos desejados, seria bastante fastidioso. Como alternativa existem as consultas de acção (action queries):
A construção de uma consulta de acção é em tudo semelhante à de uma consulta de selecção. É aconselhável começar por construir uma consulta de selecção que permita antever as alterações que serão feitas, principalmente na fase de desenvolvimento das consultas. Em seguida, a consulta de selecção é facilmente transformada na consulta de acção desejada, como explicado em seguida. Alternativamente, pode-se ver antever as alterações que a consulta provocará quando executada executando o comando
View, Datasheet View.Quando se executa uma consulta de acção a partir da janela de BD é apresentada uma caixa de diálogo de confirmação para que a BD não seja inadvertidamente alterada, por exemplo:


Depois de criada e testada a consulta de selecção que gera a tabela virtual que se pretende transformar numa tabela, executa-se o comando
Query, Make-Table Query. É apresentada uma caixa de diálogo para introduzir o nome da tabela a criar e para decidir se será criada na BD actual ou noutra BD a indicar:Esta última opção é uma forma de transferir informação entre BDs.
Exemplo: Foi contratada uma empresa para fazer um estudo estatístico dos alunos nascidos depois de 1978. Para salvaguardar a sua privacidade não se pode enviar a informação sobre o número, nome e morada dos alunos. Pretende-se, portanto, criar uma tabela com a localidade e ano de nascimento. Primeiro cria-se uma consulta de selecção que mostre os dados que irão constituir a nova tabela. Esta consulta usa a consulta
Ano de nascimento dos alunos como fonte e tem a estrutura e gera a tabela apresentadas a seguir:
Depois de verificada a correção da consulta criada, executa-se o comando
Query, Make-Table Query e indica-se o nome da tabela, Localidade e ano de nascimento.¨Para criar a nova tabela executar o comando
Query, Run. Se a tabela já existia é apresentada uma caixa de diálogo para confirmar o apagamento da tabela existente. Em seguida á apresentada uma caixa de diálogo para confirmação da inserção e que indica o número de registos que vão ser criados na nova tabela.Exemplo: Executar o comando
Query, Run com a consulta Localidade e ano de nascimento seleccionada na janela de BD e confirmar a criação dos registos:
Seleccionando o separador de tabelas da janela de BD, pode-se verificar a criação da tabela.¨
Depois de criada e testada a consulta de selecção que selecciona os registos a acrescentar, executa-se o comando
Query, Append Query. É apresentada uma caixa de diálogo para indicar qual a tabela onde acrescentar, igual à apresentada na consulta criar tabela. Depois é eliminada a linha Show da estrutura da consulta e acrescentada a linha Append To. Nesta linha fazemos correspondência entre os campos da consulta e da tabela.Quando se executa a consulta, através do comando
Query, Run, é apresentada uma caixa de diálogo para confirmação da inserção e que indica o número de registos que vão ser acrescentados na tabela.Exemplo: Pretende-se agora estender o estudo que deu origem à tabela
Localidade e ano de nascimento aos alunos que nasceram em 1978. Para isso criar uma consulta de selecção usando a consulta Ano de nascimento dos alunos como fonte e executa-se o comando Query, Append Query. Na caixa de diálogo que surge, indica-se o nome da tabela onde os registos vão ser inseridos, Localidade e ano de nascimento e é acrescentada a linha Append To à estrutura. A correspondência entre os campos é, neste caso, óbvia e a consulta fica com a seguinte estrutura:
Pode-se verificar o resultado antes de alterar a tabela executando o comando
View, Datasheet View. Depois executa-se o comando Query, Run, sendo apresentada uma caixa de diálogo semelhante à da consulta de criar tabela. Para verificar o resultado basta abrir a tabela Localidade e ano de nascimento.¨Depois de criada e testada a consulta de selecção que selecciona os registos a eliminar, executa-se o comando
Query, Delete Query. São eliminadas as linhas Sort e Show da estrutura da consulta e é acrescentada a linha Delete, que dá acesso a um menu pull-down onde se indica se o campo respectivo deve ser apagado (From) ou se faz parte do critério (Where).Quando se executa a consulta, através do comando
Query, Run, é apresentada uma caixa de diálogo para confirmação da eliminação e que indica o número de registos a eliminar.Exemplo: Pretende-se agora limitar o estudo que deu origem à tabela Localidade e ano de nascimento aos alunos que não são do Porto. Para isso criar uma consulta de selecção usando essa tabela como fonte e executar o comando
Query, Delete Query. É acrescentada a linha Delete à estrutura. Seleccionar todos os campos, isto é, o * e o Access assume automaticamente que o valor da linha Delete é From, isto é, serão apagados os registos desta tabela. Depois seleccionar o campo Localidade e o Access preenche a linha Delete com Where, assumindo que este será um campo usado no critério. A estrutura da consulta será:
Depois de verificar se os registos a eliminar são os desejados (comando
View, Datasheet View), executa-se a consulta (comando Query, Run) e é apresentada uma caixa de diálogo semelhante à das outras consultas de acção Mais uma vez, para verificar o resultado basta abrir a tabela.¨Depois de criada e testada a consulta de selecção que selecciona os registos a alterar, executa-se o comando
Query, Update Query. São eliminadas as linhas Sort e Show da estrutura da consulta e é acrescentada a linha Update To. Nesta linha é introduzida a expressão que calcula o novo valor a guardar no campo respectivo.Quando se executa a consulta, através do comando
Query, Run, é apresentada uma caixa de diálogo para confirmação da alteração e que indica o número de registos a alterar.Exemplo: Foi descoberto que os alunos de Lisboa nascidos antes de 78 foram erradamente registados como tendo nascido um ano antes, isto é, os de 78 foram registados como tendo nascido em 79, os de 77 registados como de 78, etc. Para corrigir a tabela a enviar à empresa de estudos estatísticos, criar uma consulta de selecção usando essa tabela como fonte e executar o comando
Query, Update Query. É acrescentada a linha Update To à estrutura:
Depois de verificar se os registos a eliminar são os desejados (comando
View, Datasheet View), executa-se a consulta (comando Query, Run) e é apresentada uma caixa de diálogo semelhante à das outras consultas de acção. Mais uma vez, para verificar o resultado basta abrir a tabela.¨