Introdução
Tabelas
Relacionamentos
 Consultas
Formulários
 Relatórios
 Macros
Módulos
ActiveX
 AutomaçãoOLE
 Gráficos
 DAO
 SQL
 Segurança
Redes/ODBC
 Dicas
 Curso Online
Wizards
Ferramentas
Help
 Downloads
 Links
Novidades
FAQs
Index

SQL Prático



    Com a intenção de facilitar a compreensão desta poderosa e útil ferramenta de Banco de Dados, eu venho trazer alguns exemplos práticos e algumas observações sobre a SQL.
 

SQL - Structured Query Language - Linguagem Estruturada de Consulta

É a  linguagem de consultas, utilizada para criar os mais diversos  tipos de consultas, que podem ser muito úteis e poderosas.
"O principal problema experimentado por programadores no aprendizado da SQL é que devem desaprender as outras linguagens." (INSTANT SQL Programming - Joe Celko)

"O SQL é uma linguagem declarativa, daquelas que você diz ao computador o que deseja que ele faça e esquece os detalhes, preocupa-se apenas com os resultados." (INSTANT SQL Programming - Joe Celko)

COMO VISUALIZAR O CÓDIGO SQL NO ACCESS?

É possível visualizar ou escrever
consultas do Microsoft Access como instruções SQL:

- Na janela QBE da Consulta
- Menu Exibir
- Clicar em SQL
- Pronto, está na janela de código SQL

COMO CRIAR UMA CONSULTA SQL NO ACCESS?

Para criar uma nova Conslta SQL:

- Clique em Novo
- Consulta
- Modo Estrutura
- Tecle Esc para fechar a janela Mostrar tabela
- Menu Exibir
- Clicar em SQL
- Pronto, está no editor de SQL

ONDE USAR UMA CONSULTA SQL NO ACCESS?

Podemos usar instruções SQL SELECT onde o Access aceite um nome
de tabela, de consulta ou de campo. Para gerar uma lista de itens em uma
Caixa de listagem, você pode definir a propriedade
Origem do Controle da caixa de listagem com uma
instrução SQL SELECT. Tabém pode criar uma Consulta puramente
SQL e salvar como consulta, depois criar um Formulário ou um
Relatório baseado nesta Consulta. Podem os usar também em
funções agregadas, caixas de cobinação (quando usamos os
assistentes para estes controles ou em Pesquisas), origem da
linha destes 2 controles como argumento Condição Onde da ação
AbrirFormulário ou AplicarFiltro, como argumento de domínio ou critério
em uma função agregada de domínio ou como definição para as propriedades
Origem do Registro ou Origem da Linha.

INSTRUÇÕES SQL

Uma Instrução SQL é utilizada no Access como uma String ou sequência
de caracteres.

SELECT - Obtém um grupo de registros e insere os registros em um dynaset ou em uma tabela
UPDATE - Define os valores dos campos de uma tabela em uma atualização
TRANSFORM - Cria uma tabela de resumo, utilizando o conteúdo de um campo como cabeçalho de cada coluna
DELETE FROM - Remove registros de uma tabela
INSERT INTO - Acrescenta um grupo de registros a uma tabela.


TRABALHANDO EM ESTRUTURAS DE TABELAS
CREATE TABLE

Criando a estrutura física (Os Campos) de uma Tabela.  Com um Campo Chave Primária (Código) do tipo Inteiro e dois outros Campos do tipo Texto.

CREATE TABLE ClientesSQL (Nome TEXT, Fone TEXT, Código INTEGER
CONSTRAINT RestrictCamp PRIMARY KEY);

ALTER TABLE

Alterando a estrutura de uma Tabela.

Adicionando um Campo

ALTER TABLE Clientes ADD COLUMN Email TEXT;

Removendo um Campo

ALTER TABLE Funcionários DROP COLUMN Cargo;

DROP TABLE

Excluindo uma Tabela

DROP TABLE Clientes;

DROP INDEX PrimaryKey ON Clientes;


 TRABALHANDO COM OS DADOS
