(新手友好)MySQL学习笔记(6):分组查询,正则表达式

目录

分组查询

创建分组

过滤分组

分组查询练习

正则表达式

匹配单个实例

匹配多个实例

正则表达式练习

练习答案

分组查询练习答案

正则表达式练习答案


分组查询

创建分组

        group by 子句根据一个多个字段结果进行分组分组的字段上可以使用countsumavg等聚合函数但是聚合函数不能出现在group by的后边这点where一样。

select 字段1[,字段2,function(字段1),function(字段2),....]
from 表名
group by 字段;

 下面给两个例子区分wheregroup by适用场景

#统计部门ID为20的员工数
select count(*) from emp where deptno=20
#统计每个部门的人数
select deptno,count(*)
from emp
group by deptno;
注意:
  • 如果分组列中具有NULL值,则NULL值将作为一个分组返回,如果列中有多行NULL值,它们将作为一组。
  • group by 子句必须出现在where子句后边,order by子句之前,意思就是分组前过滤出符合where 条件的数据,再将这部分数据按照group by条件进行分组

过滤分组

having 子句having 非常类似where唯一差别where过滤having 过滤分组having 必须group by一起使用

havingwhere区别where分组过滤having分组过滤但是聚合函数count()可以在having使用

举两个例子

#统计部门中员工超过5人的部门的员工数
select deptno,count(*)
from emp 
group by deptno
having count(*) > 5;#统计部门中员工月薪超过1000的员工超过两人的部门的员工数
select deptno,count(*)
from emp
where sal > 1000
group by deptno
having count(*) > 2;

分组查询练习

练习答案仍在最后

1. 查询 公司 有哪 几种 岗位 以及 每个岗位 人数

2.计算每个岗位的最高薪水并且到高进行排序

3.计算每个部门平均薪水

4.计算不同部门不同岗位最高薪水

5.找出每个工作岗位最高薪水manager之外

6.找出每个工作岗位平均薪水显示平均薪水大于2000

正则表达式

        regexp操作符regexp操作符后边跟的就是正则表达式正则表达式作用匹配文本将一个模式正则表达式)一个文本串进行比较

like与regexp区别:

        like匹配整个如果匹配文本列值中出现(没有配合其他通配符)立刻将找不到regexp列值进行匹配如果匹配文本列值中出现regexp将会找到相应行将被返回

下面举个例子帮助理解

#不加通配符时like仅仅会找到名字为s的员工
select * from emp where ename like "s";
#加通配符后like会找到名字包含s的员工
select * from emp where ename like "%s%";
#regexp则会直接找到名字里包含s的员工
select * from emp where ename regexp "s";

匹配单个实例

  • |表示匹配其中之一使用 | 从功能类似or
  • [ ]匹配字段之一[ ]另一种形式or语句例如[123][1|2|3]缩写
  • [ - ]匹配范围使用 - 来定义一个范围例如[1-3],[a-z]
  • \\转义字符多数正则表达式使用单个反斜杠作为转义字符MySQL要求两个反斜杠(MySQL自己解释一个,正则表表达式库解释另一个)

下面有几个例子帮助理解

#查询字段中是否包含a或b
select "acddp" regexp "[ab]";
#查询字段中是否包含1-5的任意一个数字
select "89445687" regexp "[1-5]";
#查询字段中是否包含"[1-5]"字段
select "_ajegdbas" regexp "\\[1-5]";
  • 匹配字符类存在找出你自己经常使用数字所有字母字符或者所有数字字母字符匹配为了更方便工作可以使用预定义字符集称为字符类稍作了解工作上用得到印象找得到就好可以做笔记

说明

[[:alnum:]]

任意字母数字(同[a-zA-Z0-9])

[[:alpha:]]

任意字符(同[a-zA-Z])

[[:blank:]]

空格制表(同[\\t])

[[:cntrl:]]

ASCII控制字符(ASCII 0 到31 和127)

[[:digit:]]

任意数字(同 [0-9])

[[:graph:]]

[:print:] 相同不包括空格

[[:lower:]]

任意小写字母(同[a-z])

[[:print:]]

任意可打印字符

[[:punct:]]

既不在[[:alnum:]]也不[[:cntrl:]]任意字符

[[:space:]]

包括空格在内任意空白字符(同[\\f\\n\\r\\t\\v])

[[:upper:]]

任意大写字母(同[A-Z])

[[:xdigit:]]

任意十六进制数字(同[a-fA-F0-9])

匹配多个实例

  • 常用元字符

元字符

说明

.

匹配任意字符

^

匹配字符串的开始^在[]表示否定

$

匹配字符串结束

几个例子帮助大家理解

#查询字符串中是否包含任意字符+'a'的子字符串
select 'baan' regexp '.a';#'ba'就属于任意字符+'a'的子字符串
#查询字符串开头是否包括'bn'子字符串
select 'baan' regexp '^bn';
#查询字符串结尾是否包括'bn'子字符串
select 'baan' regexp 'bn$';
  • 重复元字符(修饰前一个字符)

