- 1. Mdulo 2 Aula 2 DDL Objetivo da Aula Realizar consultas SQL
em tabelas nicas com seleo de campos, ordenao, agrupamento e
condicionais.IntroduoNesta aula exploraremos:Consultas SQL
com;Seleo de campos;Ordenao de Resultado;Condicionais;Agrupamento;
Relembrando...Mdulo 1:Mdulo 2:Relembrando com um pouco de
SQL....create table livros (id int not null primary key
auto_increment,nome varchar(80) not null,preco float not
null,vendas int default 0,lancamento date not null);insert into
livros (nome, preco, vendas,lancamento) values ("As Brumas de
Avalon",40.00, 1700, "1979-01-01");Atividade 1Para exercitar,
encontre os 8 erros nos comandos"insert" abaixo:insert into livros
(nome preco, vendas,lancamento) values (O Senhor dos Anis,40.00,
5000, "1995-01-01")insert em livros (nome, preco,
vendas,lancamento) ("gape", 12, 3500, 2010-01-01);insert into
(nome, preco, vendas,lancamento) values ("PHP Profissional",48.00,
412, "01-01-2006"); Consultas SQL; comum que as tabelas tenham
alguns milhares deregistros;Para encontrar informaes em grandes
quantidades dedados foi desenvolvido o comando Select da
linguagemSQL;Este comando o mais amplo e mais importantecomando da
linguagem SQL;Sempre que visualiza-se uma lista de qualquer domnio,
provvel que esta tenha sido obtida atravs de umaconsulta SQL como
por exemplo:Lista de Cifras para violo no cifraclub;Lista de
produtos mais vendidos nas americanas.com;Lista de ltimos livros
cadastrados na estante virtual;Amigos no Orkut (ou
Facebook);Seguidores no Twitter, etc...Exemplo: Tabela de Livros de
uma Livraria on-line:Preparando o ambientePara fazermos alguns
testes com este comando, importe oarquivo SQL exemplo_select.sql
para o mySQL atravs doPHPMyAdmin;Este arquivo contm a tabela
utilizada no exemplo acimacom 20 registros fictcios;Para confirmar
que voc carregou tudo corretamente,acesse a base de dados:use
exemplo_select;e execute o comando Select bsicoselect * from
livros;Voc deve ver a tabela livros com todos os seus 20registros.
Agora, estamos preparados para aprender estevasto comando.Exibindo
apenas o necessrio comum no precisarmos visualizar todos os campos
deuma tabela. Se quisermos ver apenas o nome e o preodos livros por
exemplo, isso possvel. particularmente importante visualizar apenas
asinformaes necessrias em tabelas com grandesvolumes de dados, cuja
carga de muitas informaespoderia sobrecarregar a memria do
computador.Fazemos isso substituindo o * (asterisco) da consulta
pelalista de campos que desejamos visualizar, separados
porvrgula.Exemplo 1: Apenas nome e preo dos livrosselect nome,
preco from livros;Exemplo 2: Apenas nome e gnero dos livrosselect
nome, genero from livros;Atividade 3Faa uma consulta visualizando
apenas nomee nmero de vendas de um livro.Erros ComunsEsquecer a
vrgula entre os campos.Informar o nome de um campo que no
existe.Tudo em OrdemAgora que j exibimos apenas os campos
necessriospodemos tambm ordenar os resultados de forma
maisagradvel.Podemos ordenar os resultados por alguma informaode
forma crescente ou decrescente.No select o comando order by
adicionado ao final daexpresso, seguido do nome do campo que vai
serordenado e de um termo para informar se a ordenao crescente
(asc) ou decrescente (desc).Exemplo 3: Livros em ordem
alfabticaselect nome from livros order by nome asc;Exemplo 4:
Livros mais vendidosselect nome, vendas from livros order byvendas
desc;Exemplo 5: Livros menos vendidosselect nome, vendas from
livros order byvendas asc;Colocando LimitesGeralmente, as listas de
mais vendidos e ltimoslanamentos exibem apenas uma parcial dos
resultados.Os ltimos 5, 10, 20, etc.Para limitarmos o nmero de
registros que devemaparecer em uma consulta utilizamos a clusula
limit logoaps o order by.Exemplo 6: Os 5 livros mais vendidos
podemos executar:select nome, vendas from livros order byvendas
desc limit 5;Atividade 4Consulte os 10 ltimos lanamentos da
lista.Atividade 5Consulte os 3 livros mais antigos da
lista.Atividade 6 necessrio informar "asc" ou "desc" em todas
asconsultas? Tente remov-lo de alguma instruo edescubra o que
acontece.Erros mais comunsEscrever orderby ao invs de order
by;informar algum nome de campo que no existe;Inverter a posio de
limit e order by; Mas e se...Tambm podemos adicionar condicionais s
nossasbuscas.Dessa forma, extramos das tabelas apenas uma porodos
dados.Livrarias costumam ter todos os seus registros de livrosem
apenas uma tabela e apresentar opes de filtragemdestes dados
como:Filtro por preo;Por data de lanamento;Por gnero;Por
autor;etc...A incluso destas condies feita atravs da clusulawhere
seguida das condies que desejamos:Exemplo 7: Filtro por gneroselect
nome, genero from livros where genero ="ficcao";Exemplo 8: Filtro
por preo menor que 20 reais.select nome, preco from livros where
preco < 20;Exemplo 9: Livros com data de lanamento maior que 1
de janeiro de 2010.select nome, lancamento from livros
wherelancamento > "2010-01-01";Realizando BuscasO comando where
o corao dos filtros e buscas embanco de dados. Sempre que voc faz
uma busca emalgum site, provavelmente ele est adicionando
clusulaswhere sua instruo select.Para realizar buscas parciais por
textos podemos usar ocomando like com o coringa %. O coringa
representa"qualquer coisa".Exemplo 10: Selecionar nomes de livros
comeando com "A".select nome from livros where nome like
"A%";Exemplo 11: Selecionar nomes de livros terminando com
"Anis".select nome from livros where nome like"%Anis";Exemplo 12:
Selecionar nomes de livros com a palavra "Amor".select nome from
livros where nome like"%Amor%";Vrias condies em uma mesma
consultaTambm podemos usar operadores lgicos and e or pararealizar
buscas por mais de um campo da tabela.Exemplo 13: Todos os livros
de fico por menos de 20 reais.select nome, genero, preco from
livros wheregenero = "ficcao" and preco < 20;Exemplo 14: Todos
os livros entre 20 e 40 reais.select nome, preco from livros where
preco >20 and preco < 40;Exemplo 15: Todos os livos com
vendas abaixo de 1000 ou acima de 3000.select nome, vendas from
livros where vendas< 1000 or vendas > 3000;Juntando
tudoLembre-se que a ordenao e o limite s soacrescentados ao fim da
consulta. A clusula where deveestar logo aps o nome da tabela
consultada.Exemplo 16: Trs livros entre 20 e 40 reais ordenados do
mais barato ao maiscaro.select nome, preco from livros where preco
>20 and preco < 40 order by preco asc;Atividade 7Busque todos
os livros com vendas acima de 2000ordenados pelo mais
vendidoAtividade 8Busque os 5 ltimos lanamentos dos livros de
fico.Atividade 9Busque todos os livros de no fico com lanamentoem
2011.Atividade 10Lista os trs livros com maior vendagem
cujolanamento anterior ao ano de 2010.Contando e AgrupandoOutro
recurso a contagem de itens em uma tabela. Nesteexemplo sabemos de
antemo que temos 20 registros,porm, a maioria dos sistemas tem
alguma forma deincluso de registros, o que altera de tempos em
tempos onmero de registros em uma tabela.Para calcularmos qualquer
coisa utilizamos funes deagrupamento no SQL.A primeira que veremos
a funo count().Atravs dela podemos contar o nmero de registros
emuma tabelaExemplo 17: Nmero de registros na tabela.select
count(*) from livros;Outras funes de agrupamento so:MAX: retorna o
registro com maior valor;MIN: retorna o registro com menor
valor;SUM: A soma dos itens;Exemplo 18: Uso do MAXselect MAX(preco)
from livros;Exemplo 19: Uso do MINselect MIN(preco) from
livros;Exemplo 20: Uso do AVERAGEselect SUM(vendas) from
livros;AgrupamentoSozinhas, as funes de agrupamento no so
muitoteis, porm, quando as utilizamos em conjunto comagrupamentos
podemos realizar consultas para informardados agregados.A clusula
group by usada para isto e sempre vem antesdo order by;Exemplo 21:
Nmero de livros por gneroselect genero, count(*) from livros group
bygenero;Exemplo 22: Preo mximo de um livro por gneroselect genero,
max(preco) from livros groupby genero;Atividade 11:Soma das vendas
por gneroAtividade 12:Observe os dados da tabela e tente
identificar queoutras consultas poderiam ser executadas sobre
estes
2. dados. Crie pelo menos uma consulta que no foirealizada nos
exemplos anteriores. ConcluindoVimos as principais clusulas do
comando Select.Exploraremos ainda mais este comando nas
prximasaulas. A partir de agora, usaremos select em todas asnossas
aulas.