INSTRUÇÃO SELECT

Esta é a instrução onipresente da SQL.

Estes exemplos abaixo poodem ser transformados em Consulta do Access:
digitar na grade QBE e salvar como consulta.

"A instrução SELECT é responsável por consultar o Banco de Dados e retornar o
as informações requeridas pelo programador." (INSTANT SQL Programming - Joe Celko)

Sintaxe

SELECT [[ALL] | DISTINCT] {<ListaDeColunasOuExpressão>|*}
FROM <NomeTabels>
[WHERE<CondiçãoDeBusca>];

CRIANDO UMA NOVA CONSULTA SQL

Consulta - Novo - Modo Estrutura - Tecle Esc - Exibir -
Modo SQL - Cole o código e Salve.

EXECUTANDO A CONSULTA

Execute a Consulta (Clique no ponto de interrogação).

SELECIONAR TODOS OS NOMES E TELEFONES DE CLIENTES

SELECT Nome, Fone FROM Clientes;

SELECIONE TODA A TABELA CLIENTES

SELECT * FROM Clientes;

SELECIONAR APENAS CLIENTES DISTINTOS - REMOVER DUPLICADOS

SELECT DISTINCT * FROM Clientes;

CONTAR CLIENTES COM TELEFONE E MUDAR NOME DO CAMPO

SELECT Count([Fone Residencial]) AS [Clientes com Fone] FROM Clientes;

REAJUSTAR TODOS OS PRODUTOS EM 3%

SELECT Produto, PUnitário AS PreçoAtual, PUnitário * 1.03 AS PreçoReajustado
FROM tblProdutos;

QUANTIDADE, O PREÇO UNITÁRIO MÁXIMO E A MÉDIA DOS PREÇOS UNITÁRIOS

SELECT Count(*) AS [Total de Produtos], Avg(PreçoUnitário) AS [Preço Unitário Médio],
Max(PreçoUnitário) AS [Preço Unitário Máximo] FROM Produtos;

NOMEDOPRODUTO E PREÇO UNITÁRIO SEPARADOS POR "tem um preço unitário de"

SELECT NomeDoProduto, 'tem um preço unitário de', PreçoUnitário FROM Produtos;

CLÁUSULA WHERE

A Cláusula Where é como um filtro. é uma condição.

CLIENTES CUJO BAIRRO SEJA MONTESE OU PARQUELÂNDIA

SELECT * FROM Clientes WHERE Bairro = 'Montese' OR Bairro = 'Parquelândia';

PREDICADOS DA CLÁUSULA WHERE: LIKE, IN e BETWEEN

LIKE - Use este quando já souber o que está procurando

IN - Este quando desejar procurar em uma lista

SELECT * FROM Clientes WHERE Nome LIKE 'Rob*';

SELET DISTINCT Código
FROM Clientes
WHERE Código IN ('JM2', 'LK5', 'DN7');

Usando o NOT:

...

WHERE Código NOT IN ...

SELECT * FROM Clientes WHERE Nome BETWEEN 'Ana' AND 'Luiz';

Usando o NOT:

... NOT BETWEEN ...

USO DO NULL, TRUE, FALSE e UNKNOWN

SELECT Nome FROM Clientes WHERE email IS NULL;

Usa-se também de maneira semelhabte os outros predicados do WHERE.

CLÁUSULA ORDER BY

Ordenar por

SELECT * FROM Clientes ORDER BY Nome DESC;

DESC ou ASC são opcionais. ASC é o default.

GROUP BY

SELECT * FROM Clientes GROUP BY Nome;

MOSTRAR VENDAS MAIS RECENTES

SELECT Código, MAX (DataVenda) FROM Pedidos GROUP BY Código;

PRODUTO MENOS VENDIDO

SELECT Código, MIN (Quantidade) FROM ItensPedidos GROUP BY Código;

SOMANDO VENDAS POR PRODUTO

SELECT Código, SUM (Quantidade) AS [Soma] FROM ItensPedidos GROUP BY Código;

CONSULTAS UNIÃO DE TABELAS (JOIN)