元字符

说明

*

任意匹配

+

一个多个匹配(等于{1,})

?

01(等于{0,1})

{n}

指定匹配

{n,}

不少于只等数目匹配

{n,m}

匹配数目范围(m不超过255)

几个例子帮助理解

#查询字符串中是否出现'bn','ban','baan','baaan'等子字符串
select 'baaaaan' regexp 'ba*n';#'*'仅仅修饰'a'字符
#查询字符串中是否出现'ban','baan','baaan'等'a'不少于1个的子字符串
select 'baaaan' regexp 'ba{1,}n';#同样的'{1,}'仅修饰'a'字符

正则表达式练习

利用正则表达式进行查询结果写出来(字串存在为1或不存在为0),答案同样放在最后

select 'baan' regexp '^ba*n';
select 'bn' regexp '^ba*n';
select 'bn' regexp '^ba+n';
select 'bn' regexp '^ba?n';
select 'baan' regexp '^ba?n';select 'pin' regexp 'pi|apa';
select 'pin' regexp '^(pi|apa)$';
select 'apa' regexp '^(pi|apa)$';
select 'pin' regexp '^(p|qin)$';
select 'pin' regexp '^([pq]in)$';select 'fofo' regexp '^fo';
select 'fo\no' regexp '^fo\no$';
select 'fo\no' regexp '^fp\\no';
select 'fo\eo' regexp '^fo\\eo$';
select 'fo\|o' regexp '^fo\\|o$';
select 'fofo' regexp '^fo';

练习答案

分组查询练习答案

#查询该公司有哪几种岗位以及每个岗位的人数
select job,count(*)
from emp
group by job;
#计算每个岗位的最高薪水,并且由低到高进行排序
select job,max(sal)
from emp
group by job
order by max(sal) desc;
#计算每个部门平均薪水
select deptno,avg(sal)
from emp 
group by deptno;
#计算不同部门不同岗位的最高薪水
select deptno,job,max(sal)
from emp 
group by deptno,job;
#找出每个工作岗位的最高薪水,除manager之外
select job,max(sal)
from emp 
where job not like "manager"
group by job;
#找出每个工作岗位的平均薪水,显示平均薪水大于2000的
select job,avg(sal)
from emp 
group by job
having avg(sal) > 2000;

正则表达式练习答案

select 'baan' regexp '^ba*n';#1
select 'bn' regexp '^ba*n';#1
select 'bn' regexp '^ba+n';#0
select 'bn' regexp '^ba?n';#1
select 'baan' regexp '^ba?n';#0select 'pin' regexp 'pi|apa';#1
select 'pin' regexp '^(pi|apa)$';#0
select 'apa' regexp '^(pi|apa)$';#1
select 'pin' regexp '^(p|qin)$';#0
select 'pin' regexp '^([pq]in)$';#1select 'fofo' regexp '^fo';#1
select 'fo\no' regexp '^fo\no$';#1
select 'fo\no' regexp '^fp\\no';#0
select 'fo\eo' regexp '^fo\\eo$';#1
select 'fo\|o' regexp '^fo\\|o$';#1
select 'fofo' regexp '^fo';#1

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

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

相关文章

Android 之 kotlin 语言学习笔记四(Android KTX)

一、Android KTX 简介 Android KTX 是包含在 Android Jetpack 及其他 Android 库中的一组 Kotlin 扩展程序。KTX 扩展程序可以为 Jetpack、Android 平台及其他 API 提供简洁的惯用 Kotlin 代码。为此,这些扩展程序利用了多种 Kotlin 语言功能,其中包括&…

云原生思维重塑数字化基座:从理念到实践的深度剖析

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:云原生为何成为数字化的“基础设施语言”? 随着5G、人工智能、物联网等技术逐步进入规模化落地阶段&am…

【C/C++】STL实现版本为什么比手写版本高?

文章目录 为什么标准库版本效率更高?1 具体介绍1.1 **内联优化(Inlining)和模板展开**1.2 **分支预测友好(Branch Prediction)**1.3 **迭代器解耦 静态分发**1.4 **代码紧凑,编译器优化空间大**1.5 **高质…

35.成功解决编写关于“江协科技”编写技巧第二期标志位积累的问题

江科大学长又发布了第二期的编写技巧! 大家可以看看:https://space.bilibili.com/383400717 最后面给了一个未完成的任务: 这里我已经把这个问题给解决了! 总代码放在资源里面,key.c放在文章最后面!同时感…

STM32什么是寄存器

提示:文章 文章目录 前言一、背景二、2.12.2 三、3.1 总结 前言 前期疑问: 1、什么是寄存器? 答:在4GB的地址空间中,512MB的block2上,每4个字节组成32位,这个32位为一个单元,控制&a…

