Expertise Java & J2EE

Astuces et conseils pour le programmeur raffiné

septembre 2010
lun. mar. mer. jeu. ven. sam. dim.
  12345
6789101112
13141516171819
20212223242526
27282930   
       
<  août sept. oct.  >
Google
 
À propos:

Conseils et opinions sur la programmation par un ingénieur Américain en France.

Me contacter


Voir aussi:

Mon blog personnel

GetJava Download Button

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):

MS SQL Server

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.

Oracle

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.)

DB2

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.

   Trackbacks [0]

Powered By blojsom
XML  RSS  RDF