Postgresql JSON操作符

news2024/10/17 2:49:16

postgresql json数据

参考文章:
JSON数据操作

操作符

1-> 表示获取一个JSON数组元素,支持下标值(下标从0开始)Key获取。
2->> 表示获取一个JSON对象字符串。
3、#> 表示获取指定路径的一个JSON对象。
4、#>>表示获取指定路径的一个JSON对象的字符串。

1、版本

select version();

在这里插入图片描述

2、数据准备

  • 创建学生表

    CREATE TABLE students
    (
     stu_id SERIAL primary key ,
     student_desc jsonb
    );
    
    -- 插入数据
    INSERT INTO "students" ("stu_id", "student_desc") VALUES (1, '{"date": "2024-10-12", "sdata": {"sno": "1001", "tel": ["010-82886998", "13550011000"], "addr": ["北京市海淀区科学大厦", "海淀区中关村路2号"], "sage": "23", "ssex": "女"}, "sname": "李思佳", "courses": [{"cno": "01", "cname": "math", "teacher": {"tno": "101", "tname": "刘平安"}}, {"cno": "02", "cname": "chinese", "teacher": {"tno": "102", "tname": "李昌阳"}}, {"cno": "03", "cname": "english", "teacher": {"tno": "103", "tname": "Steven"}}]}');
    INSERT INTO "students" ("stu_id", "student_desc") VALUES (2, '{"sc": [{"cno": "01", "score": "76"}, {"cno": "02", "score": "77"}, {"cno": "03", "score": "87"}], "date": "2024-10-12", "sdata": {"sno": "1004", "tel": ["021-2861789", "18211028796"], "addr": ["科技一路6号", "科技二路8号", "科技三路20号"], "sage": "20", "ssex": "女"}, "sname": "张成", "courses": [{"cno": "01", "cname": "math", "teacher": {"tno": "101", "tname": "刘平安"}}, {"cno": "02", "cname": "chinese", "teacher": {"tno": "102", "tname": "李昌阳"}}, {"cno": "03", "cname": "english", "teacher": {"tno": "103", "tname": "Steven"}}]}');
    
    
  • 学生成绩表

    CREATE TABLE sc (
      "sno" text COLLATE "pg_catalog"."default" NOT NULL,
      "cno" text COLLATE "pg_catalog"."default" NOT NULL,
      "score" text COLLATE "pg_catalog"."default",
      CONSTRAINT "sc_pkey" PRIMARY KEY ("sno", "cno")
    );
    
    -- 插入数据
    insert into sc values('1001','01','99');
    insert into sc values('1001','02','89');
    insert into sc values('1001','03','77'); 
    insert into sc values('1002','01','45');
    insert into sc values('1002','02','78');
    insert into sc values('1002','03','100'); 
    insert into sc values('1003','01','90');
    insert into sc values('1003','02','76');
    insert into sc values('1003','03','87');
    
    

3、查询

3.1获取一个JSON对象字符串

-- ->>表示获取一个JSON对象字符串。
select student_desc ->> 'sdata' as stu_data,
student_desc ->> 'sname'as stu_name
from students where stu_id = 1

在这里插入图片描述

3.2获取一个JSON数组元素

-- -> 表示获取一个JSON数组元素,支持下标值(下标从0开始)、Key获取。
select student_desc->'sdata' as stu_data  from students;

在这里插入图片描述

3.3获取一个JSON对象内数据

-- 获取对象 -> 返回值带引号
select student_desc->'sdata'->'sage' as age  from students;

在这里插入图片描述

-- 获取值 ->> 直接返回值
select student_desc->'sdata'->>'sage' as age  from students;

在这里插入图片描述

3.4获取一个JSON对象内数组

-- 获取数组对象
select student_desc->'sdata'#>'{addr}' as addr  from students;

在这里插入图片描述

-- 获取数组对象值 指定下标
select student_desc->'sdata'#>>'{addr,1}' as addr  from students;

在这里插入图片描述

3.5 获取一个JSON数组对象

-- #> 表示获取指定路径的一个JSON对象
-- 获取整个数组对象
select student_desc #>'{courses}' as stu_courses from students;

在这里插入图片描述

