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');

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

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

相关文章

React中使用LazyBuilder实现页面懒加载方法二

前言: 在一个表格中,需要展示100条数据,当每条数据里面需要承载的内容很多,需要渲染的元素也很多的时候,容易造成页面加载的速度很慢,不能给用户提供很好的体验时,懒加载是优化页面加载速度的方…

Dynamic-Pix2Pix:改进 Pix2Pix 在有限的训练数据下性能问题

Dynamic-Pix2Pix:改进 Pix2Pix 在有限的训练数据下性能问题 核心思想Dynamic-Pix2Pix 网络结构效果总结 核心思想 论文:https://arxiv.org/ftp/arxiv/papers/2211/2211.08570.pdf 代码:https://github.com/pranoyr/dynamic-Pix2Pix.git 如…

Thinkphp框架,最新ICP备案查询系统源码,附搭建教程

源码介绍 最新ICP备案查询系统源码 附教程 thinkphp框架 本系统支持网址备案,小程序备案,APP备案查询,快应用备案查询 优势: 响应速度快,没有延迟,没有缓存,数据与官方同步

计算机网络:体系结构知识点汇总

文章目录 一、计算机网络概述1.1概念及功能1.2组成和分类1.3性能指标 二、体系结构与参考模型2.1分层结构、协议、接口、服务2.2OSI参考模型2.3TCP/IP参考模型 一、计算机网络概述 1.1概念及功能 计算机网络就是通过各个节点,这个节点包括终端的电脑,手…

SQL语句创建一个简单的银行数据库

目录 一、银行业务E-R图 二、数据库模型图 转换关系模型后: 三、创建数据库 3.1 创建银行业务数据库 四、创建表 4.1 创建客户信息表 4.2 创建银行卡信息表 4.3 创建交易信息表 4.4 创建存款类型表 结果如下: ​编辑 五、插入适量数据 5.1…

Oracle RAC集群启停

文章目录 一、了解集群信息二、RAC单节点启停1、停止Oracle RAC数据库实例2、停止节点上的Oracle Grid Infrastructure服务3、启动节点上的Oracle Grid Infrastructure服务4、启动Oracle RAC数据库实例 三、RAC集群启停1、停止数据库2、停止集群服务3、启动集群服务4、启动数据…

QDockWidget : 想要 top -> left -> rigt -> bottom 的布局实现

上图红圈中的实现,第一次想要实现,总会和想的不一样。 第一种情况 第二种情况 第三种情况 有时候为了达到一种效果,也算是煞费苦心了,且不说这个demo还是找的其他CSDN博主的,但是功夫不负有心人。 解决办法 先让 Doc…

Ubuntu Server 22.04 安装步骤纪录

Ubuntu Server 22.04 安装流程 取得安装程序 安装程序可以通过下方链接直接从官网下载就可以了,官网提供的是iso映像文件,安装前要先将iso映像文件刻录成光盘,或制作成USB开机随身碟。 前往 Ubuntu 官网 开始安装 STEP 1 选择要安装的操作…

完美调试android-goldfish(linux kernel) aarch64的方法

环境要求 Mac m1Mac m1 中 虚拟机安装aarch64 ubuntu22.02Mac m1安装OrbStack,并在其中安装 ubuntu20.04(x86_64) 构建文件系统 在虚拟机 aarch64 ubuntu22.02中构建 安装必要的库 sudo apt-get install libncurses5-dev build-essenti…

【重点】【DP】123.买卖股票的最佳时机III

题目 法1&#xff1a;单次遍历&#xff0c;Best! class Solution {public int maxProfit(int[] prices) {int f1 -prices[0], f2 0, f3 -prices[0], f4 0;for (int i 1; i < prices.length; i) {f1 Math.max(f1, -prices[i]);f2 Math.max(f2, f1 prices[i]);f3 Ma…

Python使用pip命令安装外部库-项目内安装外部库-全局安装外部库

一、前言 在进行Python项目开发时需要安装一些外部库来扩展项目功能&#xff0c;因此需要了解pip命令的详细使用。 二、基本语法 1.安装库 pip install 包名 2.安装特定版本 pip install 包名版本号 3.升级库 pip install --upgrade 包名 4.卸载库 pip uninstall 包名 5.查看已…

Ubuntu使用Docker部署Redis并实现远程访问本地数据库

文章目录 前言1. 安装Docker步骤2. 使用docker拉取redis镜像3. 启动redis容器4. 本地连接测试4.1 安装redis图形化界面工具4.2 使用RDM连接测试 5. 公网远程访问本地redis5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主要介绍如何在Ub…