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.