SQL Prático
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.
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;
Excluindo uma Tabela
DROP TABLE Clientes;
DROP INDEX PrimaryKey ON Clientes;
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';
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;
Teoricamente é ilimitado o numero de Tabelas que podemos adicionar a uma Consulta SQL.
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..
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;
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.
SELECT COUNT (Nome) FROM Clientes;
SELECT DISTINCT COUNT (Nome) FROM Clientes;
SELECT SUM ([Quantidade]) AS [Total de Vendas] FROM Vendas;
SELECT DISTINCT SUM (Remuneração) AS [Total do Salário] FROM Funcionários;
SELECT AVG (PUnitário) FROM Produtos;
SELECT DISTINCT AVG (PUnitário) FROM Produtos;
SELECT MAX (Remuneração) AS [Maior Salário] FROM Funcionários;
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
UPDATE Clientes SET Estado = 'Ce' WHERE Cidade = 'Fortaleza';
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/