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)

分页操作是程序员使用得比较多的。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/87004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【跟小嘉学习区块链】一、区块链基础知识与关键技术解析

系列文章目录 【跟小嘉学习区块链】一、区块链基础知识与关键技术解析 文章目录 系列文章目录[TOC](文章目录) 前言一、区块链基础1.1、区块链的来龙去脉1.1.1、区块链技术起源1.1.2、核心技术发展脉络 1.2、比特币产生的背景与现状1.2.1、现行货币体系存在的问题1.2.2、数字货…

我的Qt作品(19)使用Qt写一个轻量级的视觉框架---第2章,仿海康VM实现思维导图拖拽方式的算法流程图

上次写的第1章介绍了主界面的设计。 https://blog.csdn.net/libaineu2004/article/details/130277151 本次是第2章,主要介绍流程图的运行。 目前市面上视觉框架很多,主要有列表图方式和流程图方式。海康VM的流程图方式比较受用户的喜爱和欢迎&#xf…

【跟小嘉学 PHP 程序设计】二、PHP 基本语法

系列文章目录 【跟小嘉学 PHP 程序设计】一、PHP 开发环境搭建 【跟小嘉学 PHP 程序设计】二、PHP 基本语法 文章目录 系列文章目录@[TOC](文章目录)前言一、PHP基本语法1.1、hello,world1.2、PHP语法的其他形式1.2.1、简短形式(了解即可)1.2.2、Script 风格1.2.3、ASP 风格1…

2023华为杯研究生数学建模研赛E题出血脑卒中完整论文(含28个详细预处理数据及结果表格)

大家好呀,从发布赛题一直到现在,总算完成了全国研究生数学建模竞赛(数模研赛)E题完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。…

万字总结HTML超文本标记语言

一、前言:什么是网页? 网站是指在因特网上根据一定的规则,使用 HTML 等制作的用于展示特定内容相关的网页集合。网页是网站中的一“页”,通常是 HTML 格式的文件,它要通过浏览器来阅读。 网页是构成网站的基本元素,它通常由图片、链接、文字、声音、视频等元素组成。通常…

c#:System.Text.Json 的使用三(从Newtonsoft迁移)

环境: .net 6.0vs2022 系列篇: 《c#:System.Text.Json 的使用一》 《c#:System.Text.Json 的使用二》 《c#:System.Text.Json 的使用三(从Newtonsoft迁移)》 参考: 《MSDN: 从 Newt…

2023/09/21 day5 qt

将注册的账号密码存储到数据库中 登录的账号密码与数据库中的账号密码进行匹配 头文件 #ifndef DENGLU_H #define DENGLU_H #include <QMainWindow> #include <QDebug> #include <QIcon> #include <QLabel> #include <QLineEdit> #include &l…

数据库——理论基础

目录 1.1 什么是数据库 1.2 数据库管理系统&#xff08;DBMS&#xff09; 1.3 数据库和文件系统的区别 1.4 数据库的发展史 1.5常见的数据库 1.5.1关系型数据库 1.5.2 非关系型数据库 1.6 DBMS支持的数据模型 1.1 什么是数据库 数据&#xff1a;描述事物的符号记录 数…

李宏毅机器学习2023作业(目录)

2023.09.20更新 作业01的一键式执行Strong Baseline完整代码已整理好&#xff0c;提取码统一设置2023 【深度解析→博文总结】李宏毅机器学习2023作业01Regression(COVID-19 Cases Prediction) 【2023作业01一键式执行Strong Baseline完整代码】 【深度解析→博文总结】李宏毅机…

【精通嵌入式Linux编程】引导加载程序详解bootloader

必须做两件事情&#xff1a; 引导加载程序必须传递一个指针&#xff0c;指向保护硬件配置信息的结构&#xff0c; 必须传递一个指向内核命令行的指针 SRAM&#xff1a;不需要内存控制器的静态随机存储器 阶段一&#xff1a;ROM代码 复位或上电后立即运行的代码必须存再soc的片…

基于springboot+vue的客户关系管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

MySQL备份与恢复

MySQL备份与恢复一、备份1、数据备份的重要性2、数据备份分类2.1 物理备份2.2 逻辑备份 3、数据库备份策略4、常用的备份方法和工具5、数据库上云迁移 二、数据库完全备份1、简介2、物理冷备份与恢复2.1 物理冷备份2.2 备份恢复2.3 补充知识date 3、mysqldump备份与恢复3.1 完全…

文件系统之程序是怎么打开文件进行操作的

本篇文章自顶向下&#xff0c;从文件系统的上层出发讲到磁盘&#xff0c;帮助理解程序是如何打开文件并进行后序的读写操作的&#xff0c;读到后面&#xff0c;前面的一些疑惑就得到解决 介绍相关概念 注意&#xff0c;目录也是文件 文件描述符 每个进程都有一个指针*files…

【深度学习】BLIP: 用于统一的视觉-语言理解和生成的引导式语言图像预训练

BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation BLIP&#xff1a;用于统一的视觉-语言理解和生成的引导式语言图像预训练 论文&#xff1a;https://arxiv.org/abs/2201.12086 代码&#xff1a;https://github.…

NotePad++ 在行前/行后添加特殊字符内容方法

我们在处理数据时&#xff0c;会遇到需要在每行数据前面、后面、开头、结尾添加各种不一样的字符 如果数据不多&#xff0c;我们可以自己手动的去添加&#xff0c;但如果达到了成百上千行&#xff0c;此时再机械的手动添加是不现实的 这里教给大家如何快速的在数据每行的前后…

QT 绘画功能的时钟

.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPaintEvent> #include <QDebug> //信息调试类 #include <QPainter> #include <QPixmap> //图像引擎类 #include <QTime> #include <QTimer> …

秋招准备--基础知识复习--系统编程

lab1 进程 定义 进程的定义是操作系统中资源分配的基本单位&#xff0c;是程序的执行实体。具体地来分析这个定义的一体两面&#xff1a; 在资源分配方面&#xff0c;每个进程都有虚拟的进程空间&#xff0c;其中包括代码区&#xff0c;全局静态区&#xff0c;BSS区&#xff…

一文读懂 Redis 缓存系统

【摘要】本文介绍了Redis缓存原理、详细解析了缓存模型、缓存一致性和缓存异常场景。 【作者】李杰&#xff0c;专注于Java虚拟机技术、云原生技术领域的探索与研究。 尽管&#xff08;关系型&#xff09;数据库系统 (SQL) 带来了许多出色的属性&#xff0c;例如 ACID&#x…

Spring Boot Actuator使用指南

什么是 Spring Boot Actuator&#xff1f; Spring Boot Actuator 是 Spring Boot 提供的一种生产级别的特性&#xff0c;它可以帮助我们监控和管理 Spring Boot 应用&#xff0c;比如健康检查、审计、统计和 HTTP 追踪等。所有这些特性可以通过 JMX 或者 HTTP endpoints 来访问…

Linux系统编程——总结初识Linux(常用命令、特点、常见操作系统)

文章目录 UNIX操作系统&#xff08;了解&#xff09;Linux操作系统主要特征Linux和unix的区别和联系什么是操作系统常见的操作系统Ubuntu操作系统Ubuntu安装linux下的目录的类型(掌握)shell指令shell指令的格式文件操作相关指令系统相关命令网络相关命令其他命令软件安装相关的…