Principe de requête de pagination d'Oracle : 1. Interroger en utilisant les caractéristiques du champ rownum d'ORACLE ; 2. Interroger un nombre spécifié de N éléments de données 3. Supprimer M éléments de données d'un nombre spécifié de N éléments de résultats de requête ; En développement Web En passant M et N comme paramètres, vous pouvez obtenir des résultats paginés.
L'environnement d'exploitation de ce tutoriel : système Windows 10, version Oracle 11g, ordinateur Dell G3.
Principe de la pagination :
1. Utilisez les caractéristiques du champ rownum d'ORACLE pour interroger.
2. Interrogez les N premiers éléments de données
3. Obtenez M à N éléments de données à partir des résultats de la requête à l'étape 2
4. Dans le développement Web, transmettez M et N comme paramètres pour obtenir le résultat de la pagination.
Exemple : 20 à 30 enregistrements dans la table de requête, l'instruction SQL est la suivante.
select * from( select rownum as pageNo, A.* from tableName A where rownum <= 30) B where B.pageNo >=20;
Exemple :
--Comment obtenir les 5 personnes les mieux payées dans le tableau des employés ?
SELECT * FROM( SELECT * FROM emp ORDER BY sal DESC) WHERE Rownum<6
--Comment obtenir les informations de l'employé dont le salaire est classé 5ème dans le tableau des employés
SELECT * FROM( SELECT * FROM emp ORDER BY sal DESC) WHERE Rownum=5
--La requête de résultat ne trouve pas le contenu
--De même, ROWNUM>=5 ne parvient pas non plus à interroger les résultats après la 5ème place
--Ici Lorsqu'il s'agit de ROWNUM, il ne peut être qu'inférieur ou non supérieur ou égal à. Voici donc un obstacle important à la pagination des requêtes dans la base de données Oracle.
--Quant au principe, ROWNUM est une pseudo colonne qu'il faut ranger en partant de 1 à chaque fois. Donc ROWNUM>=n. Par exemple, ce n’est pas vrai si 1 est supérieur à n’importe quel n (nombre d’éléments). Il peut être trouvé avec ROWNUM=1. Parce que 1>=1 est valable. N=2,1>=2 n'est pas vrai. Par conséquent, seul le premier élément peut être vérifié pour être supérieur ou égal à. Plus inférieur ou égal à. C'est tout ce que je peux vérifier. Par conséquent, cette difficulté peut être considérée comme augmentant la difficulté et les obstacles de la requête de pagination.
--Méthode 1 La requête la plus simple
--Articles 5 à 10.
--Il n'y a qu'une seule couche d'imbrication et une sous-requête,
SELECT * FROM (SELECT ROWNUM rn ,e.* FROM emp e WHERE ROWNUM<=10) WHERE rn>=5;
--Ceci est en fait transformé à partir de la méthode suivante.
--Autrement dit, la nouvelle table obtenue par la sous-requête est à nouveau interrogée.
--L'étape clé est ROWNUM rn.
--Et n'oubliez pas e.*, sinon il n'y aura pas de données complètes.
SELECT * FROM (SELECT ROWNUM rn, e.* FROM emp e WHERE ROWNUM <= 10) table_1 WHERE table_1.rn>= 5;
--Ce qui précède n'est pas trié, ce qui suit est trié
--Parce qu'il doit d'abord être trié avant l'interrogation, plus la table est grande, plus l'efficacité est lente.
--Méthode 2
SELECT * FROM (SELECT ROWNUM rm ,e.* FROM emp e order by sal DESC ) WHERE rm>=5 AND rm<=10
--Ce qui suit est la méthode d'utilisation des fonctions analytiques
--Méthode 3
SELECT * FROM (SELECT emp.*, ROW_NUMBER () OVER (ORDER BY sal DESC) rank FROM emp) WHERE rank >=6 AND rank<=10;
--Mais lorsque nous avons réellement vérifié les résultats, nous avons constaté qu'ils étaient complètement différents ;
--Vérifié manuellement. Les résultats de la méthode des fonctions analytiques sont corrects. Je ne comprends pas.
--Quelqu'un peut-il l'expliquer ?
--Voici un
SELECT * FROM (SELECT e.*, ROWNUM AS rn from ( SELECT * FROM emp ORDER BY sal DESC) e )ee WHERE ee.rn>=5 AND ee.rn<=10
dénué de sens--Méthode 4 (requête de données massive, telle que Baidu, requête Tmall)
SELECT * FROM( SELECT e.* ,ROWNUM rn FROM ( SELECT * FROM emp ORDER BY sal DESC ) e WHERE ROWNUM<=10 )WHERE rn>=6;
--Étapes de décomposition
--La première étape :
SELECT * FROM emp ORDER BY sal DESC
--Non. 2 :
SELECT e .*,ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal DESC) e
--Étape 3 :
SELECT e .*,ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal DESC) e WHERE ROWNUM<=10
--Étape 4 :
SELECT * FROM( SELECT e .*,ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal DESC) e WHERE ROWNUM<=10) WHERE rn>=5
--Mauvaise supposition.
SELECT e .*,ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal DESC) e WHERE rn<=10
--Pour créer un alias, vous devez interroger la table de données,
--Les conditions de requête sont jugées par des conditions qui n'existent pas encore et échouent naturellement.
--Méthode 5, utilisation ennuyeuse et inactive
WITH ee AS ( SELECT e.*, ROWNUM rn FROM ( SELECT * FROM emp ORDER BY sal DESC )e ) SELECT ee.* FROM ee WHERE ee.rn>=5 AND ee.rn<=10
Tutoriel recommandé : "Tutoriel vidéo Oracle"
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!