Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle SQL commande par dans les problèmes de sous-requête !

dcw et Dems ont fourni des requêtes alternatives appropriées. Je voulais juste vous expliquer pourquoi votre requête ne se comporte pas comme vous l'espériez.

Si vous avez une requête qui inclut un ROWNUM et un ORDER BY, Oracle applique d'abord le ROWNUM, puis le ORDER BY. Donc la requête

SELECT *
  FROM emp
 WHERE rownum <= 5
 ORDER BY empno

obtient 5 lignes arbitraires à partir du EMP table et les trie-- presque certainement pas ce qui était prévu. Si vous souhaitez obtenir les "premières N" lignes à l'aide de ROWNUM, vous devez imbriquer la requête. Cette requête

SELECT *
  FROM (SELECT *
          FROM emp
         ORDER BY empno)
 WHERE rownum <= 5

trie les lignes de la table EMP et renvoie les 5 premières.