第五章 分页和重复数据删除 5.1 分页简介
为什么使用分页? 由于列表内容过多,所以采用分页显示。 如果数据太多,单个页面无法显示全部内容,所以每次只会显示一部分数据。
分页是一种向用户展示所有数据段的技术。 用户每次看到的并不是全部数据,而是其中的一部分。 如果其中没有找到他想要的内容,用户可以通过指定页码或翻页的方式转换可见内容,直到找到他想要的内容为止。 其实这和我们看书的方式很相似。
实现分页有两种解决方案:
(1) 一次性查询数据库中的所有记录,然后在每一页显示指定的记录。
(2)对数据库进行多次查询,每次只获取并显示本页面的数据
如今,网站建设中的数据是海量的。 如果实施方案一,无疑会增加服务器内存的负载,降低系统运行速度; 如果采用方案2,可能会频繁操作数据库,也会影响响应效率; 所以,大家都会用方案1+方案2来实现。
分页的核心是计算每页有多少条记录、总页数和页数。 对于每一页的数据,只需要计算起始记录和结束记录即可。
5.1.1
不是真正的列,它用于查询返回的行数,返回的第一行分配1,第二行分配2,依此类推,这个伪字段可以用来限制返回的总行数查询号码。
由于它始终是结果集的编号,因此不可能直接查询任何> 1的记录,因为它总是从1开始。
5.1.2 分页实现
虽然ronum不能直接查询大于1的记录,但是我们可以自己添加伪列,将查询结果作为查询的来源。 这时候就会变成一个公共字段,然后用这个来进行某条记录的选择就可以了。
5.2 去除重复记录 5.2.1 rowid介绍
ROWID是. 用于定位数据库中的记录的相对唯一的地址值。 通常,该值在将数据行插入数据库表时确定并且是唯一的。 ROWID它是一个伪列,它实际上并不存在于表中。 它是在读取表中数据行时根据每行数据的物理地址信息编码的伪列。 因此,根据一行数据的ROWID,可以找到一行数据的物理地址信息。 从而快速定位数据行。 数据库的大部分操作都是通过ROWID来完成的,使用ROWID来定位单条记录是最快的。
有时在检索复杂数据时,一般的检索条件无法满足要求,可以利用rowid来准确检索结果
如果要查询一个表中的多个字段,并且只使用某个字段去重,否则group by是不行的。 而group by会将要查询的字段一起去重,即当所有查询的字段都相同时,就认为是重复的。 这时候使用rowid就是一个不错的选择。
5.2.2 搜索重复记录
题目场景:当我们的表中有很多重复记录时,我们需要找出重复记录
实施步骤:
1.按重复内容分组
2、每组中取出一项,保存为记录(注意是唯一的)
3、删除不在保留范围内的数据
第 6 章 表连接 6.1 表连接介绍
当我们获取的数据不是来自同一个表而是来自多个表时,就需要使用表连接。 表连接是将一个表的行与另一个表的行按照指定条件连接起来形成新行的过程。
简单来说,我们将数据存储在不同的表中,不同的表有自己的表结构。 不同的表可以关联。 在大多数实际应用中,不需要仅来自一张表的信息。 ,例如,你需要从班级表中找出北京地区的学生,然后利用这些信息在成绩表中检索他们的数学成绩。 如果没有多表连接,只能手动查询第一个表中的信息作为第一个,可想而知,从两个表中检索信息来查询最终结果会有多么繁琐。
连接查询:
1)即查询时需要同时多个表(尤其是有外键关系的表),此时需要连接多个表之间的值;
2)目前SQL标准提出了两种连接查询,第一种是较早的SQL92标准,第二种是目前广泛使用的较新的SQL99标准;
3)92的形式简单,但书写繁琐。 99不仅在底层进行了优化,而且形式看起来更清晰、更有逻辑性。 一般建议使用99标准;
6.2 92语法
from后面需要放置多个表,所有的连接条件都放在where中,所以SQL92中的等值连接、非等值连接、外连接等其实只是对where条件的过滤
结构: ... 来自 , , ... 其中...
很多情况下需要给表取别名(1、简化表名2、可能会出现自连的情况)
连接原理:按照from后面的表出现的顺序,前面的表作为内存的for循环,后面出现的表作为外层的for循环
6.2.1 笛卡尔积
学过线性代数的人都知道,笛卡尔积,通俗地说,就是两个集合中的每个成员都与另一个集合中的任何成员相关。
比如有一张考勤记录表,记录了2011年4月100人的考勤信息,理论上这些人每天都应该有记录。 但事实上,某些人在某些日子的数据缺失了。 一天一天的询问,或者一项一项的询问,有点麻烦。 在这种情况下,可以对每个人和每一天执行笛卡尔积。 然后与实际的表关联起来。 查询结果很方便。
...从 t1,t2
6.2.2 等价连接
根据笛卡尔积取条件列相同的值
查询员工信息和部门信息
查询员工姓名、部门名称
6.2.3 非等价连接
!=,>,