Vamos dar uns toques em queries SQL? IV

22 Comentários

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.

sql_00

Para apresentar alguns exemplos, utilizei a tabela tbl_pplware (com algumas alterações desde a semana passada) com os seguintes dados:
sql_01

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:

sql_1

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:

sql_2 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


Resultado:

sql_3

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

sql_4

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:

sql_05

Espero que tenham gostado de mais um artigo sobre SQL, para a semana há mais

Artigos relacionados

Partilhar:
Tags:

Comentários

22

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de Paraoh
    Paraoh

    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 😉

    1. Avatar de Pedro Pinto

      Sim, é outra alternativa.

      Thanks

    2. Avatar de Pedro Gaspar
      Pedro Gaspar

      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 🙂

    3. Avatar de Carlos Rente
      Carlos Rente

      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.

      1. Avatar de Paraoh
        Paraoh

        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.

  2. Avatar de eu mesmo
    eu mesmo

    espero q n sejam os numeros de telefone verdadeiros 😮

    1. Avatar de NOKIA 6300

      LOL…ERA ENGRAÇADO! 😉 😀

      1. Avatar de Cromos do Cosmos

        Se assim fosse gostaria de comprar o número do Pedro Gaspar.

  3. Avatar de rente
    rente

    desconhecia o limit. pode-se dizer que o limit e a funcionalidade TOP mais avançada correcto?

    1. Avatar de Pedro Gaspar
      Pedro Gaspar

      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.. 😛

      1. Avatar de Carlos Rente
        Carlos Rente

        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.

        1. Avatar de Carlos Correia

          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’.

    2. Avatar de Paraoh
      Paraoh

      MySQL não suporta a clausula TOP.

  4. Avatar de Uma dúvida
    Uma dúvida

    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?

  5. Avatar de Ruben
    Ruben

    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

    1. Avatar de Ruben
      Ruben

      Provavelmente a query foi filtrada pelo wordpress, considerando que era um ataque via sql-injection… fica para a próxima!

    2. Avatar de Carlos Correia

      Segundo a wikipedia ‘LIMIT’ é suportado pela Oracle desde a versão 8i: http://en.wikipedia.org/wiki/Select_(SQL).

  6. Avatar de FXX
    FXX

    Continuem este bom trabalho.

  7. Avatar de Trambulhao
    Trambulhao

    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

  8. Avatar de Bruno
    Bruno

    Olá, venho alertar-vos para uma pequena gralha no último exemplo, pois a tabela apresentada não corresponde à query referida. 😉

  9. Avatar de Daniel
    Daniel

    Ia mesmo agora referir essa mesma gralha =) Já estava a estranhar ninguém a ter apontado!