沃梦达 / IT编程 / 数据库 / 正文

Oracle分页查询的实例详解

让我们开始讲解“Oracle分页查询的实例详解”的完整攻略。

让我们开始讲解“Oracle分页查询的实例详解”的完整攻略。

标题

概述

在传统的查询中,我们通常使用 SELECT 语句来查询符合条件的记录,这时候通常会出现数据量过大的情况,因此我们需要对查询结果进行分页展示。在 Oracle 数据库中,我们可以使用 ROWNUM 函数和 RANK 函数来实现分页查询。

语法

ROWNUM 函数

ROWNUM 函数用于对查询结果进行编号。它返回符合查询条件的行数,其中第一条记录的 ROWNUM 值为 1,下一个为 2,以此类推。

SELECT [列名] FROM [表名] WHERE condition1

RANK 函数

RANK 函数用于对查询结果进行排名。它返回一个排名,其中排名值相同的行被视为具有相同的排名。

SELECT RANK() OVER (ORDER BY [列名]) AS rank, [列名] FROM [表名] WHERE condition1

实例

例一

下面是一个简单的实例,展示如何使用 ROWNUM 函数来进行分页查询。

步骤一:创建表

CREATE TABLE test (
  id NUMBER(10),
  name VARCHAR2(50)
);

步骤二:插入数据

INSERT INTO test (id, name) VALUES (1, 'Tom');
INSERT INTO test (id, name) VALUES (2, 'Jerry');
INSERT INTO test (id, name) VALUES (3, 'Lucy');
INSERT INTO test (id, name) VALUES (4, 'Lily');
INSERT INTO test (id, name) VALUES (5, 'Mike');
INSERT INTO test (id, name) VALUES (6, 'Bob');
INSERT INTO test (id, name) VALUES (7, 'David');
INSERT INTO test (id, name) VALUES (8, 'Peter');
INSERT INTO test (id, name) VALUES (9, 'Tony');
INSERT INTO test (id, name) VALUES (10, 'Alex');

步骤三:使用 ROWNUM 进行分页查询

SELECT * FROM (
  SELECT ROWNUM rn, t.* FROM test t WHERE ROWNUM <= 5
) WHERE rn >= 1 AND rn <= 3;

上面的查询结果会返回 test 表中第 1 至 3 条记录。

例二

下面是另一个实例,展示如何使用 RANK 函数来进行分页查询。

步骤一:创建表

CREATE TABLE score (
  id NUMBER(10),
  name VARCHAR2(50),
  subject VARCHAR2(50),
  score NUMBER(10,2)
)

步骤二:插入数据

INSERT INTO score (id, name, subject, score) VALUES (1, 'Tom', 'Math', 80);
INSERT INTO score (id, name, subject, score) VALUES (2, 'Tom', 'Physics', 90);
INSERT INTO score (id, name, subject, score) VALUES (3, 'Jerry', 'Math', 70);
INSERT INTO score (id, name, subject, score) VALUES (4, 'Jerry', 'Physics', 85);
INSERT INTO score (id, name, subject, score) VALUES (5, 'Lucy', 'Math', 92);
INSERT INTO score (id, name, subject, score) VALUES (6, 'Lucy', 'Physics', 89);
INSERT INTO score (id, name, subject, score) VALUES (7, 'Lily', 'Math', 84);
INSERT INTO score (id, name, subject, score) VALUES (8, 'Lily', 'Physics', 76);
INSERT INTO score (id, name, subject, score) VALUES (9, 'Mike', 'Math', 66);
INSERT INTO score (id, name, subject, score) VALUES (10, 'Mike', 'Physics', 78);

步骤三:使用 RANK 进行分页查询

SELECT * FROM (
  SELECT RANK() OVER (PARTITION BY name ORDER BY score DESC) AS rank, s.* FROM score s WHERE s.subject = 'Math'
) WHERE rank <= 2;

上面的查询结果会返回分数排名前两位的学生列表,其中只包括数学科目的成绩。

完结

以上就是完整的“Oracle分页查询的实例详解”的攻略。希望对你有所帮助。

本文标题为:Oracle分页查询的实例详解