【Pinia】Pinia和Vuex对比

Pinia 是 Vue 官方团队成员专门开发的一个全新状态管理库,并且 Vue 的官方状态管理库已经更改为了 Pinia。 在 Vuex 官方仓库中也介绍说可以把 Pinia 当成是不同名称的 Vuex 5,这也意味不会再出 5 版本了。 优点 1. 更加轻量级,压缩后提交只…

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…

Oracle双平面适用场景讨论会议

4月28日,我在杭州组织召开了Oracle双平面会议讨论沙龙。在国产化数据库浪潮的今天,Oracle数据库作为国产数据库的应急库,在国产数据库发生故障或者性能下降时,如何更好的使用Oracle。会议主题如下: 1、背景与痛点速览&…

10.Linux进程信号

1. 理解信号 信号VS信号量 老婆:老婆饼-》没有任何关系!信号:闹钟,上课铃声,脸色...人-》进程;信号中断人正在做的事,是一种事件的异步通知机制; 我们自习一会,等张三回…

求解插值多项式及其余项表达式

例 求满足 P ( x j ) f ( x j ) P(x_j) f(x_j) P(xj​)f(xj​) ( j 0 , 1 , 2 j0,1,2 j0,1,2) 及 P ′ ( x 1 ) f ′ ( x 1 ) P(x_1) f(x_1) P′(x1​)f′(x1​) 的插值多项式及其余项表达式。 解: 由给定条件,可确定次数不超过3的插值多项式。…

C++刷题:日期模拟(1)

(注:本文所展示代码均为本人所写,不一定为最优) 我们首先用纯逻辑和手动计算来拆解日期模拟题,再来代码实现,看看这些问题的底层思路怎么玩明白~ 一、基础日期计算:直接算“过几天是…

深入剖析Nginx:从入门到高并发架构实战

深入剖析Nginx:从入门到高并发架构实战 摘要:本文全面解析Nginx的核心功能、架构原理及实战配置,涵盖负载均衡、反向代理、动静分离等高级应用场景,助你构建高性能Web服务架构。 一、Nginx是什么?为什么它如此重要&…

Qt客户端技巧 -- 窗口美化 -- 圆角窗口

不解析&#xff0c;直接给代码例子 利用窗口重绘事件处理函数paintEvent main.cpp #include <QtCore/qglobal.h> #if QT_VERSION > 0x050000 #include <QtWidgets/QApplication> #else #include <QtGui/QApplication> #endif#include "roundedwin…

Three.js学习笔记-三要素

Three.js 学习笔记-三要素 一、Three.js 简介 (一)前世今生 Three.js 是一款运行在浏览器中的 3D 引擎,由 Ricardo Cabello(Mr.doob)在 2010 年 4 月于 GitHub 首次发布 。其起源可追溯到本世纪初,代码最初用 ActionScript 编写,2009 年移植到 JavaScript。随着 Web…

动力电池点焊机:驱动电池焊接高效与可靠的核心力量|比斯特自动化

在新能源汽车与储能设备需求激增的背景下&#xff0c;动力电池的制造工艺直接影响产品性能与安全性。作为电芯与极耳连接的核心设备&#xff0c;点焊机如何平衡效率、精度与可靠性&#xff0c;成为电池企业关注的重点。 动力电池点焊机的核心功能是确保电芯与极耳的稳固连接。…

OpenCV CUDA模块图像处理------创建一个模板匹配(Template Matching)对象函数createTemplateMatching()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 创建一个用于在 GPU 上执行模板匹配的 TemplateMatching 对象。 该函数返回一个指向 TemplateMatching 的智能指针&#xff08;Ptr&#xff09;…

natapp 内网穿透失败

连不上网络错误调试排查详解 - NATAPP-内网穿透 基于ngrok的国内高速内网映射工具 如何将DNS服务器修改为114.114.114.114_百度知道 连不上/错误信息等问题解决汇总 - NATAPP-内网穿透 基于ngrok的国内高速内网映射工具 nslookup auth.natapp.cnping auth.natapp.cn

游戏(game)

题目描述 小明最近迷上了一款游戏&#xff0c;并且很想成为这款游戏的高手&#xff0c;这款游戏需要用 资源来买装备。他刚开始的资源价值为0,于是他每天都会做日常任务来获得价值为1的资源。 这款游戏中有每日商店&#xff0c;小明已经提前知道了接下来n天会出现的装备&#x…

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…

关于脏读,幻读,可重复读的学习

mysql 可以查询当前事务隔离级别 默认是RR repeatable-read 如果要测脏读 要配成未提交读 RU 读到了未提交的数据。 3.演示不可重复读 要改成提交读 RC 这个是指事务还未结束&#xff0c;其他事务修改了值。导致我两次读的不一样。 4.RR–可以解决不可重复读 小总结&…