当前位置: 首页 > news >正文

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后,手机还能搜索到盒子。我在复测中发现关闭后有时很难很久搜索到盒子&#xff0c…...

@Autowire、@Recourse用啥?

在使用IDEA写Spring相关的项目的时候,在字段上使用Autowired注解时,总是会有一个波浪线提示:Field injection is not recommended. 这是为啥呢?今天就来一探究竟。 众所周知,在Spring里面有三种可选的注入方式&#xf…...

[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培训的过程中,发现存在几个突出的问题&#xff1…...

Winform直接与Wpf交互

Winform项目中,可以直接使用wpf中的自定义控件和窗体 测试环境: vistual studio 2017 window 10 一 winform直接使用wpf的自定义控件 步骤如下: 1 新建winfrom项目,名为WinFormDemo,默认有一个名为Form1的窗体…...

Uni-app 调用微信地图导航功能【有图】

前言 我们在使用uni-app时&#xff0c;有时候会遇到需要开发地图和导航的功能&#xff0c;这些方法其实微信小程序的API已经帮我们封装好了 详见&#xff1a;微信小程序开发文档 接下来我们就演示如何用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&#xff1f; append了的4个元素&…...

HTTP 协商缓存 Last-Modified,If-Modified-Since

浏览器第一次跟服务器请求一个资源&#xff0c;服务器在返回这个资源的同时&#xff0c;在respone header加上Last-Modified属性&#xff08;表示这个资源在服务器上的最后修改时间&#xff09;&#xff1a; ----------------------------------------------------------------…...

零基础教程:Yolov5模型改进-添加13种注意力机制

1.准备工作 先给出13种注意力机制的下载地址&#xff1a; https://github.com/z1069614715/objectdetection_script 2.加入注意力机制 1.以添加SimAM注意力机制为例&#xff08;不需要接收通道数的注意力机制&#xff09; 1.在models文件下新建py文件&#xff0c;取名叫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&#xff0c;不成功&#xff0c;提示如下。 按网上说的&#xff1a;apt-get update ,apt-get upgrade 后都无效果。 apt-cache search get 搜索后&#xff0c;发现资源链接里最新的也只有4.8.4所以不行。 需要更新资源链接&#xff0c;镜像地…...

AndroidUtil - 强大易用的安卓工具类库

官网 https://github.com/Blankj/AndroidUtilCode/blob/master/README-CN.md 项目介绍 AndroidUtilCode &#x1f525; 是一个强大易用的安卓工具类库&#xff0c;它合理地封装了安卓开发中常用的函数&#xff0c;具有完善的 Demo 和单元测试&#xff0c;利用其封装好的 API…...

[多态设计模式]枚举

背景&#xff1a; 游戏服务器中&#xff0c;多态可以说体现的淋漓尽致。 如&#xff1a; 1.开启条件。有的系统是根据玩家等级&#xff0c;有的是根据通关第几关。 2.商店可能有不同类型的商店。 3.任务系统中&#xff0c;不同的计数类型&#xff0c;不同的任务目标类型。…...

【QT】QRadioButton的使用(17)

QRadioButton这个控件在实际项目中多用于多个QRadioButton控件选择其中一个这样的方式去执行&#xff0c;那么&#xff0c;今天这节就通过几个简单的例子来好好了解下QRadioButton的一个使用。 一.环境配置 1.python 3.7.8 可直接进入官网下载安装&#xff1a;Download Pyt…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...