Problema:
Você gostaria de limitar o número de linhas em um conjunto de resultados no MySQL.
Exemplo:
Nosso banco de dados tem uma tabela chamada
student com dados nas colunas id , first_name , last_name e age . | id | first_name | last_name | idade |
|---|---|---|---|
| 1 | Steven | Watson | 25 |
| 2 | Lisa | Anderson | 19 |
| 3 | Alice | Moleiro | 19 |
| 4 | Maria | Marrom | 25 |
| 5 | Lucy | Watson | 25 |
| 6 | Michael | Jackson | 22 |
Vamos selecionar os nomes completos e as idades dos alunos, mas limitar as linhas retornadas a três.
Solução:
SELECT first_name, last_name, age FROM student LIMIT 3;
Segue o resultado da consulta:
| id | first_name | last_name | idade |
|---|---|---|---|
| 1 | Steven | Watson | 25 |
| 2 | Lisa | Anderson | 19 |
| 3 | Alice | Moleiro | 19 |
Discussão:
A cláusula LIMIT limita o número de linhas no conjunto de resultados. Ele é usado na instrução SELECT, geralmente no final da instrução. (Mesmo ORDER BY deve ser listado antes de LIMIT.)
O único argumento necessário é o número de linhas a serem exibidas. Em nosso exemplo, LIMIT 3 produziu um conjunto de resultados contendo três linhas. A menos que você especifique o contrário com o argumento OFFSET, esta função sempre retornará o primeiro n linhas que atendem aos requisitos de consulta.
O argumento OFFSET opcional de LIMIT é colocado antes do argumento que indica o número de linhas retornadas. Indica a posição da primeira linha retornada por LIMIT (ou seja, '0' é a primeira linha, 1 é a segunda linha, etc.). O deslocamento e o número de linhas são separados por uma vírgula.
A consulta retorna os mesmos registros da consulta anterior porque o deslocamento é zero. (Zero é o valor de deslocamento padrão.)
SELECT first_name, last_name, age FROM student LIMIT 0, 3;
Nessas consultas, as linhas de resultado não são ordenadas. Se você quiser selecionar três linhas de um conjunto de resultados classificado, use ORDER BY:
SELECT first_name, last_name, age FROM student ORDER BY age DESC, last_name, first_name LIMIT 1,3;
Aqui, estamos primeiro ordenando as linhas por idade (decrescente), depois sobrenome e depois nome. Usamos o valor de deslocamento para iniciar na segunda linha retornada e limitamos os resultados a três linhas:
| first_name | last_name | idade |
|---|---|---|
| Lucy | Watson | 25 |
| Steven | Watson | 25 |
| Michael | Jackson | 22 |
Essa consulta primeiro classifica as linhas de acordo com a coluna de idade em ordem decrescente. Em seguida, classifica por
last_name e first_name em ordem ascendente. Se você olhar para a tabela, verá que os alunos mais velhos (Steven, Lucy, Mary) têm 25 anos. No entanto, Mary é omitida porque ela é a primeira linha e o deslocamento é 1 (ou seja, estamos começando com a segunda linha). Lucy agora é a primeira porque seu primeiro nome vem antes do de Steven. (Steven e Lucy têm o mesmo sobrenome, então sua ordem é determinada pelo primeiro nome.) Michael tem 22 anos, o que o torna o próximo aluno mais velho e o último das três fileiras retornadas.