Vamos dar uns toques em queries SQL? IV
Por Pedro Gaspar para o PPLWARE Depois de nas ultimas duas semanas termos trabalhado com o WHERE esta na hora de avançarmos para mais algumas funções de SQL, esta semana vamos aprender a ordenar e limitar as nossas pesquisas.
Para apresentar alguns exemplos, utilizei a tabela tbl_pplware (com algumas alterações desde a semana passada) com os seguintes dados:
Vamos começar pela ordenação de dados. A ordenação de dados e muitas vezes necessária na listagem, quando queremos ordenar os dados por ordem alfabética ou numérica, para fazer isso em SQL usamos a função ORDER
Sintaxe de utilização
SELECT nome_coluna(s) FROM nome_tabela ORDER BY nome_coluna [ASC/DESC] [, nome_coluna2 [ASC/DESC]] |
Alguns exemplos práticos de ordenação:
EXEMPLO 1
Objectivo: Listar ordenadamente o nome de todas as pessoas na tabela
Query:
SELECT nome FROM`tbl_ppware` ORDER BY nome |
Resultado:
EXEMPLO 2
Neste exemplo vou utilizar o order e o where na mesma operação.
Objectivo: Apresentar o nome, cor de cabelo e nascimento de todas as pessoas que tenho o cabelo castanho, ordenando os resultados pelo ano de nascimento de forma decrescente
Query:
SELECT nome, cor_cabelo, nascimento FROM `tbl_ppware` WHERE cor_cabelo = 'castanho' ORDER BY nascimento DESC |
Resultado:
Podemos ordenar mais que uma coluna de uma vez
EXEMPLO 3
Objectivo: Apresentar nome, cor de cabelo e morada de todas as pessoas ordenando os resultados primeiro por cor de cabelo de forma crescente e de seguida ordenar por morada de forma decrescente
Query:
SELECT nome, cor_cabelo, morada FROM `tbl_ppware` ORDER BY cor_cabelo ASC , morada DESC |
Agora que o ORDER esta treinado, vamos passar ao LIMIT
O LIMIT serve para limitar os resultados que são apresentados, com o LIMIT podemos tanto limitar a apresentar só os primeiros resultados de uma query, escolher um intervalo de resultados do meio da listagem (isto e muito util para fazer paginaçoes)
O LIMIT por norma e a ultima função utilizada numa query, e pode ser utilizada em conjunto com outra qualquer.
Sintaxe de utilização
SELECT nome_coluna(s) FROM nome_tabela LIMIT inicio, fim |
Mas melhor que falar disso e mesmo passar a pratica e mostrar alguns exemplos
EXEMPLO 4
Vamos começar pelo exemplo mais simples
Objectivo: Mostrar o nome das tres primeiras pessoas da lista
Query:
SELECT nome FROM `tbl_ppware` LIMIT 3 |
Resultado
EXEMPLO 5
Objectivo: Apresentar o nome e o nascimento das pessoas, ordenando essa lista pelo nascimento e apresentar apenas do registo 3 ao 5
Query:
SELECT nome, nascimento FROM `tbl_ppware` ORDER BY nascimento LIMIT 3 , 5 |
Resultado:
Espero que tenham gostado de mais um artigo sobre SQL, para a semana há mais
Artigos relacionados
Este artigo tem mais de um ano
Bom tutorial! Apenas deixo uma pequena achega.
Na clausula ORDER BY, também se pode ordenar pela posição do campo no SELECT.
O exemplo 5 ficaria:
SELECT nome, nascimento
FROM `tbl_ppware`
ORDER BY 2
Keep up the good work 😉
Sim, é outra alternativa.
Thanks
Como disse no artigo anterior a linguagem SQL permite-nos usar varias maneiras para chegar ao meu resulgado, agradeço que vão metendo outras alternativas para as podermos discutir, esta por acaso não conhecia… estamos sempre a aprender, thanks 🙂
Apesar de também não conhecer este formato, não o recomendo. Quancomeçamos a precisar de criar queris mais complexas que envolvem select’s dentro de select’s de certeza que se torna mais confuso.
Lá está, isso vai depender da complexidade da query.
Não se deve usar a mesma fórmula para tudo.
Senão, fazia-se (quase) sempre switch em vez de ifs nas linguagens de programação, e não é isso que acontece.
Apenas complementei para se um dia virem isso em algum código não estranharem.
espero q n sejam os numeros de telefone verdadeiros 😮
LOL…ERA ENGRAÇADO! 😉 😀
Se assim fosse gostaria de comprar o número do Pedro Gaspar.
desconhecia o limit. pode-se dizer que o limit e a funcionalidade TOP mais avançada correcto?
Boas, desconhecia essa unção TOP, mas pelo que estive a ler, sim, o TOP e uma forma do LIMIT 🙂
PS: se arranjares ai uma query com top ate agradecia para testar, estive a tentar usar com mysql e deu-me erro.. 😛
Eu uso o TOP em SQL Server, não sei se é extensível a todas as BD’s.
O Top selecciona as n primeiras linhas de uma query.
Como exemplo podemos ter:
SELECT TOP 5 nome, nascimento
FROM `tbl_ppware`
ou mesmo:
SELECT TOP 5 *
FROM `tbl_ppware`
E o resultado serão os primeiros 5 registos.
Dou grande uso a esta funcionalidade quando preciso de ver que tipo de valores são colocados em certas tabelas e para não receber muitas das vezes milhares de registos é ideal.
O uso de ‘TOP’ é exclusivo do Sybase e seus derivados (MS Access e MS SQL Server). o standard SQL (standard e SQL na mesma frase é quase uma contradição) é o ‘LIMIT’.
MySQL não suporta a clausula TOP.
Surgiu-me agora aqui uma dúvida, gostaria que esclarecessem, o que é o domínio de uma relação e o domínio de um atributo?
e porque são importantes?
Quanto a alguns dos comandos e considerando o oracle como banco de dados, tenho a dizer o seguinte:
-> o comando LIMIT não é suportado em oracle
-> o comando TOP não é suportado em oracle
Como fazer então??? Estes dois comandos podem facilmente ser substituidos pelo ROWNUM:
–exemplo simples do comando LIMIT em oracle (com e sem betwen)
SELECT *
FROM tabela
WHERE rownum BETWEN 10 AND 20
OR (rownum >= 10 AND rownum == 10 AND campo1 == 1
)
WHERE rownum < 5
ORDER BY total DESC, campo1 ASC, campo2 ASC;
Não sei se já se explicou aqui como se encadeiam querys, daí que quis complicar e mostrar algum exemplo um bocadinho mais complexo para este nível. Mas enfim, nada de chegar a uma folha A4 totalmente preenchida! lol
Para os iniciados: http://www.w3schools.com/sql/default.asp
Tá tudo "escarrapachadinho"!! lol
Provavelmente a query foi filtrada pelo wordpress, considerando que era um ataque via sql-injection… fica para a próxima!
Segundo a wikipedia ‘LIMIT’ é suportado pela Oracle desde a versão 8i: http://en.wikipedia.org/wiki/Select_(SQL).
Continuem este bom trabalho.
tas lá
Pedro Pinto, acredito que você escreveu a sintaxe para o LIMIT o mais compreensível possível, mas não está correto.
Isso é errado: LIMIT inicio, fim
O correto seria: LIMIT [registo_inicial,] número_de_registo
Assim, o primeiro parâmetro seria opcional. Portanto, quando for definido apenas um parâmetro, este é o segundo.
O artigo explica claramente, é verdade mas a sintaxe coloca em dúvida.
Parabéns pela matéria
Olá, venho alertar-vos para uma pequena gralha no último exemplo, pois a tabela apresentada não corresponde à query referida. 😉
Ia mesmo agora referir essa mesma gralha =) Já estava a estranhar ninguém a ter apontado!