目录
- MYSQL中的json数据操作
- 1.2 基础查询操作
- 1.2.1 一般json查询
- 1.2.2 多个条件查询
- 1.2.3 json中多个字段关系查询
- 1.2.4 关联表查询
- 1.3 JSON函数操作
- 1.3.1 官方json函数
- 1.3.2 ->、->>区别
- 1.3.2.2 在where条件中使用
- 1.3.3 json_extract():从json中返回想要的字段
- 1.3.4 JSON_CONTAINS():JSON格式数据是否在字段中包含特定对象
- 1.3.5 SON_OBJECT():将一个键值对列表转换成json对象
- 1.3.6 JSON_ARRAY():创建JSON数组
- 1.3.7 JSON_TYPE():查询某个json字段属性类型
- 1.3.8 JSON_KEYS():JSON文档中的键数组
- 1.3.10 JSON_INSERT():插入值(往json中插入新值,但不替换已经存在的旧值)
- 1.3.11 JSON_REPLACE()
- 1.3.12 JSON_REMOVE():从JSON文档中删除数据
MYSQL中的json数据操作
1.2 基础查询操作
用法提示:
- 如果
json
字符串不是数组,则直接使用$.字段名
- 如果
json
字符串是数组[Array]
,则直接使用$[对应元素的索引id]
1.2.1 一般json查询
使用json字段名->’$.json属性’
进行查询条件,注意:如果 ‘->’ 不能用也可用 ‘->>’ 查询
举个例子:如果想查询deptLeader=张五的数据,那么sql语句如下:
SELECT * from dept WHERE json_value->'$.deptLeaderId'='5';
1.2.2 多个条件查询
比如想查dept为“部门3”和deptLeaderId=5的数据,sql如下:
SELECT * from dept WHERE json_value->'$.deptLeaderId'='5' and json_value->'$.deptId'='5';
1.2.3 json中多个字段关系查询
比如想查询json格式中deptLeader=张五和deptId=5的数据
SELECT * from dept WHERE json_value->'$.deptLeaderId'='5' and json_value->'$.deptId'='5';
1.2.4 关联表查询
这里我们要连表查询在dept 表中部门leader在dept_leader 中的详情
SELECT * from dept,dept_leader WHERE dept.json_value->'$.deptLeaderId'=dept_leader.json_value->'$.id' ;
1.3 JSON函数操作
写到这里大家都发现了,我们查询的json都是整条json数据,这样看起来不是很方便,那么如果我们只想看json中的某个字段怎么办?
1.3.1 官方json函数
1.3.2 ->、->>区别
->
在field
中使用的时候结果带引号,->>
的结果不带引号
1.3.2.2 在where条件中使用
特别注意:->
当做where
查询是要注意类型的,->>
是不用注意类型的
1.3.3 json_extract():从json中返回想要的字段
用法:json_extract(字段名,$.json字段名)
select id,json_extract(json_value,'$.deptName') as deptName from dept;
1.3.4 JSON_CONTAINS():JSON格式数据是否在字段中包含特定对象
用法: JSON_CONTAINS(target, candidate[, path])
事例:如果我们想查询包含deptName=部门5
的对象
select * from dept WHERE JSON_CONTAINS(json_value, JSON_OBJECT("deptName","部门5"))
1.3.5 SON_OBJECT():将一个键值对列表转换成json对象
比如我们想查询某个对象里面的值等于多少
比如我们添加这么一组数据到dept表中:
insert into dept VALUES(6,'部门9','{"deptName": {"dept":"de","depp":"dd"}, "deptId": "5", "deptLeaderId": "5"}');
我们可以看到deptName
中还有一个对象,里面还有dept和depp两个属性字段,那么我们应该怎么查询depp=dd的员工呢。
用法:JSON_OBJECT([key, val[, key, val] …])
事例:
SELECT * from ( SELECT *,json_value->'$.deptName' as deptName FROM dept ) t WHERE JSON_CONTAINS(deptName,JSON_OBJECT("depp","dd"));
1.3.6 JSON_ARRAY():创建JSON数组
比如我们添加这么一组数据到dept表中:
insert into dept VALUES(7,'部门9','{"deptName": ["1","2","3"], "deptId": "5", "deptLeaderId": "5"}'); insert into dept VALUES(7,'部门9','{"deptName": ["5","6","7"], "deptId": "5", "deptLeaderId": "5"}');
用法:JSON_ARRAY([val[, val] …])
事例:我们要查询deptName包含1的数据
SELECT * from dept WHERE JSON_CONTAINS(json_value->'$.deptName',JSON_ARRAY("1"))
1.3.7 JSON_TYPE():查询某个json字段属性类型
用法:JSON_TYPE(json_val)
事例:比如我们想查询deptName的字段属性是什么
SELECT json_value->'$.deptName' ,JSON_TYPE(json_value->'$.deptName') as type from dept
1.3.8 JSON_KEYS():JSON文档中的键数组
用法:JSON_KEYS(json_value)
事例:比如我们想查询json格式数据中的所有key
SELECT JSON_KEYS(json_value) FROM dept
接下来的3种函数都是新增数据类型的:
JSON_SET(json_doc, path, val[, path, val] …)
JSON_INSERT(json_doc, path, val[, path, val] …)
JSON_REPLACE(json_doc, path, val[, path, val] …)1.3.9 JSON_SET():将数据插入JSON格式中,有key则替换,无key则新增
这也是我们开发过程中经常会用到的一个函数
用法:JSON_SET(json_doc, path, val[, path, val] …)
事例:比如我们想针对id=2的数据新增一组:newData:新增的数据,修改deptName为新增的部门1
sql语句如下:
update dept set json_value=JSON_SET('{"deptName": "部门2", "deptId": "2", "deptLeaderId": "4"}','$.deptName','新增的部门1','$.newData','新增的数据') WHERE id=2;
注意
:json_doc
如果不带这个单元格之前的值,之前的值是会新值被覆盖的,比如我们如果更新的语句换成:
update dept set json_value=JSON_SET('{"a":"1","b":"2"}','$.deptName','新增的部门1','$.newData','新增的数据') WHERE id=2我们可以看到这里json_doc是{“a”:“1”,“b”:“2”},这样的话会把之前的单元格值覆盖后再新增/覆盖这个单元格字段
1.3.10 JSON_INSERT():插入值(往json中插入新值,但不替换已经存在的旧值)
用法:JSON_INSERT(json_doc, path, val[, path, val] …)
事例:
UPDATE dept set json_value=JSON_INSERT('{"a": "1", "b": "2"}', '$.deptName', '新增的部门2','$.newData2','新增的数据2') WHERE id=2
我们可以看到由于json_doc
变化将之前的值覆盖了,新增了deptName
和newData2
.
如果我们再执行以下刚才的那个sql,只是换了value,我们会看到里面的key值不会发生变化。
因为这个函数只负责往json中插入新值,但不替换已经存在的旧值。
1.3.11 JSON_REPLACE()
用法:JSON_REPLACE(json_doc, path, val[, path, val] …)
用例:
如果我们要更新id=2数据中newData2的值为:更新的数据2
sql语句如下:
UPDATE dept set json_value=JSON_REPLACE('{"a": "1", "b": "2", "deptName": "新增的部门2", "newData2": "新增的数据2"}', '$.newData2', '更新的数据2') WHERE id =2;
1.3.12 JSON_REMOVE():从JSON文档中删除数据
用法:JSON_REMOVE(json_doc, path[, path] …)
举例:删除key为a的字段。
UPDATE dept set json_value=JSON_REMOVE('{"a": "1", "b": "2", "deptName": "新增的部门2", "newData2": "更新的数据2"}','$.a') WHERE id =2;
到此这篇关于MYSQL中的json数据操作的文章就介绍到这了,更多相关mysql json数据内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!