-- 查询第 6 到第 10 行数据 SELECT* FROM (SELECT e.*, ROWNUM rn FROM emp e) WHERE rn >=6AND rn <=10;
(2)分页查询公式
每页显示 pageSize 条数据。
查询第 pageNo 页的数据:
1 2 3 4
SELECT* FROM (SELECT e.*, ROWNUM rn FROM emp e) WHERE rn >= (pageNo -1) * pageSize +1 AND rn <= pageNo * pageSize;
(3)示例:每页显示 4 条数据
1 2 3 4
-- 查询第 2 页数据(第 5 到第 8 行) SELECT* FROM (SELECT e.*, ROWNUM rn FROM emp e) WHERE rn >=5AND rn <=8;
2. 视图(View)
视图是基于 SQL 查询的虚拟表,用于简化复杂查询或隐藏数据细节。
(1)创建视图
1 2 3 4 5 6 7 8
-- 创建视图:查询部门名称、部门编号和员工个数 CREATEOR REPLACE VIEW V_EMP_DEPT AS SELECT d.dname, t.* FROM (SELECT deptno, COUNT(*) AS emp_count FROM emp GROUPBY deptno) t JOIN dept d ON t.deptno = d.deptno;
-- 查询视图 SELECT*FROM V_EMP_DEPT;
(2)修改视图
1 2 3
-- 修改视图 CREATEOR REPLACE VIEW V_EMP_DEPT AS SELECT deptno, MAX(sal) AS max_sal FROM emp GROUPBY deptno;
(3)约束条件视图
1 2 3 4 5 6
-- 创建约束条件视图(只能查询部门编号为 10 的数据) CREATEOR REPLACE VIEW V_EMP AS SELECT empno, ename, sal, deptno FROM emp WHERE deptno =10WITHCHECK OPTION;
-- 查询视图 SELECT*FROM V_EMP;
(4)只读视图
1 2 3 4 5 6
-- 创建只读视图 CREATEOR REPLACE VIEW V_EMP AS SELECT empno, ename, sal, deptno FROM emp WHERE deptno =10WITH READ ONLY;
-- 查询视图 SELECT*FROM V_EMP;
(5)内嵌视图(Inline View)
1 2 3 4 5 6
-- 查询工资大于所在部门平均工资的员工 SELECT e.ename, e.sal, e.deptno, t.avg_sal FROM emp e JOIN (SELECT deptno, AVG(sal) AS avg_sal FROM emp GROUPBY deptno) t ON e.deptno = t.deptno WHERE e.sal > t.avg_sal;
-- 每页显示 4 条数据,查询第 2 页 SELECT* FROM (SELECT e.*, ROWNUM rn FROM emp e) WHERE rn >=5AND rn <=8;
(2)创建视图
1 2 3 4 5 6 7 8
-- 创建视图:查询部门名称、部门编号和员工个数 CREATEOR REPLACE VIEW V_EMP_DEPT AS SELECT d.dname, t.* FROM (SELECT deptno, COUNT(*) AS emp_count FROM emp GROUPBY deptno) t JOIN dept d ON t.deptno = d.deptno;