【SQL练习】demo1

news/2024/11/15 13:59:06/文章来源:https://www.cnblogs.com/o-O-oO/p/18384724

为了适应技术发展的需求,SQL 标准于 2016 年增加了以下 JSON 功能:

JSON 对象的存储与检索。将 JSON 对象表示成 SQL 数据。将 SQL 数据表示成 JSON 对象。

如今,主流关系型数据库都增加了原生 JSON 数据类型和相关函数的支持,使得我们可以将 SQL 的强大功能与 JSON 文档存储的灵活性相结合。当我们需要为应用程序增加文档存储功能时,可以考虑直接在现有的关系型数据库中使用 JSON 数据类型。

以下是一个使用 JSON 字段存储员工信息的示例:

Oracle 21c

CREATE TABLE employee_json(emp_id    INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,emp_info  JSON NOT NULL
);

MySQL

CREATE TABLE employee_json(emp_id    INTEGER AUTO_INCREMENT PRIMARY KEY,emp_info  JSON NOT NULL
);

Microsoft SQL Server

CREATE TABLE employee_json(emp_id    INTEGER IDENTITY PRIMARY KEY,emp_info  VARCHAR(MAX) NOT NULL CHECK ( ISJSON(emp_info)>0 )
);

PostgreSQL

CREATE TABLE employee_json(emp_id    INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,emp_info  JSONB NOT NULL
);

SQLite

CREATE TABLE employee_json(emp_id    INTEGER PRIMARY KEY,emp_info  TEXT NOT NULL CHECK ( JSON_VALID(emp_info)=1 )
);

我们可以使用 INSERT 语句将文本数据插入 JSON 字段:

INSERT INTO employee_json(emp_info)
VALUES ('{"emp_name": "刘备", "sex": "男", "dept_id": 1, "manager": null, "hire_date": "2000-01-01", "job_id": 1, "income": [{"salary":30000}, {"bonus": 10000}], "email": "liubei@shuguo.com"}');

其中,income节点是一个数组,包含了salary和bonus两个对象。

使用 SQL 语句查询 JSON 字段的方式与普通字段相同,SQL 标准使用 JSON_VALUE 函数查询 JSON 元素的值,使用 JSON_QUERY 函数查询元素中的对象和数组。

例如,以下语句从 emp_info 字段中获取员工的姓名和月薪:

Oracle和Microsoft SQL Server

SELECT emp_id,JSON_VALUE(emp_info, '$.emp_name') emp_name,JSON_VALUE(emp_info, '$.income[0].salary') salary,JSON_VALUE(JSON_QUERY(emp_info, '$.income[0]'),'$.salary') salary
FROM employee_json
WHERE JSON_VALUE(emp_info, '$.emp_name') = '刘备';
emp_id|emp_name|salary|salary
------|--------|------|------1|刘备      |30000 |30000 

MySQL和SQLite

SELECT emp_id,JSON_EXTRACT(emp_info, '$.emp_name') emp_name,JSON_EXTRACT(emp_info, '$.income[0].salary') salary
FROM employee_json
WHERE JSON_EXTRACT(emp_info, '$.emp_name') = '刘备';
# MySQL
emp_id|emp_name|salary
------|--------|------1|"刘备"   |30000
# SQLite
emp_id|emp_name|salary
------|--------|------1|刘备      | 30000

PostgreSQL

SELECT emp_id,JSONB_EXTRACT_PATH_TEXT(emp_info, 'emp_name') emp_name,JSONB_EXTRACT_PATH_TEXT(emp_info, 'income', '0', 'salary') salary 
FROM employee_json
WHERE JSONB_EXTRACT_PATH_TEXT(emp_info, 'emp_name') = '刘备';
emp_id|emp_name|salary
------|--------|------1|刘备      |30000 

SQL 标准还定义了各种操作 JSON 数据的函数,具体可以参考特定数据库的实现。

2019 年 9 月 17 图形查询语言(GQL)成为了继 SQL 之后另一种新的 ISO 标准数据库查询语言。
同时,最新的 SQL:2023 中增加的一个全新部分:Property Graph Queries (SQL/PGQ)。这个新功能支持使用图数据库的方式查询表中的数据。

参考🔗:

https://mp.weixin.qq.com/s/ZI2cNTgiJofOhguG-Cm_rg

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 整合 Kafka

项目目录结构pom.xml<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Kafka Starter --><dependency><groupId&…

