SQL: Limit
LIMIT é uma cláusula SQL que especifica o número de linhas que devem ser retornadas no resultado de uma consulta.
LIMIT é uma cláusula SQL que especifica o número de linhas que devem ser retornadas no resultado de uma consulta.
Visão geral
A utilização dessa cláusula é muito comum entre os desenvolvedores, podendo inclusive trabalhar em conjunto a cláusula ORDER BY como opção para trazer o menor ou maior valor de uma determinada coluna, de acordo com o parâmetro da ordenação.
Para este exemplo considere o seguinte cenário:
Uma escola possui uma tabela chamada aluno Tabela 1, responsável por armazenar a informação de todos os alunos da instituição, contendo nome, email e a identificação da turma do aluno.
id | nome | Id_turma | |
1 | João Fernando | joao@gmail.com | 1 |
2 | Maria Carvalho | maria@gmail.com | 1 |
3 | Bruna dos Santos | bruna@gmail.com | 2 |
4 | Pedro da Silva | pedro@gmail.com | 2 |
5 | Tiago Pereira | tiago@gmail.com | 1 |
Para trazer no resultado da consulta os três primeiros alunos, começando do primeiro, podemos utilizar o trecho de código abaixo:
SELECT
*
FROM
alunos
LIMIT
0, 3
Nesta consulta solicitamos que apenas os três primeiros resultados fossem retornados através da cláusula LIMIT e, em seguida, informamos o número 0 que define o índice inicial, seguido do 3, que é o número de resultados que precisamos. Na linha 2 utilizamos o caractere asterisco (*) para solicitar que todas as colunas da tabela retornassem no resultado da consulta gerando o resultado na Tabela 2.
id | nome | Id_turma | |
1 | João Fernando | joao@gmail.com | 1 |
2 | Maria Carvalho | maria@gmail.com | 1 |
3 | Bruna dos Santos | bruna@gmail.com | 2 |
Sintaxe
SELECT
[ coluna1, coluna2, ... | * ]
FROM
[ tabela1 ]
LIMIT
valor
OFFSET
valor
ou
SELECT
[ coluna1, coluna2, ... | * ]
FROM
[ tabela1 ]
LIMIT
[índice inicial , limite ]
Na pratica
Exemplo 1
Para este exemplo, utilizaremos o LIMIT em conjunto com a cláusula ORDER BY para que os resultados retornados possam ser ordenados em ordem ascendente ou descendente, utilizando ASC ou DESC, conforme abaixo:
SELECT
*
FROM
alunos
ORDER BY
nome ASC
LIMIT
0, 3
id | nome | id_turma | |
3 | Bruna dos Santos | bruna@gmail.com | 2 |
1 | João Fernando | joao@gmail.com | 1 |
2 | Maria Carvalho | maria@gmail.com | 1 |
Exemplo 2
Para este exemplo utilizaremos o recurso OFFSET em conjunto com o LIMIT para informar registros a serem omitidos na resposta.
SELECT
*
FROM
alunos
ORDER BY
nome ASC
LIMIT
3
OFFSET
1
O resultado da query acima pode ser visto na Tabela 4.
id | nome | id_turma | |
1 | João Fernando | joao@gmail.com | 1 |
2 | Maria Carvalho | maria@gmail.com | 1 |
Observe que na resposta o resultado foi ordenado pelo nome de forma ascendente, utilizando a cláusula ORDER BY ASC, e que limitamos a consulta a três registros. Porém, o primeiro resultado foi omitido (verificar na Tabela 1), pois utilizamos o recurso OFFSET com valor 1 (omite um resultado).
Exemplo 3
Para um exemplo um pouco mais complexo, considere o seguinte cenário:
Uma empresa chamada Tem de Tudo possui duas tabelas principais, a tabela produto (Tabela 5), responsável por armazenar todos os produtos da loja, e a tabela venda_produto (Tabela 6), responsável por gerenciar a saída desses produtos.
Id | Nome | preco |
1 | Bola | 35.00 |
2 | Patinete | 120.00 |
3 | Carrinho | 15.00 |
4 | Skate | 296.00 |
5 | Notebook | 3500.00 |
6 | Monitor LG 19 | 450.00 |
7 | O Diário de Anne Frank | 45.00 |
8 | O dia do Curinga | 65.00 |
9 | O mundo de Sofia | 48.00 |
10 | Através do Espelho | 38.00 |
Id | Id_produto | data | valor |
1 | 1 | 2018-07-15 | 35.00 |
2 | 2 | 2018-07-15 | 120.00 |
3 | 2 | 2018-07-14 | 120.00 |
4 | 3 | 2018-07-15 | 15.00 |
5 | 7 | 2018-07-15 | 45.00 |
6 | 8 | 2018-07-15 | 65.00 |
7 | 8 | 2018-07-16 | 65.00 |
8 | 9 | 2018-07-16 | 48.00 |
9 | 5 | 2018-07-16 | 3500.00 |
10 | 5 | 2018-07-16 | 3500.00 |
11 | 6 | 2018-07-16 | 450.00 |
12 | 1 | 2018-07-15 | 35.00 |
13 | 2 | 2018-07-15 | 120.00 |
Suponhamos que a empresa Tem de tudo deseja saber quais os três produtos que tiveram o maior valor de receita. Para isso, podemos utilizar o fragmento de código abaixo:
SELECT
P.nome,
SUM(VN.valor) as TOTAL
FROM
produto P, venda_produto VN
WHERE
P.id = VN.id_produto
GROUP BY
P.id
ORDER BY
TOTAL DESC
LIMIT 0, 3
Observe que no trecho de código acima, na linha 1 pedimos para listar os três primeiros registros.
Na linha 2 pedimos para que o valor da coluna valor seja somada. Nas linhas 4 e 5 informamos que a consulta será realizada na tabela produto, nomeada de P, e na tabela venda_produto, nomeada VN.
Em seguida, nas linhas 6 e 7 informamos que a consulta terá como filtro o id da tabela produto ser o mesmo que na tabela venda_produto, realizando o vínculo entre elas.
Nas linhas 8 e 9 agrupamos o resultado por id do produto.
Já nas linhas 10 e 11 ordenamos essa consulta pelo valor TOTAL, de forma decrescente, ou seja, do maior valor para o menor.
E por fim, na linha 12 limitamos o retorno da consulta a três registros, começando do 0.
O resultado pode ser visto na Tabela 7.
Nome | TOTAL |
Notebook | 7000.00 |
Monitor LG 19 | 450.00 |
Patinete | 240.00 |
No exemplo acima utilizamos a função agregadora SUM, a cláusula GROUP BY e ORDER BY.
Saiba mais Veja a Série SQL nível Jedi: SubqueriesArtigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo