terça-feira, 11 de janeiro de 2011

Como limitar o número de registros retornados em uma consulta SQL

Tags: SQL, Ansi SQL, TOP, LIMIT, ROWNUM, Oracle, SQL Server

Não existe uma instrução SQL padronizada para limitar o número de registros retornados em uma consulta, ou seja, cada fornecedor implementa essa funcionalidade do seu jeito.

Veja um resumo de como fazer isso para alguns fabricantes:


DB2 -- select * from table fetch first 10 rows only 
Informix, InterBase/Firebird, SKIP  -- select first 10 * from table 
Microsoft SQL Server and Access -- select top 10 * from table 
MySQL, PostgreSQL, SQLite, HSQL/H2 -- select * from table limit 10 
Oracle -- select * from table where rownum <= 10




Referências:

http://stackoverflow.com/questions/595123/is-there-an-ansi-sql-alternative-to-the-mysql-limit-keyword
http://www.macoratti.net/d250102.htm
http://www.dougboude.com/blog/1/2006/06/Equivalent-of-SQL-TOP-X-in-Oracle.cfm

Um comentário:

  1. http://www.dbforums.com/oracle/1214188-limit-clause-oracle-sql.html

    Se a query tiver group by ou order by tem que colocar o rownum por fora:
    SELECT a, b, c
    FROM
    ( SELECT a, b, c, ROWNUM rn
    FROM
    ( SELECT a, b, c FROM RECORD
    WHERE AVAIL='Y"
    ORDER BY DATE DESC
    )
    WHERE ROWNUM <= 25
    )
    WHERE rn >= 21;

    ResponderExcluir