Resumo : neste tutorial, você aprenderá como usar a LIMIT
cláusula MySQL para restringir o número de linhas retornadas por uma consulta.
Introdução à
cláusula LIMIT do MySQL
A LIMIT
cláusula é usada na SELECT
instrução para restringir o número de linhas a serem retornadas. A LIMIT
cláusula aceita um ou dois argumentos. Os valores de ambos os argumentos devem ser zero ou inteiros positivos .
O seguinte ilustra a LIMIT
sintaxe da cláusula com dois argumentos:
SELECT
select_list
FROM
table_name
LIMIT [offset,] row_count;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe:
- Especifica
offset
o deslocamento da primeira linha a ser retornada. Ooffset
da primeira linha é 0, não 1. - Especifica
row_count
o número máximo de linhas a serem retornadas.
A imagem a seguir ilustra a LIMIT
cláusula:
Quando você usa a LIMIT
cláusula com um argumento, o MySQL usará esse argumento para determinar o número máximo de linhas a serem retornadas da primeira linha do conjunto de resultados.
Portanto, essas duas cláusulas são equivalentes:
LIMIT row_count;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
E
LIMIT 0 , row_count;
Além da sintaxe acima, o MySQL fornece a seguinte LIMIT
sintaxe de cláusula alternativa:
LIMIT row_count OFFSET offset
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
As cláusulas LIMIT e ORDER BY
Por padrão, a SELECT
instrução retorna linhas em uma ordem não especificada. Quando você adiciona a LIMIT
cláusula à SELECT
instrução, as linhas retornadas são imprevisíveis.
Portanto, para garantir que a LIMIT
cláusula retorne uma saída esperada, você deve sempre usá-la com uma ORDER BY
cláusula como esta:
SELECT
select_list
FROM
table_name
ORDER BY
sort_expression
LIMIT offset, row_count;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A imagem a seguir ilustra a ordem de avaliação da LIMIT
cláusula no SELECT
enunciado:
Exemplos de cláusula LIMIT do MySQL
Usaremos a customers
tabela do banco de dados de exemplo para demonstração.
1) Usando MySQL LIMIT para obter as linhas mais altas ou mais baixas
Esta declaração usa a LIMIT
cláusula para obter os cinco principais clientes com maior crédito:
SELECT
customerNumber,
customerName,
creditLimit
FROM
customers
ORDER BY creditLimit DESC
LIMIT 5;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste exemplo:
- Primeiro, a
ORDER BY
cláusula classifica os clientes por créditos, do maior para o menor. - Então, a
LIMIT
cláusula retorna as primeiras 5 linhas.
Da mesma forma, este exemplo usa a LIMIT
cláusula para encontrar cinco clientes que tenham os créditos mais baixos:
SELECT
customerNumber,
customerName,
creditLimit
FROM
customers
ORDER BY creditLimit
LIMIT 5;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste exemplo:
- Primeiro, a
ORDER BY
cláusula classifica os clientes por créditos, do menor para o maior. - Então, a
LIMIT
cláusula retorna as primeiras 5 linhas.
Como existem mais de 5 clientes com créditos zero, o resultado da consulta acima pode levar a um resultado inconsistente.
Para corrigir esse problema, você precisa adicionar mais colunas à ORDER BY
cláusula para restringir a linha em uma ordem única:
SELECT
customerNumber,
customerName,
creditLimit
FROM
customers
ORDER BY
creditLimit,
customerNumber
LIMIT 5;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
2) Usando a cláusula MySQL LIMIT para paginação
Ao exibir dados na tela, muitas vezes você deseja dividir as linhas em páginas, onde cada página contém um número limitado de linhas, como 10 ou 20.
Para calcular o número de páginas, você divide o total de linhas pelo número de linhas por página. Para buscar linhas de uma página específica, você pode usar a LIMIT
cláusula.
Esta consulta usa a COUNT(*)
função agregada para obter o total de linhas da customers
tabela:
SELECT
COUNT(*)
FROM
customers;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
+----------+
| COUNT(*) |
+----------+
| 122 |
+----------+
1 row in set (0.00 sec)
Linguagem de código: JavaScript ( javascript )
Suponha que cada página tenha 10 linhas; para exibir 122 clientes, você tem 13 páginas. A última 13ª página contém apenas duas linhas.
Esta consulta usa a LIMIT
cláusula para obter linhas da página 1 que contém os primeiros 10 clientes classificados pelo nome do cliente:
SELECT
customerNumber,
customerName
FROM
customers
ORDER BY customerName
LIMIT 10;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Esta consulta usa a LIMIT
cláusula para obter as linhas da segunda página que incluem as linhas 11 – 20:
SELECT
customerNumber,
customerName
FROM
customers
ORDER BY customerName
LIMIT 10, 10;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Neste exemplo, a cláusula LIMIT 10, 10
retorna 10 linhas para as linhas 11 – 20.
3) Usando MySQL LIMIT para obter o enésimo valor mais alto ou mais baixo
Para obter o enésimo valor mais alto ou mais baixo, você usa a seguinte LIMIT
cláusula:
SELECT select_list
FROM table_name
ORDER BY sort_expression
LIMIT n-1, 1;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A cláusula LIMIT n-1, 1
retorna 1
linha começando em row n
.
Por exemplo, o seguinte encontra o cliente que tem o segundo maior crédito:
SELECT
customerName,
creditLimit
FROM
customers
ORDER BY
creditLimit DESC
LIMIT 1,1;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Vamos verificar o resultado. Esta consulta retorna todos os clientes classificados por créditos, do maior para o menor:
SELECT
customerName,
creditLimit
FROM
customers
ORDER BY
creditLimit DESC;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Como você pode ver claramente na saída, o resultado foi correto conforme o esperado.
Observe que esta técnica funciona quando não há dois clientes com os mesmos limites de crédito. Para obter um resultado mais preciso, você deve usar a DENSE_RANK()
função window .
Cláusulas LIMIT e DISTINCT do MySQL
Se você usar a LIMIT
cláusula com a DISTINCT
cláusula, o MySQL interromperá imediatamente a pesquisa quando encontrar o número de linhas exclusivas especificadas na LIMIT
cláusula.
O exemplo usa a LIMIT
cláusula com a DISTINCT
cláusula para retornar os primeiros cinco estados exclusivos da customers
tabela:
SELECT DISTINCT
state
FROM
customers
WHERE
state IS NOT NULL
LIMIT 5;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Resumo
- Use a
LIMIT
cláusula MySQL para restringir o número de linhas retornadas pelaSELECT
instrução.