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
Mike
fonte
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
Derek Slager
fonte
44

Depende do seu RDBMS

MS SQL Server

SELECT TOP 10 ...

MySQL

SELECT ... LIMIT 10

Sybase

SET ROWCOUNT 10
SELECT ...

Etc.

martin clayton
fonte
7
A sintaxe ... LIMIT 10 também é usada por sqlite3
dat
24

No MySQL:

SELECT * FROM `table` LIMIT 0, 10
Ben
fonte
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.

jarlh
fonte
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)

Brabster
fonte
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 .

Wallyk
fonte
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

Sayannayas
fonte
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
AvatarKava
fonte
1

Firebird:

SELECT FIRST 10 * FROM MYTABLE
ne2dmar
fonte
1

PostgreSQL:

SELECT ... LIMIT [num] OFFSET [num];
Henry
fonte
0
SELECT  Top(12) Month, Year, Code FROM TempEmp 
ORDER BY  Year DESC,month DESC
JIYAUL MUSTAPHA
fonte