一、分页查询
--rowid :对应着数据库中的一条记录,是当一条记录被写入数据库的时候,由数据库管理系统生成。数据库系统自己来维护。
select * from emp where rowid='AAAE51AAEAAAAHLAAA'
--rownum 被称为 伪列。不是数据库中存在 的一个字段值。而是根据查询到的结果,添加上的一个逻辑顺序编号。
select rownum,e.* from emp e
--显式查询的前5条数据
select rownum,e.* from emp e where rownum <=5
--查询6-10条的数据 rownum 永远是从1开始,第一条满足条件的数据 rownum 的值是1. 不能使用> 和 >=
select rownum,e.* from emp e where rownum >= 6 and rownum <=10
--查询工资从高到低的前5条数据
select * from emp order by sal desc
---添加rownum
select e.* from emp e order by sal desc
--使用子查询
select rownum,T.*
from (select e.* from emp e order by sal desc) T
where rownum <=5
--查询6-10条--通用的公式
select rownum,T2.* from
(select rownum R,T.*
from (select e.* from emp e order by sal desc) T
where rownum <=15--page*count
) T2 where T2.R >10--(page-1)*count
--count 变量代表一页显式的条数
--page 当前是第几页
二、三大范式
优点:结构合理、冗余较小、尽量避免插入删除修改异常。
缺点:性能降低、多表查询比单表查询速度慢。
数据库的设计应该根据当前情况和需求做出灵活的处理。
在实际设计中,要整体遵循范式理论。
如果在某些特定的情况下还死死遵循范式也是不可取的,因为可能降低数据库的效率,此时可以适当增加冗余而提高性能。
第一范式:字段不能再分。
第二范式:不存在局部依赖(联合主键)。
第三范式:不含传递依赖(不含间接依赖)。
使用范式可以减少冗余,但是会降低性能
特定表的的设计可以违反第三范式,增加冗余提高性能。
数据库表之间的关系:
一对一:学生和学生证
一对多:学生和班级
多对多:学生和课程
如何表示数据库表之间的关系?
使用外键
数据库外键关系表示的其实是一种一对多关系
一对一:外键+唯一
多对多:引入中间表,把一个多对多表示为两个一对多