曂沅仴駦 发表于 2025-1-6 08:34:50

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') = "河北省";
https://i-blog.csdnimg.cn/direct/285b11f9d43042cf9d71b7d73b4f3b41.png
2、对象使用方法进行查询:json字段->'$.json属性'
   select * from users where address->'$.province' = "河北省";
https://i-blog.csdnimg.cn/direct/97863b5307804c21a3604dcf02d93f0f.png
查询json数组指定下标值的数据

1、数组使用方式查询:字段->'$'
   select  * from users where address->'$'= "家";
https://i-blog.csdnimg.cn/direct/057f5b11c06a4b379a844a6077c3cee7.png
根据JSON对象内里的属性个数查询

1、函数查询:json_length(json字段)
   select * from users where json_length(address) = 2;
https://i-blog.csdnimg.cn/direct/388dd8fb3b3d4452a33570b79f9e7b6a.png
根据JSON数组内里的数组长度查询

1、函数查询:json_length(json字段)
   select * from users where json_length(address) = 2;
https://i-blog.csdnimg.cn/direct/606310c96f47407595248d96f78643c6.png
根据JSON对象属性值为数组的数组长度查询

1、函数查询:json_length(json字段, '$.json属性')
#获取addresss内里tags数组长度为2的数据
   select * from users where json_length(address, '$.tags') = 2;
https://i-blog.csdnimg.cn/direct/2806532b431c44c790e8171af1293b94.png
查询JSON对象属性值为数组的恣意项存在指定值查询

1、函数查询:JSON_CONTAINS(json字段,JSON_OBJECT('json数组属性', '内容'))
   select * from users where JSON_CONTAINS(address,JSON_OBJECT('tags', '家'));
https://i-blog.csdnimg.cn/direct/36050b99cb064fc09a441407593562ca.png
查询JSON数组内里对象属性恣意项存在指定属性的数据

   select * from users where address->'$
[*].city' is not null;
https://i-blog.csdnimg.cn/direct/fc23d002502e4915b31997085b4a5735.png
查询JSON对象存在指定属性的数据

   select * from users where address->'$.tags' is not null;
https://i-blog.csdnimg.cn/direct/1af3387c39c74e6694c84b3dee2ad1a2.png

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: MySQL中json范例数据查询