2009-05-17 8 views

Répondre

42

Il serait utile si vous spécifiez quelle base de données que vous ciblez. Différentes bases de données ont une syntaxe différente et techniques pour y parvenir:

Par exemple, dans Oracle, vous pouvez ahieve cela en mettant condition sur RowNum (select ... from ... where ... rownum < 11 -> entraînerait la sortie 10 premiers enregistrements)

En MySQL vous pouvez utiliser vous peut utiliser la clause limit.

Microsoft SQL Server =>SELECT TOP 10 column FROM table

PostgreSQL et MySQL =>SELECT column FROM table LIMIT 10

Oracle =>select * from (SELECT column FROM table) WHERE ROWNUM <= 10 (grâce à STILI)

Sybase =>SET rowcount 10 SELECT column FROM table

Firebird =>SELECT FIRST 10 column FROM table

REMARQUE: ORM outils modernes tels que Hibernate donnent API de haut niveau (requête, restriction, interfaces Condition) qui font abstraction de la logique de lignes haut n basé sur le dialecte que vous choisissez.

+1

Ingres et informix (SQL 92 je crois) SELECT FIRST 10 colonne à partir de la table – corlettk

+0

Yup ...SELECT FIRST 10 est la norme, apparemment. Ref: http://www.hamslab.com/~man2/sql/SQL98/index.html#sql92 – corlettk

+1

Désolé, mais la solution Oracle ne fonctionne pas. Rownum a besoin de SQL imbriqué pour fonctionner, sinon il ne gérera aucune autre forme de commande que l'exemple trivial sans clause d'ordre. – stili

6

Je le connais avec MySQL mais je ne sais pas si c'est du SQL standard: terminez-vous Requête avec 'limite X', X = n. des lignes que vous voulez obtenir.

Exemple:

SELECT NAME FROM EMPLOYEES ORDER BY SALARY DESC LIMIT 10;

+0

+1. Je suspecte LIMIT est SQL standard. En tout cas, cela fonctionne aussi avec PostgreSQL. –

+1

La limite n'est pas standard. MSSQL ne l'a pas. –

+2

LIMIT n'est pas standard, bien qu'il soit assez répandu. La norme SQL: 2008, pour une raison ou une autre, est allée avec la méthode DB2 de FETCH FIRST, bien que très peu d'autres produits implémentent cela .... Voir http://troels.arvin.dk/db/rdbms/#select-limit pour plus de détails . – kquinn

10

Pour Oracle, la solution suggérée et acceptée est incorrecte. Essayez d'utiliser une clause de commande, et les résultats seront imprévisibles. Le code SQL devra être imbriqué pour accomplir cela dans Oracle.

select name, price 
    from (
    select name, price, row_number() over (order by price) r 
     from items 
) 
where r between 1 and 5; 

L'exemple ci-dessus a été emprunté à http://www.adp-gmbh.ch/ora/sql/examples/first_rows.html qui a une bonne discussion sur ce sujet.

+0

Merci stili pour faire remarquer –

+0

Lorsque vous avez besoin du premier N selon un ordre particulier, considérez un index sur la colonne orderby (par exemple "prix" dans cet exemple) - l'optimiseur pourrait trouver moins cher de lire l'index dans l'ordre du prix , donnant ainsi les N premières lignes plus rapidement sans scanner toute la table. Sans l'index, le db doit lire toutes les lignes de la table avant de pouvoir dire définitivement qu'il a trouvé les N rangées supérieures. –

-1

Pour Oracle, vous pouvez essayer cette

select /*+ FIRST_ROWS(10) */ * from table; 
Questions connexes