栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

〖Python 数据库开发实战 - MySQL篇⑮〗- 数据表结果集的排序与去除重复(去重)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

〖Python 数据库开发实战 - MySQL篇⑮〗- 数据表结果集的排序与去除重复(去重)

万叶集
 隐约雷鸣,阴霾天空。 
 但盼风雨来,能留你在此。 


前言:
✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 哈士奇 ,一位致力于 TFS - 全栈 赋能的博主 ✌
CSDN博客专家认证、新星计划第三季全栈赛道 top_1 、华为云享专家、阿里云专家博主 
 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。
 如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦


专栏系列(点击解锁)学习路线(点击解锁)知识定位
Python全栈白皮书 零基础入门篇 以浅显易懂的方式轻松入门,让你彻底爱上Python的魅力。
语法进阶篇 主要围绕多线程编程、正则表达式学习、含贴近实战的项目练习 。
自动化办公篇 实现日常办公软件的自动化操作,节省时间、提高办公效率。
自动化测试实战篇 从实战的角度出发,先人一步,快速转型测试开发工程师。
数据库开发实战篇 掌握关系型与非关系数据库知识,提升数据库实战开发能力。
爬虫入门与实战 更新中
数据分析篇 更新中
前端入门+flask 全栈篇 更新中
django+vue全栈篇 更新中
拓展-人工智能入门 更新中
网络安全之路 踩坑篇 记录学习及演练过程中遇到的坑,便于后来居上者
网安知识扫盲篇 三天打鱼,不深入了解原理,只会让你成为脚本小子。
vulhub靶场漏洞复现 让漏洞复现变得简单,让安全研究者更加专注于漏洞原理本身。
shell编程篇 不涉及linux基础,最终案例会偏向于安全加固方向。 [待完结]
WEB漏洞攻防篇 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
渗透工具使用集锦 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
点点点工程师 测试神器 - Charles 软件测试数据包抓包分析神器
测试神器 - Fiddler 一文学会 fiddle ,学不会倒立吃翔,稀得!
测试神器 - Jmeter 不仅是性能测试神器,更可用于搭建轻量级接口自动化测试框架。
RobotFrameWork Python实现的自动化测试利器,该篇章仅介绍UI自动化部分。
Java实现UI自动化 文档写于2016年,Java实现的UI自动化,仍有借鉴意义。
MonkeyRunner 该工具目前的应用场景已不多,文档已删,为了排版好看才留着。


文章目录
    •  结果集排序
      •  排序关键字
      •  注意排序内容相同的情况
      •  多个排序字段
      •  排序 + 分页 案例演示
    •  结果集去除重复记录
      •  去重语法
      •  去重注意事项

该章节我们将要学习针对SQL语句查询的结果集中的记录进行排序与去除重复记录(去重)。默认情况下,MySQL 不会对结果集中的数据进行排序。如果说我们想要针对某个字段按照一定的规律排序,可以使用 MySQL 为我们提供的 “ORDER BY” 子句来实现排序的功能;去重也是一样,虽然数据表的主键不能存在重复的记录,但是作为结果集却是可以有重复的情况出现的,针对结果集的去除重复记录,MySQL 也为我们提供了相对应的关键字 “DISTINCT” ,使用 “DISTINCT” 即可实现针对结果集去重的效果。

 结果集排序

SQL语句排序语法如下:

SELECt ...... FROM ...... ORDER BY 列名 [ASC|DESC]
-- 利用 ORDER BY 针对 列 进行排序 (ASC为升序,DESC为降序;如果不选择排序,默认为升序的方式)

SQL 语句排序示例:(查询 t_emp 表,按照薪资待遇进行升序的排列进行结果集的展示)

SELECt ename, sal FROM t_emp ORDER BY sal;		-- 从 t_emp 查询 ename, sal 字段的数据,并按照 sal 进行升序排列

