Sélectionner les premiers N rangées dans MS SQL, Oracle et DB2 [Permalink]
Thu May 28 20:45:45 CEST 2009
Comment faire les requêtes SQL qui ne retournent que les premiers n rangées?
Déjà il faut comprendre que les rangées ne sont pas stockées physiquement dans un ordre quelconque. Il est donc essentiel de spécifier un ORDER BY dans la requête. Cela dit, regardons comment faire un SELECT qui ne retourne que les premiers n résultats trouvés (dans tous ces exemples, n = 10):
SELECT TOP 10 NOM, DESCRIPTION FROM MATABLE ORDER BY NOM ASC
Il y a des fortes chances que cela marche sous Sybase aussi, mais je n'ai pas eu l'occasion de tester.
SELECT * FROM (SELECT NOM, DESCRIPTION FROM MATABLE ORDER BY NOM ASC) WHERE ROWNUM <=10
(On doit imbriquer la requête dans Oracle, car si on suivait directement la clause WHERE par la clause ORDER BY, sans parenthèses, la BDD prendra les premiers résultats, aléatoires, et ensuite les triera. Ce qui n'est pas ce qu'on veut faire.)
SELECT NOM, DESCRIPTION FROM MATABLE ORDER BY NOM FETCH FIRST 10 ROWS ONLY OPTIMIZE FOR 10 ROWS
Et voilà. C'est dommage qu'il n'y a pas de façon uniforme de faire ces requêtes, mais ce n'est pas trop compliqué une fois qu'on connaît les variantes.
Trackback for this entry
http://java.craven.fr/blog/java/SQL/?permalink=Selectionner-les-premiers-N-rangees-dans-MS-SQL-Oracle-et-DB2.html&tb=y