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…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...