SQL 语句排序示例:(查询 t_emp 表,按照薪资待遇进行降序的排列进行结果集的展示)

SELECt ename, sal FROM t_emp ORDER BY sal DESC;		-- 从 t_emp 查询 ename, sal 字段的数据,并按照 sal 进行升序排列

 排序关键字
  • 才能够上文我们可以知道,ASC 代表升序(默认) ,DESC 代表降序
  • 如果排序的列的内容是 数字类型 ,数据库就按照数字的大小排序;如果排序列是日期类型,就按照日期大小来排序;如果排序列的内容是字符串,则按照字符串的字符集序号进行排序。

关键字排序示例(按照日期大小降序排序):

SELECt empno, ename, sal, hiredate FROM t_emp ORDER BY hiredate DESC;

 注意排序内容相同的情况

想一个问题:默认情况下,如果两条数据排序的字段内容相同,那么排序会是什么样子?会按照什么样的规则进行排序?

见下图中,按照 “月薪” 的降序排列的数据集

如上图所示,恰巧有两个人的月薪都是 3000 ,但是我们可以看到,虽然月薪都是 3000,但是它们按照主键的 empno 进行了升序的排列。除了MySQL 默认的这中方式之外,我们还可以设定第二个排序条件接着去排序,以此类推。


 多个排序字段

如上文所说的那样,我们可以设定多个排序条件去应对存在相同排序内容的情况。

可以使用 ORDER BY 规定首要排序条件和次要排序条件。数据库会先按照首要排序条件排序,如果遇到首要排序内容相同的记录,那么就会启用次要排序条件接着排序。


根据上文的案例,我们来编写一下相同月薪的员工按照入职时间进行升序排列的多个排序字段的SQL语句吧。

SELECt empno, ename, sal, hiredate FROM t_emp ORDER BY sal DESC, hiredate ASC;

 排序 + 分页 案例演示

这里就不再过多的浪费文字介绍了,就是一句话的事儿。编写 SQL 语句,实现"查询员工表中月薪前五位的员工信息,且按月薪的降序排列。"

SQL 语句如下:

SELECt empno, ename, sal FROM t_emp ORDER BY sal DESC LIMIT 0,5;
 结果集去除重复记录

正如该章节的开头我们提到的那样, 虽然数据表的主键不能存在重复的记录,但是作为结果集却是可以有重复的情况出现的。就比如员工表中,当我们单独查询员工职位的信息的时候就会出现相同职位的员工的记录(见下图)。

 去重语法

针对结果集的去除重复记录,MySQL 也为我们提供了相对应的关键字 “DISTINCT” ,使用 “DISTINCT” 即可实现针对结果集去重的效果。

语法如下:

SELECt DISTINCT 字段 FROM 表名称;   -- 只需要在需要去重的字段前面加上 "DISTINCT" 关键字即可

去重示例演示:

以上文中查询到的重复的员工职位为例,将重复的职位进行去重。

SELECt 
	DISTINCT job 
FROM t_emp;

PS:有一点大家一定要分清楚,"DISTINCT" 去除的是结果集中的重复记录,而不是删除数据表中的重复记录。数据表中的重复记录是不会被改变的。


 去重注意事项
  • 使用 DISTINCT 的 SELECt 语句中只能查询一列数据,如果查询多列,去重重复记录的结果集展示就会失效。示例如下:
SELECT DISTINCT job , ename FROM t_emp;
  • DISTINCT 关键字在 SELECt 子句中只能使用一次,如下方类似的 SQL 语法是错误的,无法正常执行。
SELECT DISTINCT job , DISTINCT ename FROM t_emp;	-- 错误的 SQL 语句1

SELECt job , DISTINCT ename FROM t_emp;				-- 错误的 SQL 语句2

OK,该章节我们学习了对 SQL 语句结果集的排序与去重操作,下一章节我们将学习 SQL 语句的条件查询语句,拜了个拜!



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026995.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号