-- 获取数组对象,指定下标

select student_desc #>'{courses,0}' as stu_courses from students;

在这里插入图片描述

3.6获取一个JSON数组内对象内的数据

-- 获取数组内对象
select student_desc #>'{courses,0}'->'teacher' as teacher from students;

在这里插入图片描述

-- 获取数组内对象中数据
select student_desc #>'{courses,0}'->'teacher'->>'tname' as stu_courses from students;

在这里插入图片描述

4、增改

新增一个属性

update students set student_desc=student_desc|| '{"nickname":"平安"}' 
where stu_id=1;

在这里插入图片描述

删除一个属性

update students set student_desc = student_desc - 'nickname' where stu_id=1;

删除所有

update students set student_desc = student_desc - 'sdata' where stu_id=1;

5、联合查询

表转JSON

-- 
select row_to_json(sc.*) from sc where sno='1001'; 

联表查询

-- 联表查询
select student_desc->>'sname' as stu_name,student_desc #>'{courses}' as stu_courses from sc 
join students s on  text(s.student_desc->'sdata'->>'sno')=sc.sno and sc.sno='1001' and sc.cno='01';

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2209822.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

脉冲目标检测网络模型SpikeYOLO——基于整值训练和脉冲驱动推理的高性能节能目标检测神经网络

最近看到目标检测领域又出新作,ECCV2024 满分Oral论文——《Integer-Valued Training and Spike-Driven Inference Spiking Neural Network for High-performance and Energy-efficient Object Detection》论文地址在这里,如下所示: 感兴趣的…

浪潮信息领航边缘计算,推动AI与各行业深度融合

在9月20日于安徽盛大召开的浪潮信息边缘计算合作伙伴大会上,浪潮信息指出,未来的计算领域将全面融入AI技术,特别是在企业边缘侧,智能应用特别是生成式人工智能应用正在迅速普及,这一趋势正引领边缘计算向边缘智算的方向…

R语言机器学习算法实战系列(三)lightGBM算法(Light Gradient Boosting Machine)

文章目录 介绍原理:应用方向:教程下载数据加载R包导入数据数据预处理数据描述数据切割设置数据对象调节参数训练模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve特征的重要性模型SHAP值解释保存模型总结系统信息介绍 LightGBM(Light Gradient B…

QEMU与KVM架构

完整架构图,来自QEMU官网 QEMU与KVM架构总体上分为3部分。 VMX root模式的应用层(左上) VMX root模式的内核层(左下) 虚拟机的运行(右上) VMX root相对于VMX non-root模式,CPU引入了…

基于Arduino的自动浇灌系统

基于Arduino的自动浇灌系统 一、项目说明二、项目材料三、电路设计四、怎样工作五、怎样设置 一、项目说明 嘿,伙计们,在这篇教程中,我将向你们展示如何使用Arduino制作一个植物浇水系统,以一种简单的方式帮助你始终保持植物的水…

【MySQL】mysql导出数据WPS科学计数法解决方法

导出的长串数字 id 会导致科学计数法,修改 WPS 单元格格式可以解决 数字太长还是有问题,最后有个数字会变成 0 可以 直接用 python脚本转换一下 vim convert_txt_xlsx.py #!/usr/bin/env python3# 使用方法# 安装库 # pip3 install pandas openpyxl…

见微知著:OpenEuler系统启动流程

OpenEuler是一个开源的Linux发行版,它的启动流程涉及到多个阶段,包括固件初始化、引导加载程序、内核启动、初始化系统和服务管理器等。下面将详细介绍OpenEuler的启动流程。 一、启动流程 1. 固件初始化(BIOS/UEFI) 启动过程首…

跟踪用户状态,http协议无状态 Cookie HttpSession,Session和Cookie的关系

1.概念分析 跟踪用户状态指的是web应用能够分辨请求属于哪个用户,进而记录用户的状态,从而为用户提供连续的针对性的服务。比如有多个客户在同一个购物网站上购物,每一个用户都会有一个虚拟的购物车。当某个客户发送请求将商品添加到购物车时…

部署 Docker harbor (httphttps)及使用

部署 Docker harbor (http/https)及使用 官网下载docker harbor 和docker-compose 下载最新版本即可 https://github.com/goharbor/harbor https://github.com/docker/compose/releases 一.Docker harbor 配置http使用 1.解压harbor.tar # 解压至指定目录 [rootdocker ~]…

线程池 jvm web

线程池 分类 newCachedThreadPool 可进行缓存重复利用的线程池 newFxiedThreadPool 可重复利用的固定数目的线程池 newSingelThreadPool 单个work线程 newSingelThreadScheduledExecutor 单线程定时执行程序 newWorkStealingPool 带并行级别的线程池 核心参数 …

【OpenCV】(二)—— 图片读取展示和保存

上一小节中我们成功安装了opencv,我们这次学习使用opencv最基础的功能,读取和展示图片,首先准备一张用于实验的样例图片【cat.jpg】如下: 然后就是创建一个python项目并导入相关依赖 import cv2读取图片 读取图片使用imread方法…

Flythings学习(二)控件相关

文章目录 1 前言2 通用属性2.1 控件ID值2.2 控件位置2.3 背景色2.4 背景图2.5 显示与隐藏2.6 控件状态2.7 蜂鸣器控制 3 文本类TextView4 按键类 Button4.1 系统按键4.2 处理按钮长按事件4.3 处理按键触摸事件 5 复选框CheckBox6 单选组 RadioGroup7 进度条,滑块7.1…

vscode如何通过ssh远程链接其它电脑

客户端(本机)linux系统中vscode通过ssh插件远程连接服务器,其操作步骤如下: 配置服务器的配置文件 首先在~/.ssh/config文件中输入服务器的配置信息,如果没有这个文件就新建一个,其内容如下: …

线性系统性能分析方法2——根轨迹法

反馈控制系统的性质取决于闭环传递函数,只要求解出闭环系统的特征根,便能得到系统响应的变化规律。但对于3阶以上的系统求根比较困难。如果系统中有一个可变参数时,求根就更困难了。 1948年,伊凡思提出了一种确定系统闭环特征根的…

ENSP搭建基础网络拓扑图

一、ENSP的基本操作 1、配置网关 进入系统视图与退出 <Huawei>system-view [Huawei]quit 进入G0/0/0接口后配置ip [R1]interface GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 192.168.1.1 24查询所有接口的ip配置 [R1]display ip interface brief…

02 django管理系统 - base.html模板的搭建

下面&#xff0c;我们正式开始XX市第X医院员工信息管理系统的开发 首先&#xff0c;我们项目的目录结构如下&#xff1a; 然后&#xff0c;先把模板【base.html】界面的框架搭起来 {% load static %}<!DOCTYPE html> <html lang"en"><head><m…

使用最小二乘法画噪声数据的近似曲线

文章目录 问题MATLAB代码验证数据1验证数据2 问题 已知有系列含有噪声的数据&#xff08;x , y&#xff09;用最小二乘法计算m和b。(ymxb) MATLAB代码 disp(This promgram perform a leastsquares fit of an); disp(input data set to a straight line.); n_points input(E…

minio储存应用部署

一、minio简介 MinIO 是一个高性能的对象存储系统&#xff0c;设计用于存储大量的非结构化数据&#xff0c;如图片、视频、日志文件等。它完全兼容 Amazon S3 API&#xff0c;这意味着你可以使用与 S3 相同的工具和接口来管理和访问 MinIO 中的数据。 二、主要特性 1. S3 兼…

Vue3实现面板分割

Vue3实现面板分割 下面是将你提供的 Vue 组件使用 SCSS&#xff0c;并以 Vue 3 的组合式 API 形式的面板分割代码。 1、建立组件相关的文件夹 2、将下面代码拷贝到index.vue中 <template><div class"g-split" ref"gSplit"><!-- 水平方向…

数学建模算法与应用 第15章 预测方法

目录 15.1 微分方程模型 Matlab代码示例&#xff1a;求解简单的微分方程 15.2 灰色预测模型&#xff08;GM&#xff09; Matlab代码示例&#xff1a;灰色预测模型 15.3 自回归模型&#xff08;AR&#xff09; Matlab代码示例&#xff1a;AR模型的预测 15.4 指数平滑法 M…