深入了解MySQL中的JSON_ARRAYAGG和JSON_OBJECT函数

在MySQL数据库中,JSON格式的数据处理已经变得越来越常见。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它可以用来存储和表示结构化的数据。MySQL提供了一些功能强大的JSON函数,其中两个关键的函数是JSON_ARRAYAGG和JSON_OBJECT。本文将深入探讨这两个函数的用途、语法和示例,以帮助您更好地理解它们的功能和用法。

JSON_ARRAYAGG函数

JSON_ARRAYAGG函数用于将查询结果中的多个行合并为一个JSON数组。这对于在一个查询中汇总多个行的数据非常有用。以下是JSON_ARRAYAGG函数的基本语法:

JSON_ARRAYAGG(expression)
  • expression:要包含在数组中的表达式或列。

示例

我们可以使用JSON_ARRAYAGG函数将com_province 表中所有的省份名称合并为一个JSON数组:

# 查询省份表中所有的省份名称的JSON数组
select JSON_ARRAYAGG(province_name ) from com_province;

这将返回一个包含31省份的JSON数组:

["北京", "天津", "河北省", "山西省", "内蒙古自治区", "辽宁省", "吉林省", "黑龙江省", "上海", "江苏省", "浙江省", "安徽省", "福建省", "江西省", "山东省", "河南省", "湖北省", "湖南省", "广东省", "广西壮族自治区", "海南省", "重庆", "四川省", "贵州省", "云南省", "西藏自治区", "陕西省", "甘肃省", "青海省", "宁夏回族自治区", "新疆维吾尔自治区"]

JSON_OBJECT函数

JSON_OBJECT函数用于创建一个JSON对象,其中包含指定的键值对。这对于生成包含特定数据的JSON对象非常有用。以下是JSON_OBJECT函数的基本语法:

JSON_OBJECT(key1, value1, key2, value2, ...)
  • key1, value1, key2, value2, …:键值对,键是字符串,值可以是任何有效的表达式。

示例:

使用JSON_OBJECT函数创建一个包含省份名称和省份编码的JSON对象

# 使用JSON_OBJECT函数创建一个包含省份名称和省份编码的JSON对象
select JSON_OBJECT('省份名称',province_name,'省份编码',province_code ) from com_province;

_20230911225815.png

实战示例

我们有三张表,分别存储省份信息、地市信息和行政区信息,现在需要给客户端提供一个省市区的json数据,我们就可以使用JSON_ARRAYAGGJSON_OBJECT 完成:

SELECTJSON_ARRAYAGG(JSON_OBJECT('code',T1.province_code,'name',T1.province_name,'children',(SELECTJSON_ARRAYAGG( JSON_OBJECT( 'code', T2.city_code, 'name', T2.city_name,'children',(SELECTJSON_ARRAYAGG( JSON_OBJECT( 'code', T3.area_code, 'name', T3.area_name ) ) AS test3 FROMcom_area T3 WHERET3.city_code = T2.city_code ORDER BY T3.sort asc) ) ) AS test2 FROMcom_city T2 WHERET2.province_code = T1.province_code  ORDER BY T2.sort asc) ) ) AS test 
FROMcom_province T1   ORDER BY  T1.sort asc

结果:

在这里插入图片描述

结论

JSON_ARRAYAGGJSON_OBJECT是MySQL中处理JSON数据的强大工具。JSON_ARRAYAGG用于合并多个行的数据为一个JSON数组,而JSON_OBJECT用于创建包含键值对的JSON对象。这些函数可以帮助您在数据库中更有效地操作和查询JSON数据,从而满足各种需求。无论您是在开发Web应用程序还是进行数据分析,了解如何使用这些函数都将对您的工作非常有帮助。希望本文对您深入了解JSON_ARRAYAGGJSON_OBJECT函数有所帮助。

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

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

相关文章

SpringBoot实战(二十四)集成 LoadBalancer

目录 一、简介1.定义2.取代 Ribbon3.主要特点与功能4.LoadBalancer 和 OpenFeign 的关系 二、使用场景一:Eureka LoadBalancer服务A:loadbalancer-consumer 消费者1.Maven依赖2.application.yml配置3.RestTemplateConfig.java4.DemoController.java 服务…

笔记01:第一行Python

NameError 名字不含特殊符号(只能是英文、数字、下划线、中文等)名字区分大小写名字先定义后使用 SyntaxError 不符合Python语法书写规范除了语法成分中的保留拼写错误输出中文符号if、for、def等语句末尾忘记冒号 IdentationError 缩进错误&#x…

C# Onnx Yolov8 Detect 物体检测

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System…

开源即时通讯(IM)项目OpenIM源码部署流程

由于OpenIM依赖的组件较多,开发者需求不一,导致OpenIM部署一直被人诟病,经过几次迭代优化,包括依赖的组件compose的一键部署,环境变量设置一次,全局生效,以及脚本重构,目前OpenIM部署…

2023CSP游寄

