MySQL学习笔记13
DISTINCT数据去重:
案例:获取tb_student学生表学员年龄的分布情况。
mysql> select * from tb_student;
+----+--------+------+--------+-----------------------+
| id | name | age | gender | address |
+----+--------+------+--------+-----------------------+
| 1 | 刘备 | 33 | 男 | 湖北省武汉市 |
| 2 | 貂蝉 | 18 | 女 | 湖南省长沙市 |
| 3 | 关羽 | 32 | 男 | 湖北省荆州市 |
| 4 | 大乔 | 20 | 女 | 河南省漯河市 |
| 5 | 赵云 | 25 | 男 | 河北省石家庄市 |
| 6 | 小乔 | 18 | 女 | 湖北省荆州市 |
+----+--------+------+--------+-----------------------+
6 rows in set (0.00 sec)mysql> select distinct age from tb_student;
+------+
| age |
+------+
| 33 |
| 18 |
| 32 |
| 20 |
| 25 |
+------+
5 rows in set (0.00 sec)
只要加上这个关键词,就是实现了去重的操作。
group by 子句(重点难点)
group by子句的作用:对数据进行分组操作,为什么要进行分组呢?分组的目标就是进行分组统计。
日常生活中的分组太多了,如按男女进行分组,按成绩进行分组,按院校、系部分组,按部门进行分组。
根据给定==数据列==的查询结果进行分组统计,最终得到一个==分组汇总表==
注:一般情况下group by需与==统计函数==一起使用才有意义
统计函数:

案例:求tb_student 表中应该有多少记录。
mysql> select count(*) from tb_student;
+----------+
| count(*) |
+----------+
| 6 |
+----------+
1 row in set (0.03 sec)
案例:求年龄的最大值和最小值。
mysql> select max(age) from tb_student;
+----------+
| max(age) |
+----------+
| 33 |
+----------+
1 row in set (0.00 sec)mysql> select min(age) from tb_student;
+----------+
| min(age) |
+----------+
| 18 |
+----------+
1 row in set (0.00 sec)
案例:针对id字段求和。
mysql> select sum(id) from tb_student;
+---------+
| sum(id) |
+---------+
| 21 |
+---------+
1 row in set (0.00 sec)
案例:求年龄的平均值。
mysql> select avg(age) from tb_student;
+----------+
| avg(age) |
+----------+
| 24.3333 |
+----------+
1 row in set (0.00 sec)
GroupBy命令:实现数据的统计。
案例:求tb_student 男女同学的总数。
mysql> select gender,count(*) from tb_student group by gender;
+--------+----------+
| gender | count(*) |
+--------+----------+
| 男 | 3 |
| 女 | 3 |
+--------+----------+
2 rows in set (0.00 sec)
案例:求tb_student 中男同学的最大值与女同学的最大值。
mysql> select gender, max(age) from tb_student group by gender;
+--------+----------+
| gender | max(age) |
+--------+----------+
| 男 | 33 |
| 女 | 20 |
+--------+----------+
2 rows in set (0.00 sec)
group by的分组原理:
分组就是在内存分区域,然后分组,然后针对其中的每一列,然后进行统计。
记住:以后只要涉及到求每个学科、每个部门、每个年级、每个系部薪资最高、成绩最好、薪资的平均值等等,就是基于GROUP BY + 统计函数。
Having子句:
having与where类似,根据条件对==数据==进行过滤筛选
where==针对表中的列==发挥作用,查询数据
having==针对查询结果集==发挥作用,筛选数据
针对上次的查询结果再进行数据查询。执行两次查询。
mysql> select * from tb_student having age > 20;
+----+--------+------+--------+-----------------------+
| id | name | age | gender | address |
+----+--------+------+--------+-----------------------+
| 1 | 刘备 | 33 | 男 | 湖北省武汉市 |
| 3 | 关羽 | 32 | 男 | 湖北省荆州市 |
| 5 | 赵云 | 25 | 男 | 河北省石家庄市 |
+----+--------+------+--------+-----------------------+
3 rows in set (0.00 sec)
案例:按学科进行分组,求每个学科拥有多少人。
mysql> drop table tb_student;
Query OK, 0 rows affected (0.02 sec)mysql> create table tb_student(-> id mediumint not null auto_increment,-> name varchar(20),-> age tinyint unsigned default 0,-> gender enum('男','女'),-> subject enum('ui','java','yunwei','python'),-> primary key(id)-> ) engine=innodb default charset=utf8;
Query OK, 0 rows affected (0.00 sec)mysql> insert into tb_student values (null,'悟空',255,'男','ui'),(null,'八戒',250,'男','python'),(null,'唐僧',30,'男','yunwei'),(null,'沙僧',150,'男','java'),(null,'小白龙',100,'男','yunwei'),(null,'白骨精',28,'女','ui'),(null,'兔子精',22,'女','yunwei'),(null,'狮子精',33,'男','yunwei');
Query OK, 8 rows affected (0.00 sec)
Records: 8 Duplicates: 0 Warnings: 0mysql> select * from tb_student;
+----+-----------+------+--------+---------+
| id | name | age | gender | subject |
+----+-----------+------+--------+---------+
| 1 | 悟空 | 255 | 男 | ui |
| 2 | 八戒 | 250 | 男 | python |
| 3 | 唐僧 | 30 | 男 | yunwei |
| 4 | 沙僧 | 150 | 男 | java |
| 5 | 小白龙 | 100 | 男 | yunwei |
| 6 | 白骨精 | 28 | 女 | ui |
| 7 | 兔子精 | 22 | 女 | yunwei |
| 8 | 狮子精 | 33 | 男 | yunwei |
+----+-----------+------+--------+---------+
8 rows in set (0.00 sec)
根据学科进行分组,求每个学科有多少人?
然后在这个基础上再次筛选学科人数大于3人的筛选。在查询基础上再次进行处理的,就只有having语句了。
mysql> select subject,count(*) from tb_student group by subject;
+---------+----------+
| subject | count(*) |
+---------+----------+
| ui | 2 |
| java | 1 |
| yunwei | 4 |
| python | 1 |
+---------+----------+
4 rows in set (0.00 sec)mysql> select subject,count(*) from tb_student group by subject having count(*)>3;
+---------+----------+
| subject | count(*) |
+---------+----------+
| yunwei | 4 |
+---------+----------+
1 row in set (0.00 sec)
having语句是在原来分组操作之后,再次进行查询的操作。
Order by 子句:
其主要作用是对数据进行排序。
排序是两种:
升序(从小到大)
mysql> select * from 数据表名称 ... order by 字段名称 asc;
降序排列(从大到小)。
mysql> select * from 数据表名称 ... order by 字段名称 desc;
案例:按年龄进行排序(由小到大 ):
mysql> select * from tb_student order by age asc;
+----+-----------+------+--------+---------+
| id | name | age | gender | subject |
+----+-----------+------+--------+---------+
| 7 | 兔子精 | 22 | 女 | yunwei |
| 6 | 白骨精 | 28 | 女 | ui |
| 3 | 唐僧 | 30 | 男 | yunwei |
| 8 | 狮子精 | 33 | 男 | yunwei |
| 5 | 小白龙 | 100 | 男 | yunwei |
| 4 | 沙僧 | 150 | 男 | java |
| 2 | 八戒 | 250 | 男 | python |
| 1 | 悟空 | 255 | 男 | ui |
+----+-----------+------+--------+---------+
8 rows in set (0.00 sec)mysql> select * from tb_student order by age desc;
+----+-----------+------+--------+---------+
| id | name | age | gender | subject |
+----+-----------+------+--------+---------+
| 1 | 悟空 | 255 | 男 | ui |
| 2 | 八戒 | 250 | 男 | python |
| 4 | 沙僧 | 150 | 男 | java |
| 5 | 小白龙 | 100 | 男 | yunwei |
| 8 | 狮子精 | 33 | 男 | yunwei |
| 3 | 唐僧 | 30 | 男 | yunwei |
| 6 | 白骨精 | 28 | 女 | ui |
| 7 | 兔子精 | 22 | 女 | yunwei |
+----+-----------+------+--------+---------+
8 rows in set (0.00 sec)
Limit子句:分页函数。
基本语法:
mysql> select * from 数据表名称 ... limit number; 查询满足条件的number条数据
或
mysql> select * from 数据表名称 ... limit offset,number; 从偏移量为offset开始查询,查询number条记录
offset的值从0开始
案例:获取班级中年龄最大的学员信息。
mysql> select * from tb_student order by age desc limit 1;
+----+--------+------+--------+---------+
| id | name | age | gender | subject |
+----+--------+------+--------+---------+
| 1 | 悟空 | 255 | 男 | ui |
+----+--------+------+--------+---------+
1 row in set (0.00 sec)
案例:从偏移量为1的元素开始查询,查询2条记录。
mysql> select * from tb_student;
+----+-----------+------+--------+---------+
| id | name | age | gender | subject |
+----+-----------+------+--------+---------+
| 1 | 悟空 | 255 | 男 | ui |
| 2 | 八戒 | 250 | 男 | python |
| 3 | 唐僧 | 30 | 男 | yunwei |
| 4 | 沙僧 | 150 | 男 | java |
| 5 | 小白龙 | 100 | 男 | yunwei |
| 6 | 白骨精 | 28 | 女 | ui |
| 7 | 兔子精 | 22 | 女 | yunwei |
| 8 | 狮子精 | 33 | 男 | yunwei |
+----+-----------+------+--------+---------+
8 rows in set (0.00 sec)mysql> select * from tb_student limit 1,2;
+----+--------+------+--------+---------+
| id | name | age | gender | subject |
+----+--------+------+--------+---------+
| 2 | 八戒 | 250 | 男 | python |
| 3 | 唐僧 | 30 | 男 | yunwei |
+----+--------+------+--------+---------+
2 rows in set (0.00 sec)
LIMIT子句在开发项目中,主要应用于数据分页。
案例:实现数据分页:
分页效果,找出下规律。
mysql> select * from tb_student limit 0,2;
+----+--------+------+--------+---------+
| id | name | age | gender | subject |
+----+--------+------+--------+---------+
| 1 | 悟空 | 255 | 男 | ui |
| 2 | 八戒 | 250 | 男 | python |
+----+--------+------+--------+---------+
2 rows in set (0.00 sec)mysql> select * from tb_student limit 2,2;
+----+--------+------+--------+---------+
| id | name | age | gender | subject |
+----+--------+------+--------+---------+
| 3 | 唐僧 | 30 | 男 | yunwei |
| 4 | 沙僧 | 150 | 男 | java |
+----+--------+------+--------+---------+
2 rows in set (0.00 sec)mysql> select * from tb_student limit 4,2;
+----+-----------+------+--------+---------+
| id | name | age | gender | subject |
+----+-----------+------+--------+---------+
| 5 | 小白龙 | 100 | 男 | yunwei |
| 6 | 白骨精 | 28 | 女 | ui |
+----+-----------+------+--------+---------+
2 rows in set (0.00 sec)mysql> select * from tb_student limit 6,2;
+----+-----------+------+--------+---------+
| id | name | age | gender | subject |
+----+-----------+------+--------+---------+
| 7 | 兔子精 | 22 | 女 | yunwei |
| 8 | 狮子精 | 33 | 男 | yunwei |
+----+-----------+------+--------+---------+
2 rows in set (0.00 sec)
分页操作是程序员使用得比较多的。
相关文章:
MySQL学习笔记13
DISTINCT数据去重: 案例:获取tb_student学生表学员年龄的分布情况。 mysql> select * from tb_student; ------------------------------------------------- | id | name | age | gender | address | --------------------------…...
怎么获取外网ip地址
在网络连接中,每个设备都被分配一个唯一的IP地址,用于标识和定位该设备。其中,内部或局域网IP地址是在局域网内使用的,而外网IP地址则是与公共互联网通信时所使用的地址。 获取外网IP地址对于许多人来说可能是一个常见的需求&…...
算法 只出现一次的两个数字-(哈希+异或)
牛客网: BM52 题目: 数组中仅2个数字出现1次,其余出现2次 思路: 出现2次的数字异或结果为0,另外两个不同的数字异或结果res不为0,异或结果的二进制位必与其中一个相同,求出二进制位为1的pos, 遍历数组,所有此位置为1…...
外卖霸王餐小程序、H5、公众号版外卖系统源码
最新外卖霸王餐小程序、H5、微信公众号版外卖系统源码、霸王餐美团、饿了么系统,粉丝裂变玩源码下载,外卖cps小程序项目,外卖红包cps带好友返利佣金分销系统程序、饿了么美团联盟源码,外卖cps带分销返利后端源码,基于L…...
amlogic 机顶盒关闭DLNA 后,手机还能搜到盒子
S905L3 带有投屏的功能,并通过 com.droidlogic.mediacenter.dlna.MediaCenterService 服务的启动和停止来开启和关闭DLNA功能,但是在测试中发现机顶盒关闭DLNA后,手机还能搜索到盒子。我在复测中发现关闭后有时很难很久搜索到盒子,…...
@Autowire、@Recourse用啥?
在使用IDEA写Spring相关的项目的时候,在字段上使用Autowired注解时,总是会有一个波浪线提示:Field injection is not recommended. 这是为啥呢?今天就来一探究竟。 众所周知,在Spring里面有三种可选的注入方式…...
[linux] 过滤警告⚠️
如果你在Python脚本中输出和执行脚本文件时想要过滤掉警告信息,可以尝试以下方法: 使用warnings模块:导入warnings模块并设置warnings.filterwarnings("ignore"),这将会忽略所有的警告信息。在需要过滤警告的部分之前添…...
Linux必备操作系统命令大全
一、基础命令 pwd 命令 pwd命令用于显示当前所在的工作目录的全路径名称。该命令无需任何参数,只需在终端窗口中输入 pwd 命令即可使用。 cd 命令 cd命令用于更改当前工作目录。该命令需要一个参数:目标目录名称。例如,若要进入 Document…...
【rtp】VideoTimingExtension 扩展的解析和写入
VideoTimingExtension 扩展有13个字节,并非都是字符串类型 class VideoTimingExtension {public:using value_type = VideoSendTiming;static constexpr RTPExtensionType kId = kRtpExtensionVideoTiming;static constexpr uint8_t kValueSizeBytes = 13...
网络安全CTF比赛有哪些事?——《CTF那些事儿》告诉你
目录 前言 一、内容简介 二、读者对象 三、专家推荐 四、全书目录 前言 CTF比赛是快速提升网络安全实战技能的重要途径,已成为各个行业选拔网络安全人才的通用方法。但是,本书作者在从事CTF培训的过程中,发现存在几个突出的问题࿱…...
Winform直接与Wpf交互
Winform项目中,可以直接使用wpf中的自定义控件和窗体 测试环境: vistual studio 2017 window 10 一 winform直接使用wpf的自定义控件 步骤如下: 1 新建winfrom项目,名为WinFormDemo,默认有一个名为Form1的窗体…...
Uni-app 调用微信地图导航功能【有图】
前言 我们在使用uni-app时,有时候会遇到需要开发地图和导航的功能,这些方法其实微信小程序的API已经帮我们封装好了 详见:微信小程序开发文档 接下来我们就演示如何用uni-app来使用他们 使用 <template><view><button type…...
Golang slice 通过growslice调用nextslicecap计算扩容
先来看一段代码 code: e : []int64{1, 2, 3}fmt.Println("cap of e before:", cap(e))e append(e, 4, 5, 6, 7)fmt.Println("cap of e after:", cap(e))output:cap of e before: 3 cap of e after: 8 为什么容量是8? append了的4个元素&…...
HTTP 协商缓存 Last-Modified,If-Modified-Since
浏览器第一次跟服务器请求一个资源,服务器在返回这个资源的同时,在respone header加上Last-Modified属性(表示这个资源在服务器上的最后修改时间): ----------------------------------------------------------------…...
零基础教程:Yolov5模型改进-添加13种注意力机制
1.准备工作 先给出13种注意力机制的下载地址: https://github.com/z1069614715/objectdetection_script 2.加入注意力机制 1.以添加SimAM注意力机制为例(不需要接收通道数的注意力机制) 1.在models文件下新建py文件,取名叫Sim…...
vue截取地址参数
const getQueryValueFn () >{// 获取当前页面的URLconst currentURL window.location.href;//创建一个URL对象来解析当前URL。URL对象提供了方便的属性和方法来处理URL的各个部分const url new URL(currentURL);// 使用URLSearchParams获取查询参数const queryParams ne…...
ubuntu 14.04更新GCC版本
按最基本的apt-get install gcc-8,不成功,提示如下。 按网上说的:apt-get update ,apt-get upgrade 后都无效果。 apt-cache search get 搜索后,发现资源链接里最新的也只有4.8.4所以不行。 需要更新资源链接,镜像地…...
AndroidUtil - 强大易用的安卓工具类库
官网 https://github.com/Blankj/AndroidUtilCode/blob/master/README-CN.md 项目介绍 AndroidUtilCode 🔥 是一个强大易用的安卓工具类库,它合理地封装了安卓开发中常用的函数,具有完善的 Demo 和单元测试,利用其封装好的 API…...
[多态设计模式]枚举
背景: 游戏服务器中,多态可以说体现的淋漓尽致。 如: 1.开启条件。有的系统是根据玩家等级,有的是根据通关第几关。 2.商店可能有不同类型的商店。 3.任务系统中,不同的计数类型,不同的任务目标类型。…...
【QT】QRadioButton的使用(17)
QRadioButton这个控件在实际项目中多用于多个QRadioButton控件选择其中一个这样的方式去执行,那么,今天这节就通过几个简单的例子来好好了解下QRadioButton的一个使用。 一.环境配置 1.python 3.7.8 可直接进入官网下载安装:Download Pyt…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
