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

MySql8的简单使用(1.模糊查询 2.group by 分组 having过滤 3.JSON字段的实践)

MySql8的简单使用(1.模糊查询 2.group by 分组 having过滤 3.JSON字段的实践)

一.like模糊查询、group by 分组 having 过滤

建表语句

create table student(id int PRIMARY KEY,name char(10),age int,sex char(5));
alter table student add height int(10);insert into student(id,name,age,sex,high) value (001,"张三",9,"男",100);
insert into student(id,name,age,sex,high) value (002,"张四",10,"男",110);
insert into student(id,name,age,sex,high) value (003,"张三淡",9,"男",120);
insert into student(id,name,age,sex,high) value (004,"李个",10,"男",10);
insert into student(id,name,age,sex,high) value (005,"刘能",10,"女",20);
insert into student(id,name,age,sex,high) value (006,"吴谷歌",20,"男",60);
insert into student(id,name,age,sex,high) value (007,"竺琦在",10,"男",80);

1.1 like 模糊查询

  • 在MySQL中,like进行模糊查询。
  • 通配符 % 表示任意字符序列(包括空字符),
  • 通配符_ 表示任意单个字符。
//姓名包含  “三”
select * from student where name like '%三%';
//姓名 以 '张'开头
select * from student where name like '张%';
//姓名 以 '张'开头,且只有两个字
select * from student where name like '张_';
//姓名 以 '张'开头,且只有三个字
select * from student where name like '张__';

1.2 group by 分组 having 过滤

  • GROUP BY和HAVING是SQL中一起使用的两个关键字,用于对查询结果进行分组和过滤。

  • GROUP BY关键字用于将查询结果按照指定的列进行分组。它将相同值的行归为一组,并为每个组生成一个结果行。通常与聚合函数(如COUNT、SUM、AVG、MAX、MIN等)一起使用,以对每个组执行计算。

  • HAVING关键字在GROUP BY之后分组结果进行过滤。HAVING子句中的条件表达式只包含聚合函数,用于进一步筛选分组。

  1. 分组
    select age,COUNT(id) as num from student group by age;

  2. 过滤
    select age,COUNT(id) as num from student group by age having num >1 and avg(high) > 100;

  3. 首先,表中选择high >= 100的行
    然后,按照age进行分组,对每个分组计算id的数量,命名为num。
    最后,使用HAVING子句筛选出满足条件num > 1的分组
    select age,COUNT(id) as num from student WHERE high >= 100 group by age having num >1;

  • 分组后,将一列的值聚合为一个数组
  1. GROUP_CONCAT函数
    select age ,GROUP_CONCAT(name ORDER BY id desc) as arrayString from student group by age;
    将每个分组内的name值连接成一个以逗号分隔的字符串,按id降序排列,命名为jsonArray列
    在这里插入图片描述

  2. JSON_ARRAYAGG函数
    select age ,JSON_ARRAYAGG(name ) as jsonArray from student group by age;
    将每个分组内的name值连接成JSON数组,命名为jsonArray列

在这里插入图片描述

二.MySql8中JSON类型的使用

2.1 JSON对象

