2024年08月10日 mysql json contains搜索多个 极客笔记
在 MySQL 中,我们可以使用 JSON_CONTAINS()
函数来搜索包含指定 JSON 值的 JSON 数据。此函数可以用于搜索包含单个值或多个值的 JSON 数据。
JSON_CONTAINS()
函数用于检查一个 JSON 文档是否包含另一个 JSON 文档。它有两种语法:
JSON_CONTAINS(json_doc, val[, path])
JSON_CONTAINS(json_doc, val)
其中,json_doc
是要搜索的 JSON 数据,val
是要搜索的 JSON 值,path
是可选参数,用于限定搜索范围。
首先,我们来看一个简单的示例,搜索包含单个值的 JSON 数据。
假设我们有一个名为 students
的表,其中有一个 info
列存储了学生的信息。info
列的数据类型为 JSON。我们想要搜索包含名字为 “Alice” 的学生信息。
SELECT * FROM students
WHERE JSON_CONTAINS(info, '{"name": "Alice"}');
上面的 SQL 查询将返回包含名字为 “Alice” 的学生信息的行。如果有多个 JSON 文档包含该值,则所有这些行都会被检索出来。
接下来,我们来看如何搜索包含多个值的 JSON 数据。
假设我们想要搜索包含名字为 “Alice” 且年龄为 20 岁的学生信息。我们可以使用 AND
运算符连接多个 JSON_CONTAINS()
函数。
SELECT * FROM students
WHERE JSON_CONTAINS(info, '{"name": "Alice"}')
AND JSON_CONTAINS(info, '{"age": 20}');
上面的 SQL 查询将返回包含名字为 “Alice” 且年龄为 20 岁的学生信息的行。同样,如果有多个 JSON 文档包含这两个值,则所有这些行都会被检索出来。
除了搜索包含多个键值对的 JSON 数据外,我们还可以搜索包含多个值的 JSON 数组。
假设我们有一个名为 courses
的表,其中有一个 students
列存储了参加课程的学生名单。students
列的数据类型为 JSON 数组。我们想要搜索参加了 “Math” 且参加了 “Physics” 课程的学生。
SELECT * FROM courses
WHERE JSON_CONTAINS(students, '["Math", "Physics"]');
上面的 SQL 查询将返回参加了 “Math” 且参加了 “Physics” 课程的学生信息。如果有多个 JSON 数组包含这两个值,所有这些行都会被检索出来。
为了更好地理解 JSON_CONTAINS()
函数的使用场景,我们来看一个完整的案例分析。
假设我们有一个名为 users
的表,其中有一个 preferences
列存储了用户的偏好设置。preferences
列的数据类型为 JSON。我们想要搜索喜欢阅读书籍且喜欢户外运动的用户。
首先,让我们创建一个 users
表并插入一些示例数据:
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50),
preferences JSON
);
INSERT INTO users (id, name, preferences) VALUES
(1, 'Alice', '{"interests": ["Reading", "Hiking"]}'),
(2, 'Bob', '{"interests": ["Reading", "Swimming"]}'),
(3, 'Charlie', '{"interests": ["Cooking", "Hiking"]}'),
(4, 'David', '{"interests": ["Cooking", "Cycling"]}');
现在,我们可以执行以下 SQL 查询来搜索喜欢阅读书籍且喜欢户外运动的用户:
SELECT * FROM users
WHERE JSON_CONTAINS(preferences, '["Reading", "Hiking"]');
上面的 SQL 查询将返回喜欢阅读书籍且喜欢户外运动的用户信息。在这个案例中,Alice 和 Charlie 符合搜索条件,因此它们的信息将被检索出来。
在本文中,我们详细讨论了在 MySQL 中使用 JSON_CONTAINS()
函数来搜索包含单个值或多个值的 JSON 数据。我们看到了如何搜索包含单个值的 JSON 数据,以及如何搜索包含多个值的 JSON 数据和 JSON 数组。通过实际案例的分析,我们更好地理解了如何利用这个功能来处理复杂的 JSON 数据。
本文链接:http://so.lmcjl.com/news/10472/