Teoricamente é ilimitado o numero de Tabelas que podemos adicionar a uma Consulta SQL.

INNER JOIN

Cria uma Consulta que une os registros das duas Tabelas, mas somente aqueles onde os Campos Chaves são iguais. Na jenela da Consulta dê um duplo clique na linha de relacionamento entre as Tabelas. Este é o tipo padrão do Access, o tipo 1. O tipo 2 é o LEFT JOIN e o 3 é o RIGHT JOIN. Este tipo é representado com uma linha sem setas.

SELECT * FROM Clientes INNER JOIN Pedidos ON Clientes.Código=Pedidos.CódigoCli;

Podemos usar o AND e OR para auxiliar o ON.

Gera uma Consulta com número de Campos igual à soma dos Campos das duas Tabelas e com número de registros igual a aos que atendam ao Critério em ON..

LEFT JOIN

Esta vai incluir todos os registros da Tabelas da Esquerda e somente os da Direita quando os Campos Chaves forem iguais. É representado na tela da Consulta entre as Tabelas, como uma seta para a Direita.

SELECT * FROM Clientes LEFT JOIN Pedidos ON Clientes.Código = Pedidos.CódigoCli;

RIGHT JOIN

Este inclui todos os registros da Tabela da Direita e somente os da esquerda quando as Chaves forem iguais. É representado na tela da Consulta entre as Tabelas, como uma seta para a Esquerda. A associação aqui é ao contrário: LeftJoin tem seta para a direita e RightJoin para a esquerda.

SELECT * FROM Clientes RIGHT JOIN Vendas ON Clientes.CodCli = Vendas.CodCli;

Obs.: Em todas as 3 podemos utilizar os operadores: <, >, <= e => entre outros.

FUNÇÃO COUNT

SELECT COUNT (Nome) FROM Clientes;
SELECT DISTINCT COUNT (Nome) FROM Clientes;

FUNÇÃO SUM

SELECT SUM ([Quantidade]) AS [Total de Vendas] FROM Vendas;

SELECT DISTINCT SUM (Remuneração) AS [Total do Salário] FROM Funcionários;

FUNÇÃO AVG (Média)

SELECT AVG (PUnitário) FROM Produtos;

SELECT DISTINCT AVG (PUnitário) FROM Produtos;

FUNÇÃO MAX

SELECT MAX (Remuneração) AS [Maior Salário] FROM Funcionários;

FUNÇÃO MIN

SELECT MIN (Remuneração) AS [Menor Salário] FROM Funcionários;

SUB-CONSULTAS

SELECT Nome FROM Pedidos, Clientes WHERE Pedidos.CódigoCli = Clientes.Código
   AND Pedidos.Código = (SELECT MAX (Pedidos.Código) FROM Pedidos
WHERE DataVenda >= #11-28-1989#);

 FUNCIONÁRIOS COM SALÁRIO ACIMA DE R$ 2.000,00

SELECT Nome, Remuneração FROM Funcionários
  WHERE Funcionário.Tipo = 'Supervisor' AND
  EXISTS (SELECT * FROM Funcionários WHERE Tipo = 'Segundo Grau'
  AND Remuneração >= 2000);

Se algum resultado => EXISTS = True
Se nenhum resultado => EXISTS = False

ATUALIZAÇÃO

UPDATE Clientes SET Estado = 'Ce' WHERE Cidade = 'Fortaleza';

EXCLUINDO DADOS DE TABELAS

Excluir todos os registros da Tabela Clientes:

DELETE FROM Clientes;

Excluir o Registro onde o Fone = 2883342

DELETE FROM Clientes WHERE Fone = '2883342';

EXCLUIR DADOS USANDO SUB-CONSULTA

DELETE FROM Clientes WHERE Nome IN (SELECT Nome FROM Clientes2)

Excluirá todos os registros de Clientes cujos Nomes sejam semelhantes aos de Clientes2.

---------------------------------------------------
    Cantinho dos Amantes do Access
    http://www.geocities.com/bdaccess/ 1