2.1.0 建表,类型选择 json
CREATE TABLE `orders` (`order_id` int NOT NULL,`customer_name` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,`order_date` date DEFAULT NULL,`order_items` json DEFAULT NULL,PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;
2.1.1插入数据
---两种插入JSON都可以
INSERT INTO `orders` VALUES (1, 'John', '2021-01-01', '{\"item1\": \"book\", \"item2\": \"pen\", \"item3\": \"pencil\"}');
INSERT INTO `orders` VALUES (2, 'Norn', '2021-01-01', '{\"item1\": {\"item1\": \"book2\", \"item2\": \"pe2n\", \"item3\": \"pencil2\"}, \"item2\": \"pe2n\", \"item3\": \"pencil2\"}');
INSERT INTO `orders` VALUES (3, 'Noo', '2021-01-01', '{"item1": "book", "item2": "pen", "item3": "pencil"}');
2.1.2 json对象的增删改查
---json对象,KEY作为查询条件,调用: $.item1.item2
select * from orders where order_items ->>'$.item2' ='pen';
select * from orders where order_items ->>'$.item1.item2' ='pe2n';select * from orders where order_id = 1;---json对象:新增 KEY
UPDATE orders
SET order_items = JSON_SET(order_items, '$.item4', 'new_item')
WHERE order_id = 1;---json对象:修改 KEY
UPDATE orders
SET order_items = JSON_SET(order_items, '$.item4', 'update_value')
WHERE order_id = 1;---json对象:删除 KEY
UPDATE orders
SET order_items = JSON_REMOVE(order_items, '$.item4')
WHERE order_id = 1;

2.2 JSON 数组

2.2.0 建表,选择 json类型
CREATE TABLE my_table (id INT PRIMARY KEY,json_array JSON
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;
2.2.1 插入数据
INSERT INTO my_table (id, json_array)VALUES (1, '[1, 2, 3, 4, 5]');
INSERT INTO my_table (id, json_array)VALUES (2, '[11, 12, 13, 14, 15]');
2.2.2 增删改查
SELECT id,json_array FROM my_table WHERE id = 1;---在JSON数组的指定位置添加一个元素:UPDATE my_table
SET json_array = JSON_ARRAY_INSERT(json_array, '$[0]', 13)
WHERE id = 1;---JSON数组:末尾添加一个元素6UPDATE my_table
SET json_array = JSON_ARRAY_APPEND(json_array, '$', 6)
WHERE id = 1;---JSON数组:修改UPDATE my_table SET json_array = JSON_REPLACE(json_array, '$[2]', 10) WHERE id = 1;---JSON数组:删除:UPDATE my_table  
SET json_array = JSON_REMOVE(json_array, '$[2]') WHERE id = 1;
2.2.3 JSON数组作为查询条件

作为查询条件使用 JSON_CONTAINS函数,2种写法

  1. JSON_CONTAINS(json_array, ‘2’)
  2. JSON_CONTAINS(json_array, ‘[2, 6]’)
  • 返回数组的元素:JSON数组中索引为0的元素
    JSON_EXTRACT(json_array, ‘$[0]’)
  • 示例
  1. 查询JSON数组中同时包含1和2的记录,返回id,json_array
    SELECT id, json_array FROM my_table WHERE JSON_CONTAINS(json_array, ‘[1, 2]’);

  2. 查询JSON数组包含值2的记录,返回id,数组中索引为0的元素
    SELECT id, JSON_EXTRACT(json_array, ‘$[0]’) AS first_element FROM my_table WHERE JSON_CONTAINS(json_array, ‘2’);

2.3 SpringBoot集成MyBatis操作MySql8的JSON类型

SpringBoot集成MyBatis操作MySql8的JSON类型

2.3 json类型的全部sql

--------------------------------JSON--------------------
---------JSON对象--
CREATE TABLE `orders` (`order_id` int NOT NULL,`customer_name` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,`order_date` date DEFAULT NULL,`order_items` json DEFAULT NULL,PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;---两种插入JSON都可以
INSERT INTO `orders` VALUES (1, 'John', '2021-01-01', '{\"item1\": \"book\", \"item2\": \"pen\", \"item3\": \"pencil\"}');
INSERT INTO `orders` VALUES (2, 'Norn', '2021-01-01', '{\"item1\": {\"item1\": \"book2\", \"item2\": \"pe2n\", \"item3\": \"pencil2\"}, \"item2\": \"pe2n\", \"item3\": \"pencil2\"}');
INSERT INTO `orders` VALUES (3, 'Noo', '2021-01-01', '{"item1": "book", "item2": "pen", "item3": "pencil"}');---json对象,KEY作为查询条件,调用: $.item1.item2
select * from orders where order_items ->>'$.item2' ='pen';
select * from orders where order_items ->>'$.item1.item2' ='pe2n';select * from orders where order_id = 1;---json对象:新增 KEY
UPDATE orders
SET order_items = JSON_SET(order_items, '$.item4', 'new_item')
WHERE order_id = 1;---json对象:修改 KEY
UPDATE orders
SET order_items = JSON_SET(order_items, '$.item4', 'update_value')
WHERE order_id = 1;---json对象:删除 KEY
UPDATE orders
SET order_items = JSON_REMOVE(order_items, '$.item4')
WHERE order_id = 1;---------JSON 数组-------CREATE TABLE my_table (id INT PRIMARY KEY,json_array JSON
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;INSERT INTO my_table (id, json_array)VALUES (1, '[1, 2, 3, 4, 5]');
INSERT INTO my_table (id, json_array)VALUES (2, '[11, 12, 13, 14, 15]');SELECT id,json_array FROM my_table WHERE id = 1;---在JSON数组的指定位置添加一个元素:UPDATE my_table
SET json_array = JSON_ARRAY_INSERT(json_array, '$[0]', 13)
WHERE id = 1;---JSON数组:末尾添加一个元素6UPDATE my_table
SET json_array = JSON_ARRAY_APPEND(json_array, '$', 6)
WHERE id = 1;---JSON数组:修改UPDATE my_table SET json_array = JSON_REPLACE(json_array, '$[2]', 10) WHERE id = 1;---JSON数组:删除:UPDATE my_table  
SET json_array = JSON_REMOVE(json_array, '$[5]') WHERE id = 1;---JSON数组:作为查询条件---  作为查询条件使用 JSON_CONTAINS函数,2种写法
---   JSON_CONTAINS(json_array, '2')
---   JSON_CONTAINS(json_array, '[2, 6]')
---  返回数组的元素:JSON数组中索引为0的元素
---   JSON_EXTRACT(json_array, '$[0]')--- 1.查询JSON数组中同时包含12的记录,返回id,json_array
SELECT id, json_array FROM my_table  WHERE JSON_CONTAINS(json_array, '[1, 2]');--- 2.查询JSON数组包含值2的记录,返回id,数组中索引为0的元素
SELECT id, JSON_EXTRACT(json_array, '$[0]') AS first_element   FROM my_table  WHERE JSON_CONTAINS(json_array, '2');

相关文章:

MySql8的简单使用(1.模糊查询 2.group by 分组 having过滤 3.JSON字段的实践)

MySql8的简单使用(1.模糊查询 2.group by 分组 having过滤 3.JSON字段的实践) 一.like模糊查询、group by 分组 having 过滤 建表语句 create table student(id int PRIMARY KEY,name char(10),age int,sex char(5)); alter table student add height…...

数据监控-Prometheus/Grafana

一、数据监控Prometheus 1、什么是Prometheus Prometheus是由SoundCloud开源监控告警解决方案,从2012年开始编写代码,到2015年github上开源以来,吸引不少用户以及公司的使用。Prometheus作为新一代的开源解决方案,很多理念与Google SRE的运维之道不谋而合。 2、Promet…...

Compose | UI组件(三) | TextField() 输入框组件

文章目录 TextField() 简介TextField() 输入框例子TextField() 输入框添加装饰OutlinedTextField 边框样式输入框BasicTextField 输入框组件 总结 TextField() 简介 在 Compose 中,TextField() 组件表示文本输入框 ExperimentalMaterial3Api Composable fun TextF…...

组件冲突、data函数、组件通信

文章目录 1.组件的三大组成部分 - 注意点说明2.组件的样式冲突(用 scoped 解决)3.data是一个函数4.组件通信1.什么是组件通信?2.不同的组件关系 和 组件通信方案分类 5.prop详解prop 校验①类型校验②完整写法(类型,非…...

【C++杂货铺】详解类和对象 [上]

博主:代码菌-CSDN博客 专栏:C杂货铺_代码菌的博客-CSDN博客 目录 🌈前言🌈 📁 面向对象语言的特性 📁 类 📂 概念 📂 定义 📁 访问限定符 📂分类 &#x…...

Linux 驱动开发基础知识—— 驱动设计的思想(六)

个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…...

Mybatis-Plus入门

Mybatis-Plus入门 MyBatis-Plus 官网:https://mp.baomidou.com/ 1、简介 MyBatis-Plus (简称 MP) 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、 提高效率而生。 https://github.com/baomidou/mybatis-p…...

MODNet 剪枝再思考: 优化计算量的实验历程分享

目录 1 写在前面 2 模型分析 3 遇到问题 4 探索实验一 4.1 第一部分 4.2 第二部分 Error 1 Error 2 4.3 实验结果 ①参数量与计算量 ②模型大小 ③推理时延 5 探索实验二 5.1 LR Branch 5.2 HR Branch 5.2.1 初步分析 5.2.2 第一部分 enc2x 5.2.3 第二部分 en…...

Flink多流转换(1)—— 分流合流

目录 分流 代码示例 使用侧输出流 合流 联合(Union) 连接(Connect) 简单划分的话,多流转换可以分为“分流”和“合流”两大类 目前分流的操作一般是通过侧输出流(side output)来实现&…...

CSS高级技巧导读

1,精灵图 1.1 为什么需要精灵图? 目的:为了有效地减少服务器接收和发送请求的次数,提高页面的加载速度 核心原理:将网页中的一些小背景图像整合到一张大图中,这样服务器只需要一次请求就可以了 1.2 精灵…...

Redis数据类型-string

Redis-string类型 Redis中的数据类型全局命令get&setredis中变量设置的过期时间是如何检测的 keysexistsdelexpirettlpexpirepttltype string数据类型的底层的数据结构操作string类型的常用命令get&setmset&mgetsetnxsetexpsetexincr&decrincrby&decrbyinc…...

【HDFS】一天一个RPC系列--updatePipeline

updatePipeline这个RPC一般都会配合updateBlockForPipeline RPC一起使用。 先updateBlockForPipeline、然后再updatePipeline。 建议先阅读【HDFS】一天一个RPC系列–updateBlockForPipeline 本文目标是弄清楚以下问题: 弄清updatePipeline这个RPC的作用。弄清updatePipeli…...

CentOS 7 上使用 wget 安装 Nginx 并设置开机自启

在 CentOS 7 上使用 wget 安装 Nginx 并设置开机自启,你可以按照以下步骤进行操作: 首先,确保你已经以 root 用户或者具有 sudo 权限的用户身份登录到 CentOS 7。 安装 Nginx 所需的依赖包。在终端中运行以下命令: sudo yum inst…...

Android源码设计模式解析与实战第2版笔记(一)

第一章 走向灵活软件之路 — 面向对象的六大原则 优化代码的第一步 — 单一职责原则 单一职责原则的英文名称是Single Responsibility Principle,缩写是SRP。 SRP:就一个类而言,应该仅有一个引起它变化的原因。 一个类中应该是一组相关性很…...

HTML+JavaScript-06

节点操作 目前对于节点操作还是有些困惑&#xff0c;只是了解简单的案例 具体操作可以看菜鸟教程&#xff1a;https://www.runoob.com/js/js-htmldom-elements.html 案例-1 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8…...

单元测试——题目十二

目录 题目要求: 定义类 测试类 题目要求: 根据下列流程图编写程序实现相应处理,执行j=10*x-y返回文字“j1=:”和计算值,执行j=(x-y)*(10⁵%7)返回文字“j2=:”和计算值,执行j=y*log(x+10)返回文字“j3=:”和计算值。 编写程序代码,使用JUnit框架编写测试类对编写的…...

详解:大数据信用报告信用等级怎么看?

在大数据技术的加持之下&#xff0c;金融风控也逐渐运用大数据技术了&#xff0c;也就是我们说的大数据或者大数据信用&#xff0c;在大数据信用报告中对个人的综合信用风险有着等级划分&#xff0c;那大数据信用报告信用等级怎么看呢?本文为你详细介绍一下&#xff0c;感兴趣…...

rsync命令常用参数详解

1、语法 Usage: rsync [OPTION]… SRC [SRC]… DEST or rsync [OPTION]… SRC [SRC]… [USER]HOST:DEST or rsync [OPTION]… SRC [SRC]… [USER]HOST::DEST or rsync [OPTION]… SRC [SRC]… rsync://[USER]HOST[:PORT]/DEST or rsync [OPTION]… [USER]HOST:SRC [DEST] or r…...

基于SpringBoot实现策略模式提供系统接口扩展能力

相信我们对策略模式都有耳闻&#xff0c;但是可能不知道它在项目中具体能有什么作用&#xff0c;我们需要在什么场景下才能去尽可能得去使用策略模式。 这里我简单的列出一个我之前在公司做的一个需求&#xff1a;跟第三方oa系统对接接口&#xff0c;对方需要回调我们当前系统…...

v43-47.problems

1.for循环 一般地&#xff0c;三步走&#xff1a; for&#xff08;初始化&#xff1b;表达式判断&#xff1b;递增/递减&#xff09; &#xff5b; ....... &#xff5d; 但是&#xff0c;如果说声明了全局变量&#xff0c;那么第一步初始化阶段可以省略但是要写分号‘ ; ’…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...