SQL - selecionar apenas as primeiras 10 linhas?


124

Como seleciono apenas os primeiros 10 resultados de uma consulta?

Eu gostaria de exibir apenas os primeiros 10 resultados da seguinte consulta:

SELECT a.names,
         COUNT(b.post_title) AS num
    FROM wp_celebnames a
    JOIN wp_posts b ON INSTR(b.post_title, a.names) > 0
    WHERE b.post_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
GROUP BY a.names
ORDER BY num DESC

3
Mencione a base de dados (e a versão).
Vikas Goel

2
Deve ser a nova resposta, stackoverflow.com/a/36476971/124486
Evan Carroll

Experimente também o TOP 10
Prisioneiro ZERO

Respostas:


173

No servidor SQL, use:

select top 10 ...

por exemplo

select top 100 * from myTable
select top 100 colA, colB from myTable

No MySQL, use:

select ... order by num desc limit 10

44

Depende do seu RDBMS

MS SQL Server

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

Etc.


7
A sintaxe ... LIMIT 10 também é usada por sqlite3
dat

24

No MySQL:

SELECT * FROM `table` LIMIT 0, 10

1
Qual é a diferença entre o limite 0, 10 e o limite 10? E por que o limite de 10, 20 não me dá 10 linhas entre a 10ª e a 20ª linhas? EDIT: Oh, então o limite de 10, 20 significa dar-me 20 linhas após a 10ª linha. Se eu quiser linhas entre 10 e 20, tenho que fazer o limite de 10, 10. Obrigado!
AbdurRehman Khan

21

A resposta ANSI SQL é FETCH FIRST.

SELECT a.names,
         COUNT(b.post_title) AS num
    FROM wp_celebnames a
    JOIN wp_posts b ON INSTR(b.post_title, a.names) > 0
    WHERE b.post_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
GROUP BY a.names
ORDER BY num DESC
FETCH FIRST 10 ROWS ONLY

Se você quiser que laços sejam incluídos, faça isso FETCH FIRST 10 ROWS WITH TIES.

Para pular um determinado número de linhas, use OFFSET, por exemplo

...
ORDER BY num DESC
OFFSET 20
FETCH FIRST 10 ROWS ONLY

Irá pular as primeiras 20 linhas e, em seguida, buscar 10 linhas.

Suportado por versões mais recentes de Oracle, PostgreSQL , MS SQL Server, Mimer SQL e DB2 etc.


20

No SQL padrão, você pode usar:

... FETCH FIRST 10 ROWS ONLY

Isso é compatível com DB2, PostgreSQL e Oracle 12.1 (e posterior)


para PostgreSQL também
ralf.w.

18

Oráculo

WHERE ROWNUM <= 10  and whatever_else ;

ROWNUMé uma variável mágica que contém o número de seqüência de cada linha 1 .. n .


1
Isto está errado. "rownum" buscará as 'n' linhas superiores da tabela. Não irá filtrar da condição "qualquer outra coisa"!
Vikas Goel

stackoverflow.com/questions/874082/… Siga a resposta de stili para banco de dados relacionado a Oracle
Vikas Goel

2
SELECT *  
  FROM (SELECT ROW_NUMBER () OVER (ORDER BY user_id) user_row_no, a.* FROM temp_emp a)  
 WHERE user_row_no > 1 and user_row_no <11  

Isso funcionou para mim. Se eu puder, tenho alguns dbscripts úteis que você pode consultar

Dbscripts úteis


2

O que você está procurando é uma cláusula LIMIT.

SELECT a.names,
         COUNT(b.post_title) AS num
    FROM wp_celebnames a
    JOIN wp_posts b ON INSTR(b.post_title, a.names) > 0
    WHERE b.post_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)
GROUP BY a.names
ORDER BY num DESC
   LIMIT 10


1

PostgreSQL:

SELECT ... LIMIT [num] OFFSET [num];


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.