Dans Oracle, vous pouvez utiliser la clause Where avec Rownum pour interroger les dix premiers enregistrements. La clause Where est utilisée pour limiter les conditions de la requête, et Rownum est utilisée pour limiter le nombre total de lignes renvoyées pour la requête. la syntaxe est "select * from table name which rownum < ;=10".
L'environnement d'exploitation de ce tutoriel : système Windows 10, version Oracle 11g, ordinateur Dell G3.
Comment interroger les 10 premiers enregistrements de la table dans Oracle ?
select * from test where rownum <=10
Ce qui suit est une introduction à rownum
L'utilisation de Rownum et row_number() over()
ROWNUM est une pseudo colonne fournie par Oracle à partir de 8. Elle numérote les résultats de SQL, toujours à partir de 1, ce qui est courant Le but est d'utiliser la sortie de pagination.
Par exemple
SELECT * FROM torderdetail a WHERE ROWNUM <= 10
Cette instruction est de générer les 10 premiers enregistrements. Son objectif ici est similaire à celui du serveur SQL, mais il faut dire que rownum est plus puissant pour la sortie de. la plage de numéros spécifiée
SELECT * FROM (SELECT a.*, ROWNUM rn FROM torderdetail a) WHERE rn >= 10 AND rn <= 20
Cette instruction consiste à afficher les 10e au 20e enregistrements. La raison pour laquelle rownum rn est utilisé ici est de convertir rownum en une instance, car rownum lui-même ne peut utiliser que la méthode de comparaison <= et ne peut que être converti en une colonne réelle, de sorte que la comparaison de >= soit effectuée.
Dans les applications pratiques, il est souvent nécessaire de récupérer les enregistrements les plus récents, ce qui nécessite d'abord de trier les enregistrements, puis de récupérer le rownum <=
Généralement courant
SELECT * FROM (SELECT a.* FROM torderdetail a ORDER BY order_date DESC) WHERE ROWNUM <= 10
Il y a eu une discussion dans le CSDN sur la récupération du rownum Pour le 10 enregistrements récents, quelqu'un a donné une telle déclaration
SELECT a.* FROM torderdetail a WHERE ROWNUM <= 10 ORDER BY order_date DESC
La raison pour laquelle une telle déclaration apparaît est principalement pour des raisons d'efficacité. L'instruction précédente consiste à analyser la table entière, puis à trier, puis à récupérer 10 enregistrements, cette dernière déclaration le fera. ne parcourra pas la table entière, mais ne récupérera que 10 enregistrements. Évidemment, l'efficacité de cette dernière instruction sera beaucoup plus élevée.
Alors pourquoi y a-t-il un litige ? Le litige réside dans l'ordre d'exécution. Faut-il d'abord effectuer un tri pour obtenir 10 enregistrements, ou doit-on obtenir 10 enregistrements puis trier ? Les résultats de la suppression des deux commandes sont complètement opposés. Le tri d'abord, puis la prise de 10 enregistrements prendront les 10 enregistrements les plus récents, et la prise de 10 enregistrements d'abord, puis le tri supprimera les 10 premiers enregistrements. Pour cette instruction, on pense généralement que l'ordre d'exécution consiste d'abord à récupérer 10 enregistrements, puis à les trier. Cette affirmation devrait donc être une erreur. Mais ce n'est pas réellement le cas. L'ordre d'exécution de cette instruction est lié au champ de commande par. Si le champ de votre commande par est pk, il est trié en premier, puis 10 éléments sont pris (plus rapidement que la première instruction). ), et le champ de tri Lorsqu'il ne s'agit pas de PK, 10 éléments sont d'abord pris puis triés. À ce moment, le résultat est différent des exigences, donc la deuxième façon d'écrire doit garantir que le résultat est correct lorsque le champ de tri est saisi. est la clé primaire.
La fonction d'analyse Row_number() over() est fournie depuis 9I. Son objectif général est similaire à rownum.
La méthode d'écriture générale row_number() over(order by order_date desc) génère le même ordre que l'instruction rownum, et l'efficacité est la même (pour l'instruction rownum qui a également order by), donc dans ce cas les deux utilisations sont les mêmes.
Pour prendre les 10 derniers enregistrements après le regroupement, rownum ne peut pas y parvenir pour le moment, seul row_number peut y parvenir. Row_number() over (partition en regroupant l'ordre des champs par champ de tri) peut réaliser la numérotation de regroupement, par exemple pour obtenir le. 10 derniers enregistrements de commande de chaque jour au cours du mois dernier
SELECT * FROM (SELECT a.*, ROW_NUMBER () OVER (PARTITION BY TRUNC (order_date) ORDER BY order_date DESC) rn FROM torderdetail a) WHERE rn <= 10
Une utilisation alternative de Rownum Parfois, nous rencontrerons cette demande et exigerons la sortie de tous les jours du mois. Beaucoup de gens seront ennuyés car il n'y a pas de tel tableau. la base de données. Comment afficher tous les jours d'un mois ? Utilisez rownum pour le résoudre :
SELECT TRUNC (SYSDATE, 'MM') + ROWNUM - 1 FROM DUAL CONNECT BY ROWNUM <= TO_NUMBER (TO_CHAR (LAST_DAY (SYSDATE), 'dd'))
Tutoriel recommandé : "Oracle Video Tutorial"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!