f9yx0du 发表于 2024-8-4 15:08:08

开工大吉,Oracle系列五六章合集----分页和去重、表连接


    <h2 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">第五章 分页和去重</span></h2>
    <h3 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">5.1分页介绍</span></h3>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">为何</span>会用到分页呢,<span style="color: black;">由于</span>列表内容太多了,<span style="color: black;">因此</span><span style="color: black;">运用</span>分页进行<span style="color: black;">表示</span>。数据<span style="color: black;">太多</span>单页面<span style="color: black;">没法</span><span style="color: black;">表示</span>所有内容,则每一次只<span style="color: black;">表示</span>一部分的数据。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">分页,是一种将所有数据分段展示给用户的技术。用户每次看到的不是<span style="color: black;">所有</span>数据,而是其中的一部分,<span style="color: black;">倘若</span>在其中<span style="color: black;">无</span>找到自习自己想要的内容,用户<span style="color: black;">能够</span><span style="color: black;">经过</span>制定页码或是翻页的方式转换可见内容,直到找到自己想要的内容为止。其实这和<span style="color: black;">咱们</span>阅读书籍很类似。</p>实现分页的<span style="color: black;">处理</span><span style="color: black;">方法</span>有两种:
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><strong style="color: blue;">(1)一次<span style="color: black;">查找</span>出数据库中的所有记录,<span style="color: black;">而后</span>在每页中<span style="color: black;">表示</span>指定的记录。</strong><strong style="color: blue;">(2)对数据库进行多次<span style="color: black;">查找</span>,每次只<span style="color: black;">得到</span>本页的数据并<span style="color: black;">表示</span></strong></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">如今网站建设中的数据都是海量的,若按<span style="color: black;">方法</span>1执行:无疑会加大服务器内存的负载,降低系统运行速度;若<span style="color: black;">运用</span><span style="color: black;">方法</span>2执行,则可能回频繁操作数据库,<span style="color: black;">亦</span>会影响响应效率;因而<span style="color: black;">大众</span>都会<span style="color: black;">运用</span><span style="color: black;">方法</span>1+<span style="color: black;">方法</span>2来实现。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">分页的核心<span style="color: black;">便是</span>计算每页多少记录和总页数以及第几页。每一页的数据则只需计算<span style="color: black;">初始</span>的记录和结束记录<span style="color: black;">就可</span>。</p><span style="color: black;">5.1.1 rownum</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">rownum不是一个真实存在的列,它是用于从<span style="color: black;">查找</span>返回的行的编号,返回的<span style="color: black;">第1</span>行分配的是1,第二行是2,依此类推,这个伪字段<span style="color: black;">能够</span>用于限制<span style="color: black;">查找</span>返回的总行数。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">因为</span>rownum总是结果集的编号,<span style="color: black;">因此</span><span style="color: black;">没法</span>直接<span style="color: black;">查找</span>rownum&gt;1的任何记录,<span style="color: black;">由于</span>总是从1<span style="color: black;">起始</span>的嘛。</p><span style="color: black;">5.1.2 oracle 分页实现</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">虽然ronum<span style="color: black;">不可</span>直接<span style="color: black;">查找</span>大于1的记录,<span style="color: black;">然则</span><span style="color: black;">咱们</span><span style="color: black;">能够</span>自己添加伪列,将<span style="color: black;">查找</span>的结果集中的rownum<span style="color: black;">做为</span><span style="color: black;">查找</span>的<span style="color: black;">源自</span>,则此时<span style="color: black;">源自</span>中的rownum变<span style="color: black;">成为了</span>普通字段,再<span style="color: black;">经过</span>这个rownum来进行某段记录的<span style="color: black;">选择</span><span style="color: black;">就可</span>。</p>
    <h3 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">5.2 去除重复记录</span></h3><span style="color: black;">5.2.1 rowid介绍</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">ROWID是ORACLE中的一个重要的概念。用于定位数据库中一条记录的一个相对<span style="color: black;">独一</span><span style="color: black;">位置</span>值。<span style="color: black;">一般</span><span style="color: black;">状况</span>下,该值在该行数据<span style="color: black;">插进</span>到数据库表时即被确定且<span style="color: black;">独一</span>。ROWID它是一个伪列,它并不<span style="color: black;">实质</span>存在于表中。它是ORACLE在读取表中数据行时,<span style="color: black;">按照</span>每一行数据的<span style="color: black;">理学</span><span style="color: black;">位置</span>信息编码而成的一个伪列。<span style="color: black;">因此</span><span style="color: black;">按照</span>一行数据的ROWID能找到一行数据的<span style="color: black;">理学</span><span style="color: black;">位置</span>信息。从而快速地定位到数据行。数据库的大<span style="color: black;">都数</span>操作都是<span style="color: black;">经过</span>ROWID来完成的,<span style="color: black;">况且</span><span style="color: black;">运用</span>ROWID来进行单记录定位速度是最快的。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">有时繁杂的数据检索时,普通检索<span style="color: black;">要求</span><span style="color: black;">不可</span>达到<span style="color: black;">需求</span>,<span style="color: black;">能够</span>利用rowid来精确检索的结果 </p>oracle中<span style="color: black;">倘若</span>要<span style="color: black;">查找</span>某张表中多个字段,又只对某个字段去重的时候用distinct<span style="color: black;">或</span>group by都不行。distinct和group by会对要<span style="color: black;">查找</span>的字段<span style="color: black;">一块</span>进行去重,<span style="color: black;">亦</span><span style="color: black;">便是</span>当<span style="color: black;">查找</span>的所有字段都相同,oracle才认为是重复的。<span style="color: black;">此时</span>用rowid是个不错的<span style="color: black;">选取</span>。<span style="color: black;">5.2.2 重复记录的<span style="color: black;">查询</span></span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">题目场景:当<span style="color: black;">咱们</span>表里面<span style="color: black;">显现</span>了许多重复记录时,<span style="color: black;">咱们</span><span style="color: black;">必须</span>将重复的记录找出来</p>实现<span style="color: black;">过程</span>:
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><strong style="color: blue;">1、<span style="color: black;">根据</span>重复内容分组</strong><strong style="color: blue;">2、取出每一组中的一条并记录<span style="color: black;">保存</span>(<span style="color: black;">重视</span><span style="color: black;">拥有</span><span style="color: black;">独一</span>性)</strong><strong style="color: blue;">3、删除未在<span style="color: black;">保存</span>范围的数据</strong></p>
    <h2 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">第六章 表连接</span></h2>
    <h3 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">6.1 表连接介绍</span></h3>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">当<span style="color: black;">咱们</span>获取的数据不是来自于同一张表而是来自于多张表时就<span style="color: black;">必须</span><span style="color: black;">运用</span>到表连接。表连接<span style="color: black;">便是</span>一个表的行<span style="color: black;">按照</span>指定的<span style="color: black;">要求</span>跟另一个表的行连接起来形成新的行的过程。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">简单来讲,<span style="color: black;">咱们</span>将数据存在<span style="color: black;">区别</span>的表中,而<span style="color: black;">区别</span>的表有着它们<span style="color: black;">自己</span>的表结构,<span style="color: black;">区别</span>表之间<span style="color: black;">能够</span>是<span style="color: black;">相关</span>联的,大部分<span style="color: black;">实质</span><span style="color: black;">运用</span>中,不会仅仅只<span style="color: black;">必须</span>一张表的信息,比如<span style="color: black;">必须</span>从一个班级表中找出北京地区的学生,再用这个信息去检索成绩表中<span style="color: black;">她们</span>的数学成绩,<span style="color: black;">倘若</span><span style="color: black;">无</span>多表连接,那只能手动将<span style="color: black;">第1</span>个表的信息<span style="color: black;">查找</span>出来<span style="color: black;">做为</span>第二个表的检索信息去<span style="color: black;">查找</span><span style="color: black;">最后</span>的结果,可想而知这将会是多么繁琐。</p>连接<span style="color: black;">查找</span>:
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><strong style="color: blue;">1) 即<span style="color: black;">查找</span>的时候<span style="color: black;">同期</span><span style="color: black;">必须</span>多张表(<span style="color: black;">尤其</span>是存在外键关系的),此时<span style="color: black;">必须</span>多张表之间的值进行连接;</strong><strong style="color: blue;">2) <span style="color: black;">日前</span>SQL标准提出过两种连接<span style="color: black;">查找</span>,<span style="color: black;">第1</span>种是较早的SQL92标准,第二种是<span style="color: black;">日前</span><span style="color: black;">运用</span>广泛的较新的SQL99标准;</strong><strong style="color: blue;">3) 92形式简单,但编写较为冗长,99不仅在底层得到优化,<span style="color: black;">况且</span>形式看上去更加一目了然,<span style="color: black;">规律</span>性更强,<span style="color: black;">通常</span><span style="color: black;">意见</span><span style="color: black;">运用</span>99标准;</strong></p>
    <h3 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">6.2 92语法</span></h3>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">多张表<span style="color: black;">必须</span><span style="color: black;">所有</span>放在from之后,所有的连接<span style="color: black;">要求</span>都放在where<span style="color: black;">其中</span>,<span style="color: black;">因此呢</span>SQL92中的等值连接、非等值链接、外连接等等其实只是where<span style="color: black;">要求</span>的筛选</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">结构:select ... from table1, table2 ,table3 ... where...</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">非常多</span>时候<span style="color: black;">必须</span>为表取别名(1、简化表名 2、可能存在自连接的<span style="color: black;">状况</span>)</p>连接的原理:<span style="color: black;">根据</span>from后面表的<span style="color: black;">显现</span><span style="color: black;">次序</span>,前面的表<span style="color: black;">做为</span>内存的for循环,后<span style="color: black;">显现</span>的表<span style="color: black;">做为</span>外层的for循环<span style="color: black;">6.2.1 笛卡尔积</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">经过</span>线性代数的人都<span style="color: black;">晓得</span>,笛卡尔乘积通俗的说,<span style="color: black;">便是</span>两个集合中的每一个成员,都与对方集合中的任意一个成员<span style="color: black;">相关</span>联。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">例如有个考勤记录表,记录着100个人的2011年4月的考勤信息,理论上这些人应该<span style="color: black;">每日</span>都有记录的。 但是<span style="color: black;">实质</span>上某些人在某些天上面的数据,缺少了。 一天一天的<span style="color: black;">查找</span>,还是一个人一个人的<span style="color: black;">查找</span>,都有些麻烦。 这种<span style="color: black;">状况</span>下,<span style="color: black;">能够</span>针对 <span style="color: black;">每一个</span>人 与 每一天 做一个 笛卡尔积 的处理。 <span style="color: black;">而后</span>与<span style="color: black;">实质</span>的表去<span style="color: black;">相关</span>。就很容易<span style="color: black;">查找</span>出结果了。</p>select ... from t1,t2<span style="color: black;">6.2.2 等值连接</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在笛卡尔积的<span style="color: black;">基本</span>上取<span style="color: black;">要求</span>列相同的值</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">查找</span>员工信息和<span style="color: black;">分部</span>信息</p><span style="color: black;">查找</span>员工姓名,<span style="color: black;">分部</span>名<span style="color: black;">叫作</span><span style="color: black;">6.2.3 非等值连接</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">!=、&gt;、&lt;、&lt;&gt;、between and</p><span style="color: black;">查找</span>员工姓名,工资及等级<span style="color: black;">6.2.4 自连接</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">特殊的等值连接(来自于同一张表)</p>找出存在上级的员工姓名<span style="color: black;">6.2.5 外连接</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">内联接<span style="color: black;">运用</span>比较运算符<span style="color: black;">按照</span><span style="color: black;">每一个</span>表共有的列的值匹配两个表中的行。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">外联接<span style="color: black;">能够</span>是左向外联接、右向外联接或完整<span style="color: black;">外边</span>联接。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">左向外联接的结果集<span style="color: black;">包含</span> LEFT OUTER子句中指定的左表的所有行,而<span style="color: black;">不仅</span>是联接列所匹配的行。<span style="color: black;">倘若</span>左表的某行在右表中<span style="color: black;">无</span>匹配行,则在<span style="color: black;">关联</span>联的结果集行中右表的所有<span style="color: black;">选取</span>列表列均为空值。 </p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">右向外联接是左向外联接的反向联接。将返回右表的所有行。<span style="color: black;">倘若</span>右表的某行在左表中<span style="color: black;">无</span>匹配行,则将为左表返回空值。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">看‘+’,带‘+’的表为从表,对立面的表为主表。</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">找出所有员工的姓名 以及他上级的名<span style="color: black;">叫作</span></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">找出所有上级的名<span style="color: black;">叫作</span>以及其手下员工的名<span style="color: black;">叫作</span></p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">找出所有<span style="color: black;">分部</span>的员工数 及<span style="color: black;">分部</span>名<span style="color: black;">叫作</span></p>找出所有有员工的<span style="color: black;">分部</span>名<span style="color: black;">叫作</span>及员工数
    <h3 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">6.3 99语法</span></h3><span style="color: black;">6.3.1 cross join</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">交叉连接,实现笛卡尔积</p><span style="color: black;">6.3.2 natural join</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">必须</span>有(同名列、主外建)</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">自然连接,做等值连接</p><span style="color: black;">查找</span>所有员工姓名及所在<span style="color: black;">分部</span>的名<span style="color: black;">叫作</span><span style="color: black;">6.3.3 join using (同名列)</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">using 连接 ,等值连接</p><span style="color: black;">查找</span>所有员工姓名及所在<span style="color: black;">分部</span>的名<span style="color: black;">叫作</span><span style="color: black;">6.3.4 join on</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">on 连接,可做等值连接、非等值连接、自连接,<span style="color: black;">能够</span><span style="color: black;">处理</span>一切连接,关系列<span style="color: black;">必要</span>要区分</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">查找</span>所有员工姓名及所在<span style="color: black;">分部</span>的名<span style="color: black;">叫作</span></p><span style="color: black;">查找</span>所有员工的姓名,工资以及工资等级<span style="color: black;">6.3.5 outer join</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">外连接,有主表和从表一说</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">left join on</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">left join using</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">right join on</p>right join using<span style="color: black;">6.3.6 full join on| using</span>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">全连接,满足则直接匹配,不满足的相互<span style="color: black;">弥补</span>null,<span style="color: black;">保证</span>所有的表记录都<span style="color: black;">最少</span><span style="color: black;">显现</span>一次。</p>
    <h3 style="color: black; text-align: left; margin-bottom: 10px;"><span style="color: black;">6.4 集合操作</span></h3>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">Union、Union All、Intersect、Minus </p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">Union,并集(去重) 对两个结果集进行并集操作,不<span style="color: black;">包含</span>重复行<span style="color: black;">同期</span>进行默认规则的排序;</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">Union All,全集(不去重) 对两个结果集进行并集操作,<span style="color: black;">包含</span>重复行,不进行排序 ;</p>
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">Intersect,交集(找出重复) 对两个结果集进行交集操作,不<span style="color: black;">包含</span>重复行,<span style="color: black;">同期</span>进行默认规则的排序;</p>Minus,差集(减去重复) 对两个结果集进行差操作,不<span style="color: black;">包含</span>重复行,<span style="color: black;">同期</span>进行默认规则的排序
    <p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">分页和去重</p>





2557497911 发表于 2024-8-24 10:43:28

我完全同意你的观点,说得太对了。

4zhvml8 发表于 2024-9-28 16:13:05

你的见解独到,让我受益匪浅,非常感谢。

nykek5i 发表于 2024-10-27 11:40:57

“BS”(鄙视的缩写)‌
页: [1]
查看完整版本: 开工大吉,Oracle系列五六章合集----分页和去重、表连接