Quando quiser obter dados de uma base de dados, peça os dados com linguagem SQL (Structured Query Language) ou SQL. O SQL é uma linguagem de computador semelhante ao inglês, mas que os programas de base de dados compreendem. Cada consulta que executar utiliza o SQL em segundo plano.
Compreender como funciona o SQL pode ajudá-lo a criar melhores consultas e pode facilitar-lhe a compreensão de como corrigir uma consulta que não está a devolver os resultados pretendidos.
Este artigo faz parte de um conjunto sobre o SQL do Access. Este artigo descreve a utilização básica do SQL para selecionar dados e utiliza exemplos para ilustrar a sintaxe SQL.
Neste artigo
O que é o SQL?
O SQL é uma linguagem informática para trabalhar com conjuntos de factos e as relações entre eles. Os programas de bases de dados relacionais, como o Microsoft Office Access, utilizam o SQL para trabalhar com dados. Ao contrário de muitas linguagens informáticas, o SQL não é difícil de ler e compreender, mesmo para principiantes. Tal como muitas linguagens informáticas, o SQL é um padrão internacional que é reconhecido por entidades de normas como o ISO e o ANSI.
Utilize o SQL para descrever conjuntos de dados que podem ajudá-lo a responder a perguntas. Quando utiliza o SQL, tem de utilizar a sintaxe correta. A sintaxe é o conjunto de regras através das quais os elementos de uma linguagem são corretamente combinados. A sintaxe SQL baseia-se na sintaxe em inglês e utiliza muitos dos mesmos elementos que a sintaxe Visual Basic for Applications (VBA).
Por exemplo, uma instrução SQL simples que obtém uma lista de apelidos para contactos cujo nome próprio é Maria pode assemelhar-se ao seguinte:
SELECT Last_Name
FROM Contacts WHERE First_Name = 'Mary';
Nota: O SQL não é utilizado apenas para manipular dados, mas também para criar e alterar a estrutura de objetos de base de dados, como tabelas. A parte do SQL que é utilizada para criar e alterar objetos de base de dados é denominada linguagem de definição de dados (DDL). Este tópico não abrange DDL. Para obter mais informações, consulte o artigo Criar ou modificar tabelas ou índices com uma consulta de definição de dados.
Instruções SELECT
Para descrever um conjunto de dados com o SQL, escreva uma instrução SELECT. Uma instrução SELECT contém uma descrição completa de um conjunto de dados que pretende obter a partir de uma base de dados. Isto inclui o seguinte:
-
Que tabelas contêm os dados.
-
Como os dados de diferentes origens estão relacionados.
-
Que campos ou cálculos produzirão os dados.
-
Critérios que os dados têm de corresponder para serem incluídos.
-
Se e como ordenar os resultados.
Cláusulas SQL
Tal como uma frase, uma instrução SQL tem cláusulas. Cada cláusula executa uma função para a instrução SQL. Algumas cláusulas são necessárias numa instrução SELECT. A tabela seguinte lista as cláusulas SQL mais comuns.
Cláusula SQL |
O que faz |
Obrigatório |
SELECT |
Listas os campos que contêm dados de interesse. |
Sim |
FROM |
Listas as tabelas que contêm os campos listados na cláusula SELECT. |
Sim |
WHERE |
Especifica critérios de campo que têm de ser cumpridos por cada registo a incluir nos resultados. |
Não |
ORDENAR POR |
Especifica como ordenar os resultados. |
Não |
GROUP BY |
Numa instrução SQL que contém funções de agregação, lista campos que não estão resumidos na cláusula SELECT. |
Apenas se existirem esses campos |
HAVING |
Numa instrução SQL que contém funções de agregação, especifica as condições que se aplicam aos campos resumidos na instrução SELECT. |
Não |
Termos do SQL
Cada cláusula SQL é composta por termos , comparáveis a partes da voz. A tabela seguinte lista os tipos de termos SQL.
Termo SQL |
Parte comparável da voz |
Definição |
Exemplo |
identificador |
substantivo |
Um nome que utiliza para identificar um objeto de base de dados, como o nome de um campo. |
Clientes. [Número de Telefone] |
operador |
verbo ou adverb |
Uma palavra-chave que representa uma ação ou modifica uma ação. |
AS |
constante |
substantivo |
Um valor que não é alterado, como um número ou NULL. |
42 |
expressão |
adjetivo |
Uma combinação de identificadores, operadores, constantes e funções que é avaliada como um único valor. |
>= Produtos. [Preço Unitário] |
Cláusulas SQL básicas: SELECT, FROM e WHERE
Uma instrução SQL assume o formato geral:
SELECT field_1
FROM table_1 WHERE criterion_1 ;
Notas:
-
O Access ignora as quebras de linha numa instrução SQL. No entanto, considere utilizar uma linha para cada cláusula para ajudar a melhorar a legibilidade das instruções SQL para si e para outras pessoas.
-
Cada instrução SELECT termina com um ponto e vírgula (;). O ponto e vírgula pode aparecer no final da última cláusula ou numa linha por si só no final da instrução SQL.
Um exemplo no Access
O seguinte ilustra o aspeto de uma instrução SQL para uma consulta selecionar simples no Access:
1. Cláusula SELECT
2. Cláusula FROM
3. Cláusula WHERE
Neste exemplo, a instrução SQL indica "Selecione os dados armazenados nos campos denominado Endereço de E-mail e Empresa da tabela com o nome Contactos, especificamente os registos nos quais o valor do campo Cidade é Seattle".
Vejamos o exemplo, uma cláusula de cada vez, para ver como funciona a sintaxe SQL.
A cláusula SELECT
SELECT [E-mail Address], Company
Esta é a cláusula SELECT. Consiste num operador (SELECT) seguido de dois identificadores ([Endereço de Correio Eletrónico] e Empresa).
Se um identificador contiver espaços ou carateres especiais (como "Endereço de E-mail"), tem de estar entre parênteses retos.
Uma cláusula SELECT não tem de dizer que tabelas contêm os campos e não pode especificar quaisquer condições que tenham de ser cumpridas pelos dados a incluir.
A cláusula SELECT aparece sempre à frente da cláusula FROM numa instrução SELECT.
A cláusula FROM
FROM Contacts
Esta é a cláusula FROM. Consiste num operador (FROM) seguido de um identificador (Contactos).
Uma cláusula FROM não lista os campos a selecionar.
A cláusula WHERE
WHERE City="Seattle"
Esta é a cláusula WHERE. Consiste num operador (WHERE) seguido de uma expressão (City="Seattle").
Nota: Ao contrário das cláusulas SELECT e FROM, a cláusula WHERE não é um elemento necessário de uma instrução SELECT.
Pode realizar muitas das ações que o SQL lhe permite realizar com as cláusulas SELECT, FROM e WHERE. São apresentadas mais informações sobre como utilizar estas cláusulas nestes artigos adicionais:
Ordenar os resultados: ORDENAR POR
Tal como o Microsoft Excel, o Access permite-lhe ordenar os resultados da consulta numa folha de dados. Também pode especificar na consulta como pretende ordenar os resultados quando a consulta é executada, utilizando uma cláusula ORDER BY. Se utilizar uma cláusula ORDER BY, esta é a última cláusula na instrução SQL.
Uma cláusula ORDER BY contém uma lista dos campos que pretende utilizar para ordenação, pela mesma ordem em que pretende aplicar as operações de ordenação.
Por exemplo, suponha que pretende que os seus resultados sejam ordenados primeiro pelo valor do campo Empresa por ordem descendente e , se existirem registos com o mesmo valor para Empresa, ordenados em seguida pelos valores no campo Endereço de Correio Eletrónico por ordem ascendente. A cláusula ORDER BY assemelhar-se-ia ao seguinte:
ORDER BY Company DESC, [E-mail Address]
Nota: Por predefinição, o Access ordena os valores por ordem ascendente (A-Z, do menor para o maior). Em alternativa, utilize a palavra-chave DESC para ordenar valores por ordem descendente.
Para obter mais informações sobre a cláusula ORDER BY, veja o tópico Cláusula ORDER BY.
Trabalhar com dados resumidos: AGRUpar POR e TER
Por vezes, quer trabalhar com dados resumidos, como o total de vendas num mês ou os itens mais caros num inventário. Para tal, aplique uma função de agregação a um campo na sua cláusula SELECT. Por exemplo, se quiser que a consulta mostre a contagem de endereços de e-mail listados para cada empresa, a cláusula SELECT poderá assemelhar-se ao seguinte:
SELECT COUNT([E-mail Address]), Company
As funções de agregação que pode utilizar dependem do tipo de dados que se encontra no campo ou expressão que pretende utilizar. Para obter mais informações sobre as funções de agregação disponíveis, veja o artigo Funções de Agregação SQL.
Especificar campos que não são utilizados numa função de agregação: a cláusula GROUP BY
Quando utiliza funções de agregação, normalmente também tem de criar uma cláusula GROUP BY. Uma cláusula GROUP BY lista todos os campos aos quais não aplica uma função de agregação. Se aplicar funções de agregação a todos os campos numa consulta, não terá de criar a cláusula GROUP BY.
Uma cláusula GROUP BY segue imediatamente a cláusula WHERE ou a cláusula FROM se não existir nenhuma cláusula WHERE. Uma cláusula GROUP BY lista os campos conforme aparecem na cláusula SELECT.
Por exemplo, continuando o exemplo anterior, se a cláusula SELECT aplicar uma função de agregação a [Endereço de E-mail] mas não à Empresa, a cláusula GROUP BY assemelhar-se-ia ao seguinte:
GROUP BY Company
Para obter mais informações sobre a cláusula GROUP BY, veja o tópico Cláusula GROUP BY.
Limitar valores agregados através de critérios de grupo: a cláusula HAVING
Se quiser utilizar critérios para limitar os resultados, mas o campo ao qual pretende aplicar critérios for utilizado numa função de agregação, não pode utilizar uma cláusula WHERE. Em vez disso, utilize uma cláusula HAVING. Uma cláusula HAVING funciona como uma cláusula WHERE, mas é utilizada para dados agregados.
Por exemplo, suponha que utiliza a função AVG (que calcula um valor médio) com o primeiro campo na cláusula SELECT:
SELECT COUNT([E-mail Address]), Company
Se quiser que a consulta restrinja os resultados com base no valor dessa função CONTAR, não pode utilizar um critério para esse campo na cláusula WHERE. Em vez disso, coloque os critérios numa cláusula HAVING. Por exemplo, se apenas quiser que a consulta devolva linhas se existirem mais do que um endereço de e-mail associados à empresa, a cláusula HAVING poderá assemelhar-se ao seguinte:
HAVING COUNT([E-mail Address])>1
Nota: Uma consulta pode ter uma cláusula WHERE e uma cláusula HAVING — os critérios para campos que não são utilizados numa função agregada vão para a cláusula WHERE e os critérios para campos que são utilizados com funções de agregação vão para a cláusula HAVING.
Para obter mais informações sobre a cláusula HAVING, veja o tópico Cláusula HAVING.
Combinar resultados da consulta: UNION
Quando quiser rever todos os dados devolvidos por várias consultas selecionar semelhantes em conjunto, como um conjunto combinado, utilize o operador UNION.
O operador UNION permite-lhe combinar duas instruções SELECT numa só. As instruções SELECT que combinar têm de ter o mesmo número de campos de saída, pela mesma ordem e com os mesmos tipos de dados ou tipos de dados compatíveis. Quando executa a consulta, os dados de cada conjunto de campos correspondentes são combinados num único campo de saída, para que o resultado da consulta tenha o mesmo número de campos que cada uma das instruções selecionar.
Nota: Para efeitos de uma consulta união, os tipos de dados Número e Texto são compatíveis.
Quando utiliza o operador UNION, também pode especificar se os resultados da consulta devem incluir linhas duplicadas, se existirem, utilizando a palavra-chave ALL.
A sintaxe SQL básica para uma consulta união que combina duas instruções SELECT é a seguinte:
SELECT field_1
FROM table_1 UNION [ALL] SELECT field_a FROM table_a ;
Por exemplo, suponha que tem uma tabela denominada Produtos e outra tabela denominada Serviços. Ambas as tabelas têm campos que contêm o nome do produto ou serviço, o preço, a garantia ou a disponibilidade da garantia e se oferece o produto ou serviço exclusivamente. Embora a tabela Produtos armazene informações de garantia e a tabela Serviços armazene informações de garantia, as informações básicas são as mesmas (quer um determinado produto ou serviço inclua uma promessa de qualidade). Pode utilizar uma consulta união, tal como a seguinte, para combinar os quatro campos das duas tabelas:
SELECT name, price, warranty_available, exclusive_offer
FROM Products UNION ALL SELECT name, price, guarantee_available, exclusive_offer FROM Services ;
Para obter mais informações sobre como combinar instruções SELECT com o operador UNION, consulte Combinar os resultados de várias consultas selecionar através de uma consulta união.