Como usar LIMIT para selecionar registros do começo ou do fim de uma tabela no MySQL – Elias Praciano
Categories
Banco de dados Tutoriais

Como usar LIMIT para selecionar registros do começo ou do fim de uma tabela no MySQL

Como limitar os resultados de uma consulta no MySQL, usando a cláusula LIMIT para suprimir resultados desnecessários.

A cláusula LIMIT, usada em conjunto com a cláusula ORDER BY, permite limitar a exibição dos registros de uma tabela a um determinado número.
O recurso é muito útil para mim, que estou sempre mostrando exemplos de uso de vários outros recursos do MySQL — mas não posso encher esta página com informações inúteis para os leitores.
Capa do tutorial MySQL LIMIT
O leitor quer ver apenas como um determinado recurso funciona… não a tabela toda!
Além disto, o recurso é útil quando se deseja mostrar apenas as últimas alterações ocorridas em uma tabela de um banco de dados, como seria o caso de um sistema de logging.
Uma outra situação em que este recurso é usado: quando o desenvolvedor deseja paginar os resultados — ou seja, distribuir uma relação por várias páginas. Uma de cada vez. Um exemplo disto, são as páginas do resultado de busca do Google.

Como funciona a cláusula LIMIT no MySQL

O MySQL suporta o uso desta cláusula, que serve para informar ao servidor que ele só deve retornar uma parte do resultado pedido em uma consulta.
Os exemplos, que seguem, fazem uso da tabela CadCli, que pode ser encontrada aqui — mas você pode usar qualquer outra. Basta adequar os comandos à sua situação.
Para limitar a exibição dos resultados de uma query a 1 registro, use a cláusula LIMIT 1:

SELECT * FROM CadCli LIMIT 1;
+-------+-----------------+------------------------------+-----------+------------+----------+----------+
| idCli | nomeCli         | emailCli                     | cidadeCli | creditoCli | dtCadCli | dtNscCli |
+-------+-----------------+------------------------------+-----------+------------+----------+----------+
|     1 | Tana Mclaughlin | eget.tincidunt@magnisdis.net | Stekene   |      27768 | 07-06-14 | 11-02-09 |
+-------+-----------------+------------------------------+-----------+------------+----------+----------+
1 row in set (0.00 sec)

Aumente o valor de LIMIT, para obter mais resultados:

SELECT * FROM CadCli LIMIT 5;
+-------+-----------------+------------------------------------------+---------------+------------+----------+----------+
| idCli | nomeCli         | emailCli                                 | cidadeCli     | creditoCli | dtCadCli | dtNscCli |
+-------+-----------------+------------------------------------------+---------------+------------+----------+----------+
|     1 | Tana Mclaughlin | eget.tincidunt@magnisdis.net             | Stekene       |      27768 | 07-06-14 | 11-02-09 |
|     2 | Jakeem Klein    | mauris.eu@Nuncmaurissapien.com           | Lagos         |      17465 | 02-07-14 | 29-04-71 |
|     3 | Wylie Carroll   | convallis.in.cursus@libero.ca            | Lelystad      |      81512 | 19-09-14 | 13-08-98 |
|     4 | Colton Franklin | dui.lectus.rutrum@eusem.org              | Sesto Campano |      68180 | 13-04-15 | 27-07-77 |
|     5 | Amity Whitfield | risus.Quisque.libero@Praesenteudui.co.uk | Fauvillers    |      21975 | 10-07-14 | 01-02-82 |
+-------+-----------------+------------------------------------------+---------------+------------+----------+----------+
5 rows in set (0.00 sec)

Melhore o resultado filtrando
O valor de LIMIT não pode ser negativo.
Se você quiser, de alguma forma, inverter a ordem de exibição dos registros, use as cláusulas WHERE e ORDER BY para filtrar os seus registros:

SELECT idCli AS "Ordem",nomeCli AS "Cliente", creditoCli AS "Credito Disponível" FROM CadCli ORDER BY CreditoCli DESC LIMIT 5;

O comando, acima, pede a relação dos clientes ordenada pelo crédito disponível (creditoCli), em ordem descendente e limitado a 5 registros. O meu resultado foi o seguinte:

+-------+----------------+---------------------+
| Ordem | Cliente        | Credito Disponível  |
+-------+----------------+---------------------+
|    78 | Steven Stokes  |               84831 |
|    54 | Yvonne Wise    |               84531 |
|     8 | Ocean Greene   |               84520 |
|   100 | Kendall Morton |               83838 |
|    19 | Lydia Patton   |               83368 |
+-------+----------------+---------------------+
5 rows in set (0.00 sec)

Você deve usar sempre as cláusulas WHERE e ORDER BY, combinadas ao LIMIT, para obter resultados mais significativos para as suas necessidades.
É possível obter os mesmos resultados, acima, sem usar a cláusula LIMIT.
A vantagem de fazer uso do LIMIT é que o servidor vai retornar a informação pedida — o que estiver fora dos limites definidos em LIMIT não será enviado. Desta forma, o uso da rede e da sua largura de banda é muito mais eficiente com o uso do LIMIT.
Em um universo de um milhão de registros, se eu quisesse ver apenas quem tem o maior valor em créditos disponíveis, nesta tabela, eu posso usar o LIMIT, sem sobrecarregar a rede com tráfego desnecessário de dados:

SELECT * FROM CadCli ORDER BY CreditoCli DESC LIMIT 1;
+-------+---------------+-----------------------------+------------+------------+----------+----------+
| idCli | nomeCli       | emailCli                    | cidadeCli  | creditoCli | dtCadCli | dtNscCli |
+-------+---------------+-----------------------------+------------+------------+----------+----------+
|    78 | Steven Stokes | est.Nunc.laoreet@cursus.edu | Llandovery |      84831 | 17-12-14 | 18-07-75 |
+-------+---------------+-----------------------------+------------+------------+----------+----------+
1 row in set (0.00 sec)

Use o quadro de pesquisa, no canto superior da página para encontrar mais artigos, neste site, sobre o uso do LIMIT e/ou outras cláusulas MySQL.

By Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia.
Fã de séries, como "Rick and Morty" e "BoJack Horseman".
Me siga no Twitter e vamos trocar ideias!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.