当前位置: 首页 > web >正文

MySQL JSON 查询中的对象与数组技巧

目录

JSON 对象查询

1. JSON_CONTAINS

2. JSON_EXTRACT

3. JSON_TABLE

JSON 数组查询

1. JSON_CONTAINS

2. JSON_EXTRACT

3. JSON_TABL

MySQL 中 JSON 对象和 JSON 数组查询的详细介绍及带有 WHERE 条件的查询示例:

JSON 对象查询

1. JSON_CONTAINS

用于检查 JSON 对象是否包含指定的值或 JSON 对象。

  • 语法JSON_CONTAINS(json_doc, val[, path])

  • 示例: 假设有一个表 person,其中有一个 JSON 列 info,存储了个人信息。

    CREATE TABLE person (id INT PRIMARY KEY,info JSON
    );INSERT INTO person (id, info) VALUES (1, '{"name": "张三", "age": 30}');

    查询 info 列中 name"张三" 的记录:

    SELECT * FROM person WHERE JSON_CONTAINS(info, '"张三"', '$.name');

    如果 info 列中包含 {"name": "张三"},则返回对应的行。

2. JSON_EXTRACT

用于从 JSON 对象中提取指定路径的值。

  • 语法JSON_EXTRACT(json_doc, path)

  • 示例: 查询 info 列中 age 大于 25 的记录

    SELECT * FROM person WHERE JSON_EXTRACT(info, '$.age') > 25;

    通过提取 age 的值并进行比较,筛选出符合条件的记录。

3. JSON_TABLE

将 JSON 对象转换为关系型表格,便于查询。

  • 语法

    JSON_TABLE(json_doc,path_expressionCOLUMNS(column_name column_type PATH json_path [on_empty] [on_error],...)
    ) [AS] alias
  • 示例

    SELECT *
    FROM person,
    JSON_TABLE(info,'$' COLUMNS(name VARCHAR(50) PATH '$.name',age INT PATH '$.age')
    ) AS jt
    WHERE jt.age > 25;

    info 列中的 JSON 数据转换为表格格式,然后通过 WHERE 条件筛选出 age 大于 25 的记录。

JSON 数组查询

1. JSON_CONTAINS

同样适用于 JSON 数组,检查数组是否包含指定的值。

  • 语法JSON_CONTAINS(json_array, val[, path])

  • 示例: 假设有一个表 fruits,其中有一个 JSON 列 fruits_array,存储了水果数组

    CREATE TABLE fruits (id INT PRIMARY KEY,fruits_array JSON
    );INSERT INTO fruits (id, fruits_array) VALUES (1, '["apple", "banana", "orange"]');

    查询 fruits_array 列中包含 "banana" 的记录

    SELECT * FROM fruits WHERE JSON_CONTAINS(fruits_array, '"banana"');

    如果 fruits_array 中包含 "banana",则返回对应的行。

2. JSON_EXTRACT

从 JSON 数组中提取指定索引的值。

  • 语法JSON_EXTRACT(json_array, path)

  • 示例: 查询 fruits_array 列中第二个水果为 "banana" 的记录

    SELECT * FROM fruits WHERE JSON_EXTRACT(fruits_array, '$[1]') = '"banana"';

    通过提取数组中索引为 1 的值并进行比较,筛选出符合条件的记录。

3. JSON_TABLE

将 JSON 数组转换为关系型表格。

  • 语法

    JSON_TABLE(json_doc,path_expressionCOLUMNS(column_name column_type PATH json_path [on_empty] [on_error],...)
    ) [AS] alias
  • 示例

    SELECT *
    FROM fruits,
    JSON_TABLE(fruits_array,'$[*]' COLUMNS(fruit VARCHAR(50) PATH '$')
    ) AS jt
    WHERE jt.fruit = 'banana';

    fruits_array 列中的 JSON 数组转换为表格格式,然后通过 WHERE 条件筛选出包含 "banana" 的记录。

http://www.xdnf.cn/news/11951.html

相关文章:

  • 【网络安全】fastjson原生链分析
  • Python 中 kwargs.get() 方法详解
  • LabVIEW的MathScript Node 绘图功能
  • 【UE5 C++】通过文件对话框获取选择文件的路径
  • Unity与Excel表格交互热更方案
  • go语言学习 第4章:流程控制
  • 使用jstack排查CPU飙升的问题记录
  • CMap应用场景和例子
  • ABP-Book Store Application中文讲解 - Part 10: Book to Author Relation
  • 【Pandas】pandas DataFrame reset_index
  • HTTP常见的请求方法、响应状态码、接口规范介绍
  • c#开发AI模型对话
  • 回归任务和分类任务损失函数详解
  • 性能剖析:在 ABP 框架中集成 MiniProfiler 实现性能可视化诊断
  • 学习笔记(24): 机器学习之数据预处理Pandas和转换成张量格式[2]
  • 以人类演示视频为提示,学习可泛化的机器人策略
  • 鸿蒙仓颉语言开发实战教程:商城登录页
  • [网页五子棋][匹配模块]实现胜负判定,处理玩家掉线
  • 【C++】std::wstring` 和 C# 的 `String`(全称 `System.String`)
  • HRI-2025 | 大模型驱动的个性化可解释机器人人机交互研究
  • .Net Framework 4/C# 面向对象编程进阶
  • 机器学习基础(四) 决策树
  • Spitfire:Codigger 生态中的高性能、安全、分布式浏览器
  • Java 线程池原理详解
  • Rust 学习笔记:Box<T>
  • 更新 Docker 容器中的某一个文件
  • 根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
  • ffmpeg(三):处理原始数据命令
  • 旅游微信小程序制作指南
  • Webpack常见的插件和模式