Heim >Datenbank >Oracle >Was ist das Prinzip der Oracle-Paging-Abfrage?

Was ist das Prinzip der Oracle-Paging-Abfrage?

WBOY
WBOYOriginal
2022-01-25 16:59:315296Durchsuche

Das Paging-Abfrageprinzip von Oracle: 1. Abfrage unter Verwendung der Eigenschaften des Rownum-Felds von ORACLE; 2. Abfrage einer angegebenen Anzahl von N Datenelementen; 3. Entfernen von M Datenelementen aus einer angegebenen Anzahl von N Abfrageergebnissen; In der Webentwicklung können Sie paginierte Ergebnisse erhalten, indem Sie M und N als Parameter übergeben.

Was ist das Prinzip der Oracle-Paging-Abfrage?

Die Betriebsumgebung dieses Tutorials: Windows 10-System, Oracle 11g-Version, Dell G3-Computer.

Was ist das Prinzip der Oracle-Paging-Abfrage?

Prinzip der Paging-Funktion:

1. Verwenden Sie zur Abfrage die Eigenschaften des Rownum-Felds von ORACLE.

2. Fragen Sie die ersten N Daten ab

3. Erhalten Sie M bis N Daten aus den Abfrageergebnissen in Schritt 2

4. Übergeben Sie in der Webentwicklung M und N als Parameter, um das Paging-Ergebnis zu erhalten.

Beispiel: 20 bis 30 Datensätze in der Abfragetabelle, die SQL-Anweisung lautet wie folgt.

select *   from( 
 select   rownum  as  pageNo,  A.*   from    tableName     A   where   rownum   <=   30)  B  where B.pageNo >=20;

Beispiel:

--Wie bekomme ich die 5 bestbezahlten Personen in die Mitarbeitertabelle?

SELECT * FROM(
SELECT * FROM emp ORDER BY sal DESC)
WHERE Rownum<6

– So erhalten Sie die Informationen des Mitarbeiters, dessen Gehalt in der Mitarbeitertabelle auf Platz 5 steht.

SELECT * FROM(
SELECT * FROM emp ORDER BY sal DESC)
WHERE Rownum=5

– Die Ergebnisabfrage kann den Inhalt nicht finden.

– Ebenso schlägt ROWNUM>=5 bei der Abfrage der Ergebnisse fehl nach dem 5. Platz

--Hier Wenn es um ROWNUM geht, kann es nur kleiner oder nicht größer oder gleich sein. Dies ist also ein wichtiges Hindernis für Paging-Abfragen in Oracle-Datenbanken.

--Was das Prinzip betrifft, ist ROWNUM eine Pseudospalte, die jedes Mal beginnend bei 1 angeordnet werden muss. Also ROWNUM>=n. Dies gilt beispielsweise nicht, wenn 1 größer als n (Anzahl der Elemente) ist. Es kann mit ROWNUM=1 gefunden werden. Weil 1>=1 gilt. N=2,1>=2 ist nicht wahr. Daher kann nur das erste Element auf größer oder gleich überprüft werden. Plus kleiner oder gleich. Das ist alles, was ich überprüfen kann. Daher kann diese Schwierigkeit als eine Erhöhung der Schwierigkeit und der Hindernisse bei Paging-Abfragen angesehen werden.

--Methode 1 Die einfachste Abfrage

--Punkte 5 bis 10.

--Es gibt nur eine Verschachtelungsebene und eine Unterabfrage,

SELECT * FROM
(SELECT ROWNUM rn ,e.* FROM emp e WHERE ROWNUM<=10)
WHERE rn>=5;

--Dies wird tatsächlich aus der folgenden Methode umgewandelt.

--Das heißt, die durch die Unterabfrage erhaltene neue Tabelle wird erneut abgefragt.

--Der Schlüsselschritt ist ROWNUM rn.

--Und e.* nicht vergessen, sonst gibt es keine vollständigen Daten.

SELECT * FROM (SELECT ROWNUM rn, e.*
          FROM emp e
         WHERE ROWNUM <= 10) table_1
 WHERE table_1.rn>= 5;

--Das Obige ist nicht sortiert, das Folgende ist sortiert

--Da es vor der Abfrage zuerst sortiert werden muss, ist die Effizienz umso langsamer, je größer die Tabelle ist.

--Methode 2

SELECT * FROM
(SELECT ROWNUM rm ,e.* FROM emp e order by sal DESC )
WHERE rm>=5 AND rm<=10

--Das Folgende ist die Methode zur Verwendung analytischer Funktionen;

--Methode 3

SELECT * 
FROM (SELECT emp.*,
   ROW_NUMBER () OVER (ORDER BY sal DESC) rank 
    FROM emp)   
WHERE rank >=6 AND rank<=10;

--Aber als wir die Ergebnisse tatsächlich überprüften, stellten wir fest, dass sie völlig unterschiedlich waren.

--Manuell überprüft. Die Ergebnisse der analytischen Funktionenmethode sind korrekt. Verstehe es nicht.

--Kann mir das jemand erklären?

--Hier kommt eine bedeutungslose

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

--Methode 4 (Massendatenabfrage, wie Baidu, Tmall-Abfrage)

SELECT * FROM(
SELECT e.* ,ROWNUM rn
FROM (
SELECT *
FROM emp
ORDER BY sal DESC
) e
WHERE  ROWNUM<=10
)WHERE rn>=6;

--Zerlegungsschritte

--Der erste Schritt:

SELECT * FROM emp ORDER BY sal DESC

--Nein 2:

SELECT e .*,ROWNUM rn FROM
(SELECT * FROM emp ORDER BY sal DESC) e

– Schritt 3:

SELECT e .*,ROWNUM rn FROM
(SELECT * FROM emp ORDER BY sal DESC) e
WHERE ROWNUM<=10

– Schritt 4:

SELECT * FROM(
SELECT e .*,ROWNUM rn FROM
(SELECT * FROM emp ORDER BY sal DESC) e
WHERE ROWNUM<=10)
WHERE rn>=5

– Falsche Vermutung.

SELECT e .*,ROWNUM rn FROM
(SELECT * FROM emp ORDER BY sal DESC) e
WHERE rn<=10

– Um einen Alias ​​zu erstellen, müssen Sie die Datentabelle abfragen.

– Die Abfragebedingungen werden anhand von Bedingungen beurteilt, die noch nicht vorhanden sind, und schlagen natürlich fehl.

--Methode 5, langweilige und müßige Nutzung

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

Empfohlenes Tutorial: „Oracle Video Tutorial

Das obige ist der detaillierte Inhalt vonWas ist das Prinzip der Oracle-Paging-Abfrage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn