mysql如何查询json数据
MySQL提供了一些函数来处理JSON数据类型,可以使用这些函数来查询JSON数据。
- JSON_EXTRACT函数:
JSON_EXTRACT函数用于提取JSON数据中的指定属性或元素。它的语法如下:
JSON_EXTRACT(json_doc, path)
其中,json_doc是JSON类型的数据,path是需要提取的属性或元素的路径。例如,假设有一个名为users的表,其中包含一个名为info的JSON类型的列,其中存储了用户的信息,如下所示:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
info JSON
);
INSERT INTO users (name, info) VALUES
('Alice', '{"age": 25, "gender": "female"}'),
('Bob', '{"age": 30, "gender": "male", "address": {"city": "Beijing", "country": "China"}}'),
('Charlie', '{"age": 28, "gender": "male", "hobbies": ["reading", "traveling", "music"]}');
如果要查询所有用户的年龄和性别,可以使用以下语句:
SELECT id, name, JSON_EXTRACT(info, '$.age') AS age, JSON_EXTRACT(info, '$.gender') AS gender FROM users;
其中,'$'表示根节点,'$ .age'表示提取age属性,'$ .gender'表示提取gender属性。该查询结果如下:
+----+---------+-----+--------+
| id | name | age | gender |
+----+---------+-----+--------+
| 1 | Alice | 25 | female |
| 2 | Bob | 30 | male |
| 3 | Charlie | 28 | male |
+----+---------+-----+--------+
- JSON_CONTAINS函数:
JSON_CONTAINS函数用于检查JSON数据中是否包含指定的属性或元素。它的语法如下:
JSON_CONTAINS(json_doc, val[, path])
其中,json_doc是JSON类型的数据,val是需要查找的值,path是需要查找的属性或元素的路径(可选)。例如,如果要查询所有喜欢旅游的用户,可以使用以下语句:
SELECT id, name, info FROM users WHERE JSON_CONTAINS(info, '"traveling"', '$.hobbies');
其中,'"traveling"'是需要查找的值,'$ .hobbies'表示查找hobbies属性中是否包含该值。该查询结果如下:
+----+---------+----------------------------------------------------+
| id | name | info |
+----+---------+----------------------------------------------------+
| 3 | Charlie | {"age": 28, "gender": "male", "hobbies": ["reading", "traveling", "music"]} |
+----+---------+----------------------------------------------------+
- JSON_SEARCH函数:
JSON_SEARCH函数用于查询JSON数据中指定值的路径。它的语法如下:
JSON_SEARCH(json_doc, val[, path[, escape_char[, recurs_depth[, return_mode]]]])
其中,json_doc是JSON类型的数据,val是需要查找的值,path是需要查找的属性或元素的路径(可选),escape_char是转义字符(可选),recurs_depth是递归深度(可选,默认为0),return_mode是返回模式(可选,默认为'one')。例如,如果要查询所有喜欢旅游的用户的hobbies属性的路径,可以使用以下语句:
SELECT id, name, JSON_SEARCH(info, 'traveling', '$.hobbies') AS hobbies_path FROM users WHERE JSON_CONTAINS(info, '"traveling"', '$.hobbies');
该查询结果如下:
+----+---------+------------------------+
| id | name | hobbies_path |
+----+---------+------------------------+
| 3 | Charlie | "$.hobbies[1]" |
+----+---------+------------------------+
其中,"$ .hobbies [1]"表示hobbies属性中第2个元素(从0开始计数)的路径。
原文地址: https://www.cveoy.top/t/topic/zBo 著作权归作者所有。请勿转载和采集!