|
|
|
|
|
Dicas
|
|
Visual Basic (ActiveX/Controles/DLL)
|
|
|
Título da Dica: Consultas SQL
|
|
|
|
Postada em 22/1/2008 por KoRn
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.
|
|
|
|
|