MySQL中json范例数据查询

打印 上一主题 下一主题

主题 858|帖子 858|积分 2574

公司的一个电商系统,索引字段中,必要存储某个spu下挂的所有sku基本信息,数据库字段设计成json范例。为了平常查询数据方便,必要相识一些json相关的函数,网上找了各种资料,但没有一篇比较完备且颠末验证的的文章,所以熬夜整理了一份,如今分享给友友们。
mysql在5.7版本之后就开始支持json数据范例,并且mysql8.0版本对json的处理已经做的非常美满了。json数据范例的优点缺点可自己查询,本文重要介绍一些关于json数据范例的查询使用。
准备数据

准备DDL
  1. CREATE TABLE `users` (
  2.   `id` int unsigned NOT NULL AUTO_INCREMENT,
  3.   `name` varchar(255) NOT NULL COMMENT '姓名',
  4.   `address` json NOT NULL COMMENT '住址',
  5.   PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
复制代码
准备DML
  1. INSERT INTO `users` VALUES (1, '张三', '{"city": "石家庄市", "tags": ["家", "公司"], "district": "桥西区", "province": "河北省"}');
  2. INSERT INTO `users` VALUES (2, '李四', '{"city": "广州市", "tags": ["宿舍"], "district": "珠海区", "province": "广州省"}');
  3. INSERT INTO `users` VALUES (3, '王五', '{"city": "长春市", "district": "绿园区", "province": "吉林省"}');
  4. INSERT INTO `users` VALUES (4, '刘六', '{"city": "昌平区", "province": "北京市"}');
  5. INSERT INTO `users` VALUES (5, '张三三', '[{"city": "石家庄市", "tags": ["家", "公司", "学校"], "district": "桥西区", "province": "河北省"}, {"city": "郑州市", "tags": ["宿舍"], "district": "桥东区", "province": "河南省"}]');
  6. INSERT INTO `users` VALUES (6, '李四四', '[{"city": "广州市", "tags": ["宿舍"], "district": "珠海区", "province": "广州省"}, {"city": "广州市", "district": "珠海区", "province": "广州省"}]');
  7. 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


    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
  • 本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    回复

    使用道具 举报

    0 个回复

    倒序浏览

    快速回复

    您需要登录后才可以回帖 登录 or 立即注册

    本版积分规则

    曂沅仴駦

    金牌会员
    这个人很懒什么都没写!

    标签云

    快速回复 返回顶部 返回列表