Escolar Documentos
Profissional Documentos
Cultura Documentos
Objetivos:
Neste tutorial serão apresentados os principais elementos da linguagem SQL (Structured
Query Language). Serão apresentados diversos exemplos práticos de utilização da linguagem
SQL.
Pré-requisitos: Para acompanhar esta lição você deve dominiar os conceitos apresentados
nos seguintes treinamento: "Curso Básico de Access" e no tutorial "Consultas Avançadas no
Microsoft Access".
Nota: Este tutorial foi retirado da apostila da Semana 2, do Curso de Excel Avançado e VBA.
Você pode adquirir os três arquivos, com todo o conteúdo deste curso, por apenas R$ 10,00.
Para saber como adquirir este curso, Clique Aqui.
Introdução:
O SQL foi desenvolvido para ser uma linguagem padrão para operações com Banco de
Dados. A lingüagem SQL foi elaborada para ser independente de hardware ou do software.
Ao usar o SQL, você não precisa saber a respeito do software de banco de dados ou do
hardware envolvido em uma operação. Tudo o que você precisa conhecer são os
comandos/instruções SQL padrão para solicitar informações, que obrigatoriamente é o
mesmo em todos os sistemas que utilizam o SQL.
Nota: Na prática existem pequenas diferenças entre o SQL dos diferentes bancos de dados,
como o Microsoft Access, Microsoft SQL Server 2000, ORACLE, etc.
Você usa operações SQL quando trabalha com o Microsoft Access, mas o programa, na
verdade, oculta a linguagem SQL do usuário. Por exemplo, todas as operações de consulta
são realizadas usando-se SQL, mas você vê apenas a parte gráfica (Modo Estrutura) onde a
consulta é definida.
Você pode ser muito produtivo no Microsoft Access sem saber nada de SQL. Um
conhecimento básico de SQL, no entanto, melhora significativamente o seu uso do Microsoft
Access, principalmente no uso de técnicas avançadas em Formulários e Relatórios e na
criação de rotinas de programação.
Quando você constrói uma consulta no modo estrutura, na verdade o Microsoft Access está
definindo uma instrução SQL, a partir dos campos, critérios e opções de filtragem que você
definiu na consulta. A título de exemplo, vamos acessar a instrução SQL da consulta "Totais
por Pedido", fornecida com o arquivo Semana2.mdb, o qual faz parte dos arquivos de
exemplos do Curso de Access Avançado.
Nota: Você pode acompanhar este exemplo utiliando o arquivo Northwind.mdb, o qual faz
parte do Access e acessando o SQL de qualquer uma das consultas disponíveis.
Abra o banco de dados Semana2.mdb
Vá para a Guia Consultas
Dê um clique na consulta Totais por Pedido
Dê um clique no botão Estrutura
Selecione o comando Exibir -> Modo SQL. Seré exibido o comando SQL indicado a seguir:
SELECT Pedidos.NúmeroDoPedido, Sum(([Quantidade]*[PreçoUnitário])*(1-
[Desconto]))
AS TotalPorPedido
FROM Pedidos
INNER JOIN
[Detalhes do Pedido]
ON
Pedidos.NúmeroDoPedido = [Detalhes do Pedido].NúmeroDoPedido
GROUP BY Pedidos.NúmeroDoPedido;
Nota: Se você não tiver disponível a consulta Totais por Pedido, utilize qualquer outra
consulta disponível.
1
Na prática é esta Instrução SQL que o Microsoft Access grava ao salvar uma consulta e
também é esta Instrução SQL que é utilizada para selecionar os registros, aplicando os
critérios especificados.
Embora possa parecer um pouco complexa, veremos que a linguagem SQL é extremamente
simples e intuitiva. Neste tópico veremos alguns aspectos básicos sobre o SQL, bem como os
locais na Ajuda do Microsoft Access onde podem ser encontradas informações mais
detalhadas sobre o SQL.
Uma Instrução SQL descreve o conjunto de dados que você deseja recuperar (quais campos,
de quais tabelas, quais critérios, classificação, expressões Calculadas, etc).
Todas as instruções SQL são conduzidas com um único comando que contém uma descrição
completa da informação exigida. Ao escrever uma instrução SQL, você não deve se
preocupar em como os dados são recuperados, mas somente com o conteúdo do conjunto de
dados. Esse é o principal benefício do método SQL. Em muitas operações do Microsoft
Access, você pode usar instruções SQL, no lugar de expressões normais para inserir um
conjunto de dados em um objeto. Por exemplo, todos os formulários e relatórios possuem
uma propriedade RecordSource. Essa propriedade normalmente é o nome de uma tabela ou
consulta, mas também pode ser uma instrução SQL.
Veremos através de exemplos a utilização das principais palavras chaves do SQL para a
construção de expressões SQL para pesquisa em banco de dados.
SELECT
Esta com certeza é a instrução SQL mais importante, não existe pesquisa que não utilize
esta instrução, vamos conhecê-la em detalhes.
A Instrução Select é utilizada para especificar "Quais os Campos" de "Quais tabelas" farão
parte da consulta, quais os critérios de pesquisa que serão utilizados, qual a ordem de
classificação, etc.
Elemento Descrição
2
Especifica que todos os campos de uma determinada tabela ou
associado.
use esta declaração com uma consulta para conceder ao usuário que
consulta.
WITH
Sintaxe
OWNERACCESS
OPTION
instrução sql
3
sobre salários (mesmo que, de outra forma, o usuário não tenha
SELECT Sobrenome,
Nome, Salário
FROM Funcionários
ORDER BY Sobrenome
OPTION para permitir que ele execute uma consulta criar tabela ou
consulta acréscimo.
OWNERACCESS OPTION.
4
Quando formos classificar em ordem decrescente, precisamos especificar a palavra DESC,
conforme indicado abaixo:
SELECT Pedidos.NúmeroDoPedido, Pedidos.DataDoPedido, Pedidos.PaísDeDestino,
Pedidos.Frete
FROM
Pedidos
ORDER BY Pedidos.Frete DESC;
Alterar a instrução SQL anterior para que sejam exibidos somente os pedidos cujo
PaísDeDestino seja Brasil.
Podemos ver, através dos exemplos, que a linguagem SQL não é tão difícil como pode
parecer a primeira vista. Observe que a sintaxe da linguagem é bastante intuitiva e
orientada a extração de dados através das consultas.
5
SELECT Pedidos.NúmeroDoPedido, Pedidos.DataDoPedido, Pedidos.PaísDeDestino,
Pedidos.Frete
FROM
Pedidos
WHERE ((Year([DataDoPedido])=1995))
ORDER BY Pedidos.NúmeroDoPedido;
Observe a utilização da função Ano (Year) para extrairmos apenas o Ano do campo
DataDoPedido a fim de especificarmos como critério o Ano=1995. Também a cláusula Order
By foi mantida, classificando a listagem em ordem crescente pelo número do pedido. A
utilização de funções junto com os comando SQL nos fornece inúmeras possibilidades de
refinamento em nossas consultas.
Alterar a instrução SQL anterior, para que sejam exibidos somente os pedidos no Período
de 01/01/1995 até 31/07/1995 e que tenham como PaísDeDestino Brasil, Argentina,
Alemanha ou Canadá.
6
AND
((Pedidos.PaísDeDestino) In ("Brasil","Argentina","Alemanha","Canadá")))
ORDER BY [DataDeEntrega]-[DataDoPedido];
Até agora utilizamos exemplos com Instruções que selecionam registros de uma única
tabela. Porém é bastante comum criarmos Consultas baseadas em duas ou mais tabelas.
Quando criamos instruções SQL que buscam dados em duas ou mais tabelas, dizemos que
está sendo feito um Join entre as duas tabelas. Normalmente este "Join" (ou ligação) é feito
através de um campo comum as duas tabelas. Por exemplo, NúmeroDoPedido na
tabela Pedidos e NúmeroDoPedido na tabela Detalhes do Pedido. Outro
exemplo, CódigoDoCliente na tabela Pedidos e CódigoDoCliente na tabela Clientes.
Pode acontecer de termos consultas que trabalham com três ou mais Tabelas, neste caso
teremos diversos Joins.
Observe que está listagem irá trazer vários registros para cada Pedido, tantos quantos forem
os ítens de cada pedido. Por exemplo, o Pedido Número 10248 apresenta três registros, um
para cada um dos seus ítens. Um para o Produto 42, outro para o produto 72 e um para o
produto cujo código é 11.
7
Mas se ao invés do CódigoDoProduto, nos quiséssemos que fosse exibida a Descrição do
Produto. Em primeiro lugar esta informação encontra-se na tabela Produtos, logo teremos
que adicionar a Tabela Produtos a nossa consulta, a qual ira se ligar a tabela Detalhes Do
Pedido através do campo CódigoDoProduto, logo teremos mais um Join.
Posso utilizar diversos níveis de INNER JOIN, embora esta não seja uma prática
recomendada, pois se aumentarmos muito os níveis de INNER JOIN, posso ter como
resultado pesquisas mais lentas em conseqüência do aumento da complexidade das
consultas. Até 3 ou 4 níveis é considerado normal, acima disso preciso repensar a maneira
de construir a consulta.
Alterar a instrução SQL do ítem anterior para que somente sejam exibidos os pedidos para
os produtos cujo NomeDoProduto inicie com uma letra na faixa de A até J. Tirar a classificação
do campo NúmeroDoPedido e classificar em ordem crescente do campo NomeDoProduto.
Até este momento estivemos construindo Instruções SQL que correspondem as consultas
de Seleção. Especificamos quais campos serão exibidos, critérios de filtragem para estes
campos e uma ordem de classificação. A partir de agora aprenderemos a utilizar Instruções
SQL para a construção de outros tipos de Consulta : Criar Tabela, Consulta anexação,
Consulta de tabela de referência cruzada, Consulta exclusão e Consulta atualização. Vamos
começar criando uma consulta do tipo Criação de Tabela e observar as diferenças na
instrução SQL.
Construir uma instrução SQL que selecione o NúmeroDoPedido, DataDoPedido,
PaísDeDestino e Frete. Colocar um critério para selecionar apenas os registros cuja
DataDoPedido tenha caído no mês de Junho ou Julho de qualquer ano. A consulta deverá ser
do tipo Criar tabela e o nome da tabela será "Pedidos de Junho e Julho".
8
INTO [Pedidos de Junho e Julho]
FROM Pedidos
WHERE ((Month([DataDoPedido]) In (6,7)));
Observe a utilização da instrução INTO [Pedidos de Junho e Julho]. Ao invés de
utilizarmos um SELECT FROM, utilizamos um SELECT INTO, que é a instrução SQL
utilizada para criar uma nova tabela com os registros retornados pela consulta. O Nome da
nova tabela vem depois da instrução INTO. Como o nome da tabela possui espaços em
branco, o nome deve ser colocado entre colchetes. Também utilizamos, na cláusula WHERE,
o operador In , juntamente com a função Month, para especificar que o mês da
DataDoPedido deve ser um dos valores definidos na cláusula In (6=Junho, 7=Julho).
A Instrução SELECT INTO, informa ao Microsoft Access que é para "pegar" os registros
rertornados pela consulta e inseri-los em uma nova tabela. Caso a tabela já exista o
Microsoft Access avisa que a tabela será excluída e uma nova tabela será criada.
Criar uma instrução SQL que aumento o PreçoUnitário em 20% na tabela Detalhes do
Pedido, devido a um ajuste na moeda e uma desvalorização em relação ao Dólar.
Importante: Se você executar mais do que uma vez, uma consulta de atualiazação, os
dados serão repetidamente atualizados. Por exemplo: da primeira vez que a consulta for
executada os dados do campo PreçoUnitário serão aumentados em 20% (por exemplo, um
produto com preço Unitário de R$ 100,00 passará para R$120). Se você executar a consulta
novamente será aplicado um novo acréscimo de 20%, sobre os novos valores - o produto de
R$120,00 passará para R$144,00 e assim sucessivamente.
Aqui podemos fazer alguns comentários sobre a utilização prática de Instruções SQL. Como
exemplo poderíamos citar um Formulário para atualização de Preços. Poderíamos colocar um
campo onde o usuário digita o valor do aumento (10%, 15%, etc) e um botão Atualizar.
Esse botão Atualizar tem associado ao evento Ao Clicar, uma Instrução SQL que atualiza
os registros desejados. Isso aumenta em muito a nossa flexibilidade, evitando que o usuário
tenha que se deslocar para a Guia Consultas e executar uma consulta de Atualização.
9
maior ou igual a 20 e NúmeroDoPedido menor do que 10500). Se o registro atender a
apenas uma das condições, o mesmo não terá o seu PreçoUnitário atualizado.
Vamos refinar um pouco mais a nossa consulta de atualização. Vamos fazer com que
somente sejam atualizados os Pedidos para o ano da DataDoPedido igual a 1995, e ainda
iremos manter os critérios adicionados até agora.
Alterar a instrução SQL anterior para incluir um critério para que o Ano da DataDoPedido
seja 1995. Você terá que incluir a tabela Pedidos, uma vez que o campo DataDoPedido,
encontra-se nesta tabela.
UPDATE Pedidos
INNER JOIN [Detalhes do Pedido]
ON
Pedidos.NúmeroDoPedido = [Detalhes do Pedido].NúmeroDoPedido
SET [Detalhes do Pedido].PreçoUnitário = [PreçoUnitário]*1.2
WHERE ((([Detalhes do Pedido].PreçoUnitário)>=20)
AND
(([Detalhes do Pedido].NúmeroDoPedido)<10500)
AND
(Year([DataDoPedido])=1995));
Temos diversos detalhes interessantes a observar nesta instrução SQL. Primeiro um INNER
JOIN relacionando as tabelas Pedidos e Detalhes Do Pedido, através do
campo NúmeroDoPedido. Isso mostra que é perfeitamente possível, utilizar um INNER
JOIN dentro de uma consulta de atualização. Segundo: Temos a utilização da função Year
para extrair apenas o ano do campo DataDoPedido e compará-lo com o critério 1995.
Novamente vale a pena comentar que a utilização de Operadores e Funções, nos fornece
uma grande flexibilidade em termos de construção de nossas consultas.
Agora vamos passar a analisar as Instruções SQL para consultas do tipo Tabela de referência
cruzada. Veremos alguns exemplos, e os detalhes a respeito de cada instrução.
Criar uma instrução SQL que liste o total de compras pelo NomeDaEmpresa e por ano da
DataDoPedido. Classificar a listagem em ordem crescente do NomeDaEmpresa.
TRANSFORM
Sum(([PreçoUnitário]*[Quantidade])*(1-[Desconto])) AS Expr2
SELECT Clientes.NomeDaEmpresa
FROM (Clientes
INNER JOIN Pedidos
ON
Clientes.CódigoDoCliente = Pedidos.CódigoDoCliente)
INNER JOIN [Detalhes do Pedido]
ON
Pedidos.NúmeroDoPedido = [Detalhes do Pedido].NúmeroDoPedido
GROUP BY Clientes.NomeDaEmpresa
ORDER BY Clientes.NomeDaEmpresa
PIVOT Year([DataDoPedido]);
Temos diversos detalhes a observar nesta instrução SQL. Primeiro a instrução TRANSFORM,
que calcula o valor de cada ítem (usando a fórmula ([PreçoUnitário]*[Quantidade])*(1-
[Desconto])) e a função Sum para somar todos os ítens de um determinado cliente. A
instrução TRANSFORM equivale ao elemento Valor da Referência Cruzada. Este valor
calculado é que irá formar os valores da nossa referência cruzada. Temos também, a
utilização de dois INNER JOIN, um ligando Pedidos com Detalhes do Pedido, através do
campo NúmeroDoPedido, e outro ligando Pedidos com Clientes, através do campo
CódigoDoCliente, uma vez que precisamos de informações destas três tabelas.
E por último, a utilização da palavra PIVOT, juntamente com a função Year, indicando que
os diferentes Anos da DataDoPedido irão compor as colunas da nossa referência cruzada.
10
Veja o que diz a Ajuda do Microsoft Access sobre a instrução TRANSFORM:
Cria uma consulta tabela de referência cruzada.
Parte Descrição
funçãoagrg Uma função agregada SQL que opera sobre os dados selecionados.
instruçãoselect Uma instrução SELECT.
O campo ou expressão que você quer usar para criar títulos de
campocentral
coluna no conjunto de resultados da consulta.
valor1, valor2 Valores fixos usados para criar títulos de colunas.
Comentários:
Quando resume dados utilizando uma consulta tabela de referência cruzada, você
seleciona valores de campos ou expressões especificadas como títulos de colunas
para poder visualizar os dados em um formato mais compacto do que com uma
consulta seleção.
Criar uma instrução SQL que gere uma Consulta de tabela de referência cruzada.
As linhas deverão ser formadas pelo PaísDeDestino da tabela Clientes. As colunas serão
formadas pelo número do mês da DataDoPedido e os valores serão formados pela contagem
de pedidos. Adicionar um critério de tal forma que somente sejam exibidos os registros para
Brasil ou Alemanha.
11
Agora vamos aprender a construir instruções SQL para consultas de exclusão. Veremos que
a simplicidade da linguagem SQL facilita em muito o entendimento e a aprendizagem destas
instruções.
Faça uma cópia da tabela Pedidos. Chame a cópia de CópiaDePedidos. Criar uma instrução
SQl que elimine todos os Pedidos da tabela CópiaDePedidos cujo PaísDeDestino seja a
Alemanha
DELETE CópiaDePedidos.PaísDeDestino
FROM
Pedidos
WHERE (((Pedidos.PaísDeDestino)="Alemanha"));
A instrução é tão simples, que praticamente dispensa comentários. A única recomendação
importante é que não devemos utilizar uma instrução DELETE, sem a utilização de uma
cláusula WHERE. Utilizar um DELETE sem uma cláusula WHERE significa que estaremos
eliminando todos os registros da tabela.
Vamos criar instruções SQL com parâmetros (Consultas Parametrizadas), que ao serem
executadas solicitam ao usuário que seja digitado um valor para o parâmetro.
Criar uma instrução SQL que selecione os campos NúmeroDoPedido, DataDoPedido, Frete e
PaísDeDestino da tabela Pedidos. Fazer com que ao ser executada, a consulta solicite que seja
digitado o nome do País e que sejam retornados apenas os Pedidos para o PaísDeDestino
digitado.
SELECT
Pedidos.NúmeroDoPedido, Pedidos.DataDoPedido, Pedidos.Frete,
Pedidos.PaísDeDestino
FROM
Pedidos
WHERE (((Pedidos.DataDoPedido) Between [Data Inicial:] And [Data Final:]) AND
((Pedidos.PaísDeDestino)=[Digite o País:]));
Observe a utilização do operador Between, junto com os parâmetros [Data
Inicial:] e [Data Final:]. Os parâmetros nos campos DataDoPedido e PaísDeDestino estão
ligados por um AND (Operador E), conforme explicado anteriormente.
Existe uma série de detalhes sobre a utilização do SQL. Existem, também, diversas situações
onde podemos utilizar uma instrução SQL para retornar dados. Por exemplo, ao construir
uma Caixa De Combinação em um formulário, podemos utilizar uma Instrução SQL para
buscar dados em uma Tabela, dados estes que serão exibidos na Caixa de Combinação.
Podemos utilizar instruções SQL, juntamente com Funções de Domínio para exibir valores em
formulários, como por exemplo, a média de vendas para um determinado período, o total de
vendas para um determinado cliente, e assim por diante.
12
Uma pergunta que fica é: Onde posso encontrar mais informações sobre
o SQL?
Um bom ponto de partida é a Ajudo do Microsoft Access . Agora indicaremos alguns locais na
Ajuda do Microsoft Access, onde você poderá encontrar informações sobre SQL.
Selecione o comando Ajuda -> Ajuda do Microsoft Access ou pressione a tecla F1. Clique
na guia Conteúdo. Clique no sinal de + ao lado da opção "Trabalhar com Consultas".
Surgem as opções:
Criar consultas SQL.
Trabalhar com instruções SQL.
Estas opções estão indicadas na figura a seguir:
Através destas duas opções você encontra muitas informações e exemplos sobre o uso da
lingüagem SQL no Microsoft Access.
Conclusão:
A lingüagem SQL apresenta um padrão de comando/instruções para consultar, alterar e
pesquisar tabelas de um banco de dados. A implementação do SQL utilizada no Microsoft
Access segue grande parte do padrão definido pelo Ansi-92, mas apresenta algumas
inconsistências, como por exemplo:
Utiliza o * ao invés do % como caractere curinga
Utiliza “ ao invés de ‘ para critérios do tipo texto
Muito pode ser feito no Access, sem conhecer a lingüagem SQL, mas com certeza você terá
muito mais recursos à mão, conhecendo a lingüagem SQL.
13