Limitando o SELECT do SQL em diferentes Bancos de Dados

2

Posted by flaviosilveira | Posted in Banco de Dados, Programação SQL | Posted on 27-02-2009

Olá pessoal…

Atualmente tenho tido o privilégio de trabalhar com vários data bases, e com isso está dando para ver as diferenças de sintaxe, performance, ferramentas e demais coisas de um para outro.

Tenho mexido com Microsoft SQL, Postgres e Oracle.

Uma coisa que me chamou a atenção foi a maneira de limitar a consulta em cada um deles. Tenho feito bastante consultas limitadas pois ainda estou conhecendo a base de dados da empresa e não sei ao certo quantos registros tem certas tabelas. Para evitar que a coisa caia ou trave, faço consultas limitadas.

Repare as diferenças de um banco para outro abaixo:

SELECT * FROM tabela LIMIT 20


Essa é a sintaxe para o postgres, que acho que deve ser a mais conhecida por ser software livre e etc.
Basta adicionar o parâmetro LIMIT e passar o valor de máximo de registros que você quer.

SELECT TOP 20 * FROM tabela

Essa é a maneira como o Microsoft limita sua consulta.
Você adiciona o parâmetro TOP passando o valor do máximo de registros que você quer. Isso deve vir logo após o SELECT.

SELECT * FROM tabela WHERE ROWNUM < 20

E por último o Oracle.
Você deve usar o parâmetro ROWNUM junto a um operador (<, >, <=, >=, =) e em seguida o valor máximo de registros que você quer para sua consulta.
Traduzindo este exemplo acima ficaria mais ou menos assim:
Selecione tudo da tabela chamada ‘tabela’ onde o número de tuplas seja menor que 20

Por hoje é isso ai rapaziada. Valeu !

Share and Enjoy:
  • Print
  • Digg
  • Facebook
  • Google Bookmarks
  • email
  • LinkedIn
  • PDF
  • Twitter

Comments (2)

Bacana cara, uma coisa que me ferrou bastante quando comecei a mexer em multíplos DBs, foi não só a forma que tu define o LIMIT, mas também a maneira que tu define o INIT, se tu quiser consultar a partir de um determinado registro.

No MySQL usa-se o LIMIT inicio, limite, já no PGSQL fica OFFSET inicio LIMIT limite.

O DB2 então nem se fala, é uma confusão sem fim. Pra tu ter uma idéia, se tu quiser consultar a partir da primeira linha:
FETCH FIRST limite ROWS ONLY.

Enfim, cada banco tem suas particularidades. Uma pena, poderiam todos seguir uma padrão, facilitaria um bocado.

Apenas quero comentar que, no Oracle, este modo de limitar o número de linhas de um select funciona muito bem, porém em casos nos quais se deseja realizar um select randômico, este comando faz com que a seleção randômica se limite às 20 primeiras linhas (no caso do exemplo acima), ou seja, as demais linhas não serão incluídas no sorteio do select randômico. Para se solucionar isto basta utilizar o seguinte comando:

SELECT * FROM (SELECT * FROM TABELA ORDER BY DBMS_RANDOM.VALUE) WHERE ROWNUM < 20

em que a parte entre parênteses seleciona a tabela por completo ordenando randomicamente, e a parte fora dos parênteses seleciona as 20 primeiras linhas desta seleção completa. Desta forma o sorteio da seleção randômica se aplica a toda a tabela, não apenas às 20 primeiras linhas.

Post a comment