O TOP é 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.

Considere o seguinte cenário em que 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 email 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
Tabela 1. Estrutura da tabela aluno

Supondo que de todos os registros dessa tabela desejamos retornar apenas os três primeiros, utilizaremos em um SGBD que possua a cláusula TOP, a seguinte consulta:

SELECT
  TOP 3
  *
FROM
  aluno

Note acima que utilizamos a instrução TOP 3 para trazer apenas os três primeiros registros, conforme apresentado na Tabela 2.

id nome email 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
Tabela 2. Resultado da consulta utilizando a cláusula TOP 3

Sintaxe

SELECT
  TOP N
  [ coluna1, coluna2, ... | * ]
FROM
  [ tabela1, tabela2, ... ]

* Onde N é o número de linhas que serão retornadas.

Na pratica

Exemplo 1

Neste exemplo utilizaremos o TOP 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 código abaixo:

SELECT
  TOP 3
  *
FROM
  aluno
ORDER BY
  nome ASC

O resultado pode ser visto na Tabela 3.

id nome email 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
Tabela 3. Resultado da consulta utilizando ORDER BY nome

Observe que no resultado da consulta (Tabela 3) utilizando o ORDER BY exibimos o resultado ordenado por nome de forma ascendente (ASC).

Exemplo 2

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 4), responsável por armazenar todos os produtos da loja, e a tabela venda_produto (Tabela 5), 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
Tabela 4. Tabela produto

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
Tabela 5. Tabela venda_produto

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 TOP 3
   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

Observe que no trecho de código acima, na linha 1 pedimos para listar os três primeiros registros. Logo abaixo na linha 3 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 e, por fim nas linhas 10 e 11 ordenamos essa consulta pelo valor TOTAL, de forma decrescente, ou seja, do maior valor para o menor. O resultado pode ser visto na Tabela 6.

nome TOTAL
Notebook 7000.00
Monitor LG 19 450.00
Patinete 360.00
Tabela 6. Resultado da consulta pelos 3 produtos com maior rendimento

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: Subqueries