MySQL提供了一些函数来处理JSON数据类型,可以使用这些函数来查询JSON数据。

  1. 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   |
+----+---------+-----+--------+
  1. 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"]} |
+----+---------+----------------------------------------------------+
  1. 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开始计数)的路径。

mysql如何查询json数据

原文地址: https://www.cveoy.top/t/topic/zBo 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录