一文带你了解不一样的SQL,惊喜多多( 二 )


除此之外,我们也可以将 JSON 数据转换为关系型数据 。例如:
select emp_id, jt.*from employee_json,     json_table(emp_info, '$'         columns (emp_name  varchar(50) path '$.emp_name',                  sex       varchar(10) path '$.sex',                  dept_id   integer path '$.dept_id',                  manager   integer path '$.manager',                  hire_date date path '$.hire_date',                  job_id    integer path '$.job_id',                  salary    integer path '$.income[0].salary',                  bonus     integer path '$.income[1].bonus',                  email     varchar(100) path '$.email')     ) jtlimit 3;emp_id|emp_name  |sex|dept_id|manager|hire_date |job_id|salary|bonus|email              |------|----------|---|-------|-------|----------|------|------|-----|-------------------|     1|刘备      |男  |      1|       |2000-01-01|     1| 33000|10000|liubei@shuguo.com  |     2|关羽      |男  |      1|      1|2000-01-01|     2| 26000|10000|guanyu@shuguo.com  |     3|张飞      |男  |      1|      1|2000-01-01|     2| 24000|10000|zhangfei@shuguo.com|其中,$ 表示将整个 emp_info 作为数据行的来源;COLUMNS 定义了字段类型及其数据的来源,PATH 同样使用 SQL/JSON 路径表达式 。
反之,我们也可以通过 SQL 函数将关系型数据转换为 JSON 数据 。例如:
select json_object('emp_name', emp_name,                   'sex', sex,                   'income', json_array(json_object('salary', salary), json_object('bonus', bonus))                  ) AS jofrom employeelimit 3;jo                                                                                   |-------------------------------------------------------------------------------------|{"sex": "男", "income": [{"salary": 30000.00}, {"bonus": 10000.00}], "emp_name": "刘备"}{"sex": "男", "income": [{"salary": 26000.00}, {"bonus": 10000.00}], "emp_name": "关羽"}{"sex": "男", "income": [{"salary": 24000.00}, {"bonus": 10000.00}], "emp_name": "张飞"}|其中,JSON_OBJECT 和 JSON_ARRAY 函数可以将表中的数据构造成 JSON 对象和数组 。
不仅如此,使用 SQL 语句也可以对 JSON 节点数据进行 DML 操作,不再介绍具体案例 。关于 MySQL 文档存储的详细介绍可以参考这篇文章 。


推荐阅读