.NET8 接入qwen2大语言模型

前言 dotnet8项目接入qwen大模型,这个主要用到了大模型管理工具叫做 ollama 有了它,接入大模型so easy。使用ollama可以接入很多大模型,详见:https://ollama.com/library 环境vs2022 preview dotent8 Windows 10 企业版1、下载ollama https://github.com/ollama/ollama安装…

实践项目-模拟公司自动化运维

(20240828,准备更新PostgreSQL部分) 大纲环境配置 系统:Debian 12.06 环境:阿里云ECS 以及 虚拟机序号 IP地址 域名 主机名1 192.168.100.12 k8s-master.yourname.com k8s-master2 192.168.100.15 k8s-node1.yourname.com k8s-node13 192.168.100.16 k8s-node2.yourname.c…

解决方案 | QTTabBar工具栏命令按钮设置everything、filelocator在当前文件夹下面搜索

备忘 everything 命令行参数参考 -path(是everythin参数) 表示在哪个位置(即哪个文件夹)下面搜索,这里%c%是qttabbar的参数,表示当前文件夹 https://www.voidtools.com/zh-cn/support/everything/command_line_interface/===================== filelocatorpro 命令行参数…

基于Ubuntu部署企业级kubernetes集群---k8s集群容器运行时Containerd准备

1.Containerd部署文件获取 1.下载 Containerd 文件wget https://github.com/containerd/containerd/releases/download/v1.7.21/cri-containerd-1.7.21-linux-amd64.tar.gz2.查看下载的文件 3.解压到当前文件到根目录下tar xf cri-containerd-1.7.21-linux-amd64.tar.gz -C /…

EMC/EMI详解

EMC/EMI详解 EMI(干扰)和EMS(抗扰)基础知识与整改流程 EMC主要包含两大项:EMI(干扰)和EMS(产品抗干扰和敏感度)。EMI(Electromagnetic Interference),表示电磁干扰(电磁干涉、电磁妨碍)的术语。由于发射电磁波会导致干扰,所以经常与Emission(辐射、发射)这一术…

java如何运行Python文件程序

有时候会遇到在java中启动Python的程序,下面进行说明package com.zxh.util;import lombok.extern.slf4j.Slf4j;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader;/*** python执行器** @Author zxh*…

zabbix图形界面的字体问题

现象,zabbix web语言改为中文后 解决过程: 1.去windows下控制面板-字体-复制(楷体-常规)find / -name defines.inc.php cat /usr/share/zabbix/include/defines.inc.php 查看到字体及字体路径 进入字体目录:cd /usr/share/zabbix/assets/fonts 上传新字体 替换字体配置:…

工业和信息化部通报2024年第7批涉嫌侵害用户权益的APP和SDK

​工业和信息化部近日公布了一批存在安全问题的APP和SDK名单,这些应用和软件开发工具包(SDK)因违反相关法律法规,涉及违规收集个人信息、信息窗口乱跳转等问题被通报。此次通报的APP和SDK涉及多个应用领域,包括记账、游戏、实用工具、影视、网络加速、广告服务等。通报中指…

深度解析HarmonyOS SDK实况窗服务源码,Get不同场景下的多种模板

HarmonyOS SDK实况窗服务(Live View Kit)作为一个实时呈现应用服务信息变化的小窗口,遍布于设备的各个使用界面,它的魅力在于将复杂的应用场景信息简洁提炼并实时刷新,在不影响当前其他应用操作的情况下,时刻向用户展示最新的信息动态,用户也可以点击实况窗卡片或胶囊进…

uniapp js 数独小游戏 9*9 数独 2.0

效果图: game.vue <template> <view> <view class="main"> <view class="foot"> <view v-if="!isTip" class="sudoku_area"> <view v-for="(row, index) of rowList" :key=&qu…

2024-08-28:用go语言,给定一个从1开始、长度为n的整数数组nums,定义一个函数greaterCount(arr, val)可以返回数组arr中大于val的元素数量。 按照以下规则进行n次

2024-08-28:用go语言,给定一个从1开始、长度为n的整数数组nums,定义一个函数greaterCount(arr, val)可以返回数组arr中大于val的元素数量。 按照以下规则进行n次操作,将nums中的元素分配到两个数组arr1和arr2中: 1.第一次操作将nums[1]加入arr1。 2.第二次操作将nums[2]加…