MySQL对JSON类型字段数据进行提取和查询的实现

MySQL对JSON类型字段的提取和查询,是MySQL 5.7及以上版本中的新增功能之一。JSON类型字段在存储结构上,采用的是变长字符串类型,表示的是JSON文本. 下面将会对此进行详细的介绍。

创建表格

首先,我们来创建一个名为users的表格,并在其中添加一个JSON类型字段数据示例,如下所示:

CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
info JSON,
PRIMARY KEY (id)
);

接着,我们插入一条数据,包含一个JSON字段,其中包含的是字符串键和值对,如下所示:

INSERT INTO users (name, info) VALUES (
    'Mike',
    '{"country": "China", "gender": "Male", "age": 25}'
);

提取JSON字段的值

为了提取JSON字段的值,我们采用的是MySQL提供的JSON_VALUE()函数。下面演示如何提取JSON字段的值:

SELECT 
    name, 
    JSON_VALUE(info, "$.age") AS age,
    JSON_VALUE(info, "$.gender") AS gender,
FROM users
WHERE id = 1;

结果如下:

| name | age | gender |
|------|-----|--------|
| Mike | 25  | Male   |

JSON_VALUE()函数使用的是XPath语法来指定要提取的JSON键的路径,"$"代表根目录,"$ . age"代表JSON字段中名为age的值。

JSON类型的条件查询

在MySQL 5.7中,可以使用JSON类型字段进行条件查询,MySQL提供了JSON_EXTRACT()和JSON_CONTAINS()函数来实现JSON查询功能。下面分别介绍这两个函数的作用。

JSON_EXTRACT()示例

JSON_EXTRACT()在JSON字段中提取路径所指定的值,只输入查询JSON字段,以及路径。下面是示例SQL查询,使用JSON_EXTRACT()从info字段中提取gender信息:

SELECT name, 
JSON_EXTRACT(info, '$.gender') AS gender 
FROM users 
WHERE gender = 'Male';

结果如下:

| name | gender |
|------|--------|
| Mike | Male   |

JSON_CONTAINS()示例

JSON_CONTAINS()函数可以实现以字段值为基础进行筛选的复杂条件查询。下面是一个示例,使用JSON_CONTAINS()来检查数据集是否包含指定值:

SELECT id, name, info 
FROM users 
WHERE JSON_CONTAINS(info, '"China"', '$.country');

结果如下:

| id | name | info                                                       |
|----|------|------------------------------------------------------------|
| 1  | Mike | {"country": "China", "gender": "Male", "age": "25"}        |

以上就是MySQL对JSON类型字段数据进行提取和查询的实现攻略,希望能够对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL对JSON类型字段数据进行提取和查询的实现 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • ip地址有冲突怎么办 局域网ip冲突如何解决

    解决局域网IP地址冲突的攻略 当局域网中的两个或多个设备拥有相同的IP地址时,就会发生IP地址冲突。这种情况下,网络通信可能会受到干扰,因此需要解决这个问题。下面是解决局域网IP地址冲突的完整攻略: 1. 确认IP地址冲突 首先,需要确认是否存在IP地址冲突。可以通过以下步骤进行确认: 打开命令提示符或终端窗口。 输入命令 ipconfig(Windows)…

    other 2023年7月30日
    00
  • WPF实现基础控件之托盘的示例代码

    下面是WPF实现托盘的完整攻略: 一、前期准备 在开始编写代码之前,首先需要在项目中添加两个NuGet包: Hardcodet.NotifyIcon.Wpf(用于实现托盘功能) System.Windows.Interactivity.Wpf(用于方便地实现交互行为,如点击托盘图标时打开窗口) 这两个包的添加方式可以通过NuGet包管理器或在项目文件中手动添…

    other 2023年6月27日
    00
  • 关于opengl:在vmware(debianx64)中 glxgears的作用

    OpenGL是一种跨平台的图形库,它可以用于创建高性能的3D图形应用程序。在Linux系统中,可以使用glxgears命令来测试OpenGL的性能。glxgears是一个简单的OpenGL程序,它会显示一个旋转的齿轮,并且会在窗口标题栏上显示帧率。在VMware虚机中运行glxgears可以测试虚拟机的OpenGL性能。 以下是关于在VMware(Debia…

    other 2023年5月7日
    00
  • MyBatis XML去除多余AND|OR前缀或逗号等后缀的操作

    MyBatis XML去除多余AND|OR前缀或逗号等后缀的操作攻略 在MyBatis中,有时候我们在构建动态SQL语句时会遇到一些问题,比如在使用<if>标签时,可能会导致生成的SQL语句出现多余的AND或OR前缀,或者在使用<foreach>标签时,可能会导致生成的SQL语句出现多余的逗号等后缀。本攻略将详细介绍如何去除这些多余的…

    other 2023年8月5日
    00
  • getopts解析shell脚本命令行参数的方法

    getopts解析shell脚本命令行参数的方法 在Shell脚本中,我们通常需要处理命令行参数。使用getopts可以帮助我们轻松地解析命令行参数并进行适当的操作。 什么是getopts getopts是一个处理命令行参数的Shell内置函数。它接受多个参数,其中最重要的是两个参数:opts和name。opts参数指定期望接受的选项(即命令行参数,包括单个…

    other 2023年6月26日
    00
  • java子类怎样创建

    介绍Java子类创建的完整攻略,包括以下几个方面: 什么是Java子类 创建Java子类的步骤 如何继承父类实例变量和方法 如何调用超类的构造器 创建Java子类的示例 具体说明如下: 什么是Java子类 Java子类是指在一个已有Java类的基础上,派生出一个新类,新类继承了原有Java类的属性和方法。在Java中,子类通过继承父类的成员来继承父类的属性和…

    其他 2023年4月16日
    00
  • kali中john的使用方法

    Kali中John的使用方法 John the Ripper是一个常用的密码破解工具,它可以通过多种攻击方式尝试破解密码。在Kali Linux中,安装了John the Ripper,可以利用其强大的特性来减小字典攻击、暴力攻击等的破解时间。本文将介绍如何在Kali Linux中使用John the Ripper破解密码。 安装John the Rippe…

    其他 2023年3月29日
    00
  • Android 7.0中新签名对多渠道打包的影响详解

    Android 7.0中新签名对多渠道打包的影响详解 Android 7.0引入了新的应用签名方案(APK Signature Scheme v2),这对于多渠道打包产生了一些影响。以下是详细的攻略: 新签名方案简介 新的应用签名方案使用了更强大的签名算法(SHA-256),提供了更好的安全性和完整性保证。与传统的JAR签名相比,新签名方案将签名信息存储在A…

    other 2023年10月12日
    00
合作推广
合作推广
分享本页
返回顶部