初赛 DAY -2 才刚考开学测就来初赛。 复赛之后就是月测,这就是初三吗。 初中最后一次 CSP,如果 S 没一等就得摆烂了。希望别因为各种原因爆炸。 中午下午借着刷初赛题的名义摆烂,半道题都没写。 CSP2023RP 初赛 DAY -1 看我发现了什么。…

SpringBoot 集成 SpringSecurity 从入门到深入理解

完整的目录 介绍 SpringSecurity简述 SpringSecuritySpringSecurity 的主要功能说明 项目源码入门案例项目工程路径第一步:加载依赖第二步:创建核心的配置类第三步:增加controller第三步:启动程序小结界面跳转说明密码生成说明 重…

使用Python来写模拟Xshell实现远程命令执行与交互

一、模块 这里使用的是 paramiko带三方库 pip install paramiko二、效果图 三、代码实现(这里的IP,用户名,密码修改为自己对应服务器的) import paramiko import timeclass Linux(object):# 参数初始化def __init__(self, ip, us…

python 使用requests爬取百度图片并显示

爬取百度图片并显示 引言一、图片显示二、代码详解2.1 得到网页内容2.2 提取图片url2.3 图片显示 三、完整代码 引言 爬虫(Spider),又称网络爬虫(Web Crawler),是一种自动化程序,可以自动地浏览…

【前端知识】Three 学习日志(四)—— 相机控件

Three 学习日志&#xff08;四&#xff09;—— 相机控件 一、引入相机控件 <!-- 引入相机控件 --> <script type"importmap">{"imports": {"three": "../build/three.module.js","three/addons/": "../…

C#,数值计算——Hashtable的计算方法与源程序

1 文本格式 using System; using System.Collections; using System.Collections.Generic; namespace Legalsoft.Truffer { public abstract class Hashtable<K> { private int nhash { get; set; } private int nmax { get; set; } pr…

Vue3记录

Vue3快速上手 1.Vue3简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09;耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址&#xff1a;https://github.com/vuejs/vue-next/releas…

Vue3搭配Element Plus 实现候选搜索框效果

直接上代码 <el-col :span"14" class"ipt-col"><el-input v-model"projectName" class"w-50 m-2" input"inputChange" focus"inputFocusFn" blur"inputBlurFn" placeholder"请输入项目名…

同样的UWB,为什么定位精度差很多?

纵观以UWB技术为核心的应用与电厂、化工厂等工业企业人员定位系统&#xff0c;在定位精度上都声称能够达到厘米级精准&#xff0c;然而实际应用上却总是差了些许意思。任何产品都有理论值与实际值&#xff0c;例如某些新能源汽车号称标准续航300公里&#xff0c;但实际上可能连…

【面试题】智力题

文章目录 腾讯1000瓶毒药里面只有1瓶是有毒的&#xff0c;问需要多少只老鼠才能在24小时后试出那瓶有毒。有两根不规则的绳子&#xff0c;两根绳子从头烧到尾均需要一个小时&#xff0c;现在有一个45分钟的比赛&#xff0c;裁判员忘记带计时器&#xff0c;你能否通过烧绳子的方…

C++---异常处理

异常处理 异常处理try语句块和throw表达式异常的抛出和捕获异常的抛出和匹配原则 异常安全异常规范标准异常 异常处理 异常是指存在于运行时的反常行为&#xff0c;这些行为超出了函数正常功能的范围。当程序的某部分检测到一个他无法处理的问题时&#xff0c;需要用到异常处理…

transforms数据预处理【图像增强】 ->(个人学习记录笔记)

文章目录 1. 安装2. transforms——Crop 裁剪2.1 transforms.CenterCrop2.2 transforms.RandomCrop2.3 transforms.RandomResizedCrop2.4 transforms.FiveCrop2.5 transforms.TenCrop 3. transforms——Flip 翻转3.1 transforms.RandomHorizontalFlip3.2 transforms.RandomVert…

leetcode 817. 链表组件(java)

链表组件 题目描述HashSet 模拟 题目描述 给定链表头结点 head&#xff0c;该链表上的每个结点都有一个 唯一的整型值 。同时给定列表 nums&#xff0c;该列表是上述链表中整型值的一个子集。 返回列表 nums 中组件的个数&#xff0c;这里对组件的定义为&#xff1a;链表中一段…

zabbix学习1--zabbix6.x单机

文章目录 1. 环境2. MYSQL8.02.1 单节点2.2 配置主从 3. 依赖组件4. zabbix-server5. agent5.1 yum5.2 编译 附录my.cnfJDK默认端口号 1. 环境 进入官网查看所需部署环境配置以及应用版本要求https://www.zabbix.com/documentation/current/zh/manual/installation/requiremen…

MySQL 解决数据重复添加

1. sql语句: insert ignore into insert ignore into 表名 (xx1,xx2,xx3) VALUES (#{xx1},#{xx2},#{xx3}) 2. 复合索引

7-38 掉入陷阱的数字

输入样例: 5 输出样例: 1:16 2:22 3:13 4:13 ACcode: #include <bits/stdc.h>using namespace std;int main(){int n;cin >> n;vector<int> ans;int limit 1;ans.push_back(n);for(int i0; i<limit; i){//各位数字的和int sum 0;int num ans[i];w…