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

MySQL中json类型数据查询

公司的一个电商系统,索引字段中,需要存储某个spu下挂的所有sku基本信息,数据库字段设计成json类型。为了平时查询数据方便,需要了解一些json相关的函数,网上找了各种资料,但没有一篇比较完整且经过验证的的文章,所以熬夜整理了一份,现在分享给友友们。

mysql在5.7版本之后就开始支持json数据类型,并且mysql8.0版本对json的处理已经做的非常完善了。json数据类型的优点缺点可自己查询,本文主要介绍一些关于json数据类型的查询操作。

准备数据

准备DDL

CREATE TABLE `users` (

??`id` int unsigned NOT NULL AUTO_INCREMENT,

??`name` varchar(255) NOT NULL COMMENT '姓名',

??`address` json NOT NULL COMMENT '住址',

??PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

准备DML

INSERT INTO `users` VALUES (1, '张三', '{"city": "石家庄市", "tags": ["家", "公司"], "district": "桥西区", "province": "河北省"}');
INSERT INTO `users` VALUES (2, '李四', '{"city": "广州市", "tags": ["宿舍"], "district": "珠海区", "province": "广州省"}');
INSERT INTO `users` VALUES (3, '王五', '{"city": "长春市", "district": "绿园区", "province": "吉林省"}');
INSERT INTO `users` VALUES (4, '刘六', '{"city": "昌平区", "province": "北京市"}');
INSERT INTO `users` VALUES (5, '张三三', '[{"city": "石家庄市", "tags": ["家", "公司", "学校"], "district": "桥西区", "province": "河北省"}, {"city": "郑州市", "tags": ["宿舍"], "district": "桥东区", "province": "河南省"}]');
INSERT INTO `users` VALUES (6, '李四四', '[{"city": "广州市", "tags": ["宿舍"], "district": "珠海区", "province": "广州省"}, {"city": "广州市", "district": "珠海区", "province": "广州省"}]');
INSERT INTO `users` VALUES (7, '王五六', '["家", "公司", "学校"]');

查询json对象指定属性值的数据

1、函数查询:json_extract(json字段, ‘$.json属性’)

select * from users where json_extract(address, ‘$.province’) = “河北省”;

2、对象操作方法进行查询:json字段->‘$.json属性’

select * from users where address->‘$.province’ = “河北省”;

查询json数组指定下标值的数据

1、数组操作方式查询:字段->‘$[0]’

select * from users where address->‘$[0]’= “家”;

根据JSON对象里面的属性个数查询

1、函数查询:json_length(json字段)

select * from users where json_length(address) = 2;

根据JSON数组里面的数组长度查询

1、函数查询:json_length(json字段)

select * from users where json_length(address) = 2;

根据JSON对象属性值为数组的数组长度查询

1、函数查询:json_length(json字段, ‘$.json属性’)

#获取addresss里面tags数组长度为2的数据

select * from users where json_length(address, ‘$.tags’) = 2;

查询JSON对象属性值为数组的任意项存在指定值查询

1、函数查询:JSON_CONTAINS(json字段,JSON_OBJECT(‘json数组属性’, ‘内容’))

select * from users where JSON_CONTAINS(address,JSON_OBJECT(‘tags’, ‘家’));

查询JSON数组里面对象属性任意项存在指定属性的数据

select * from users where address->‘$[*].city’ is not null;

查询JSON对象存在指定属性的数据

select * from users where address->‘$.tags’ is not null;

转载:msw;原文链接:https://blog.csdn.net/minshiwang/article/details/130769571

相关文章:

  • 线性回归(一)基于Scikit-Learn的简单线性回归
  • DeepSeek + Higress AI 网关/Spring AI Alibaba 案例征集
  • 博云先进算力管理平台AIOS已上线全尺寸DeepSeek系列模型
  • 15.代码随想录算法训练营第十五天|(递归)110. 平衡二叉树,257. 二叉树的所有路径*,404. 左叶子之和,222.完全二叉树的节点个数[打卡自用]
  • JavaWeb-ServletContext应用域接口
  • Codeforces Round 1006 (Div. 3)(部分题解)
  • 图神经网络:拓扑数据分析的新时代
  • 单点登录原理和JWT实现
  • 算法-图-查找路径
  • mybatisPlus打印sql配置
  • 在nodejs中使用ElasticSearch(三)通过ES语义检索,实现RAG
  • springboot集成deepseek4j
  • 「Selenium+Python自动化从0到1①|2025最新环境搭建+浏览器驱动避坑指南(附验证代码)」
  • k8s中pod的调度策略之pod的亲和性调度与反亲和性调度 一文搞懂 k8s中创建的pod如何调度?
  • Spring Cloud Alibaba学习 3- Sentinel入门使用
  • java后端开发day20--面向对象进阶(一)--static继承
  • C# Unity 唐老狮 No.1 模拟面试题
  • 在Linux环境下利用MTCNN进行人脸检测(基于ncnn架构)
  • ARM Coretex-M核心单片机(STM32)分析hardfault的原因
  • Spring如何解决循环依赖?
  • 人社部:将会同更多部门分行业、分领域制定专项培训计划
  • 澎湃思想周报丨数字时代的育儿;凛冬已至好莱坞
  • 一张老照片里蕴含的上海文脉
  • 印方称与巴基斯坦军队在克什米尔交火
  • 哈马斯同意释放剩余所有以方被扣押人员,以换取停火五年
  • 京东美团开打,苦了商家?