SQL新特性/SQL语言增强以及JSON新特性

news/2025/11/2 13:58:42/文章来源:https://www.cnblogs.com/testdocs/p/19184885

本文给大家简单介绍一下最新标准中的型特性,主要分为以下三大类别:

  1. 已有 SQL 语言的增强;

  2. JSON 相关的新特性;

  3. 新增的属性图查询语言。

该版本新增功能都属于可选特性。

SQL 增强

UNIQUE 约束中的空值(F292)

这个功能用于定义唯一约束中是否允许多个空值。例如:

CREATE TABLE t1 (
a int,
b int,
c int,
UNIQUE (a, b, c)
);

INSERT INTO t1 VALUES (1, NULL, NULL);
INSERT INTO t1 VALUES (1, NULL, NULL); -- ?

问题在于第二个插入语句是否会违法唯一约束。

显然,已有的标准没有明确的定义。为了解决这个问题,新标准增加了一个选项。例如:

CREATE TABLE t2 (
a int,
b int,
c int,
UNIQUE NULLS DISTINCT (a, b, c)
);

INSERT INTO t2 VALUES (1, NULL, NULL);
INSERT INTO t2 VALUES (1, NULL, NULL); -- 正确

同时,

CREATE TABLE t3 (
a int,
b int,
c int,
UNIQUE NULLS NOT DISTINCT (a, b, c)
);

INSERT INTO t3 VALUES (1, NULL, NULL);
INSERT INTO t3 VALUES (1, NULL, NULL); -- 错误

NULLS DISTINCT 选项将多个空值看作不同的数据,因此不会违反唯一约束;NULLS NOT DISTINCT 选项将多个空值看作相同的数据,因此违反了唯一约束。

该选项的默认值取决于数据库产品的具体实现,这样可以兼容已有的行为。

分组表中的 ORDER BY(F868)

我们来看一个示例:

CREATE TABLE product (
product_id int PRIMARY KEY,
product_name varchar,
product_code varchar UNIQUE
);

CREATE TABLE product_part (
product_id int,
part_id int,
num int,
PRIMARY KEY (product_id, part_id)
);

SELECT product.product_id, sum(product_part.num)
FROM product JOIN product_part ON product.product_id = product_part.product_id
GROUP BY product.product_id
ORDER BY product.product_code;

以上示例在大多数 SQL 实现中都能正常工作,但是标准却不允许这种查询方式。也就是说,SQL 标准不允许使用没有出现在 SELECT 列表中的分组表字段(product.product_code)进行排序。新标准则允许 SQL 实现明确支持这种行为。

作为用户,我们并不需要关心这个问题。

GREATEST 和 LEAST 函数(T054)

这个功能增加了两个新的标量函数:GREATEST(最大值)以及 LEAST(最小值)。它们不是聚合函数 MAX 和 MIN,而是返回一组参数中的最大值和最小值。实际上很多数据库已经实现了这两个函数:

SELECT greatest(1, 2);  --> 2
SELECT least(1, 2); --> 1

SELECT greatest(1, 2, 3); --> 3
SELECT least(1, 2, 3); --> 1

字符串填充函数(T055)

这个功能增加了两个新的字符串函数:LPAD(左侧填充)以及 RPAD(右侧填充)。这两个函数同样在很多数据库中已经有了实现:

SELECT lpad(cast(12345.67 as varchar), 12, '*');

****12345.67

默认使用的填充字符为空格。

多字符 TRIM 函数(T056)

已有的单字符截断函数(TRIM({LEADING|TRAILING|BOTH} ‘x’ FROM val))只能指定要截断的单个字符,新函数则可以指定多个需要截断的字符,而且语法更加简洁。例如:

SELECT ltrim('****12345.67', '*');

可选的字符串类型最大长度(T081)

这个功能允许不指定 VARCHAR 类型的最大长度。在此之前,我们经常会看到为了支持任意长度而指定一个很大的长度值:

CREATE TABLE t1 (
a VARCHAR(1000),
b VARCHAR(4000),
...
);

现在可以简单的指定数据类型:

CREATE TABLE t1 (
a VARCHAR,
b VARCHAR,
...
);

这种情况下,字段的最大长度取决于数据库实现。

增强的递归循环标识(T133)

CYCLE 子句是鲜为人知的一个递归查询功能,可以用于检测循环递归:

WITH RECURSIVE ... (
SELECT ...
UNION ALL
SELECT ...
)
CYCLE id SET is_cycle TO 'Y' DEFAULT 'N' USING path;

这种方式可以基于 id 字段检测是否出现循环递归,并且将 is_cycle 字段设置为指定值。

当 SQL 标准增加递归循环时,还没有布尔类型,因此使用了一个字符串。如今 SQL 标准提供了布尔类型,因此上面的查询可以改进为:

WITH RECURSIVE ... (
SELECT ...
UNION ALL
SELECT ...
)
CYCLE id SET is_cycle USING path;

ANY_VALUE 函数(T626)

这个新的聚合函数可以从一组数据中返回任意一个非空值。例如:

CREATE TABLE t1 (
a int,
b int
);

INSERT INTO t1 VALUES (1, 11), (1, 22), (1, 33);

SELECT a, any_value(b)
FROM t1
GROUP BY a;

以上查询可能会返回(1 | 11)、(1 | 22)或者(1 | 33)。

非十进制的整数常量(T661)

这个新功能支持十六进制、八进制以及二进制的整数常量。

SELECT 0xFFFF, 0o755, 0b11001111;

数字常量中的下划线(T662)

这个功能允许在数字常量中使用下划线,提高可读性。

SELECT ... WHERE a > 1_000_000;
UPDATE ... SET x = 0x_FFFF_FFFF ...

JSON 新功能

JSON 数据类型(T801)

新标准增加了 JSON 数据类型。许多数据库产品实际上已经提供了这个类型。

SQL:2016 只是支持了 JSON 数据的操作,数据仍然使用字符串存储。新的功能同时还增加了一些 JSON 相关的函数,例如 JSON_SERIALIZE、JSON_SCALAR 以及 IS JSON。

增强的 JSON 数据类型(T802)

这个功能可以为 JSON 类型指定额外的选项。具体来说,可以指定一个唯一键检测,例如 JSON(‘…text…’ WITH UNIQUE KEYS)。

基于字符串的 JSON(T803)

这个功能代表了 SQL:2016 中的字符串 JSON。数据库提供的 JSON 函数(例如 JSON_OBJECT、JSON_OBJECTAGG、JSON_TABLE 等)可以选择支持字符串格式的 JSON 数据还是原生的 JSON 数据类型,也可以支持两者。

SQL/JSON 路径中的十六进制整数常量(T840)

这个功能允许在 SQL/JSON 路径语言中使用十六进制整数常量。

虽然不属于这个功能,但是 SQL 标准现在允许以扩展插件的形式支持 JavaScript(ECMAScript),因此不需要每次 ECMAScript 更新时更新 SQL 标准。所以 SQL/JSON 路径现在也可以支持最新 ECMAScript 中的其他数字常量,例如二进制整数和下划线分隔符。

SQL/JSON 简化访问符(T860-T864)

“简化访问符”功能允许使用点号和数组语法访问 JSON 数据中的复合类型和数组类型。例如,假设字段 j 是一个 JSON 类型,包含以下数据:

{"foo": {"bar": [100, 200, 300]}, ...}

我们可以使用简化访问符获取字段中的信息:

SELECT t.j.foo.bar[2], ... 
FROM tbl t ...

SQL/JSON 元素方法(T865-T878)

SQL/JSON 元素方法或者函数可以在 SQL/JSON 路径表达式中使用,对元素值进行处理。SQL:2016 已经定义了一些这类方法,例如 abs()、floor()、size()。新增的方法主要用于数据类型转换:

  • T865: SQL/JSON item method: bigint()

  • T866: SQL/JSON item method: boolean()

  • T867: SQL/JSON item method: date()

  • T868: SQL/JSON item method: decimal()

  • T869: SQL/JSON item method: decimal() with precision and scale

  • T870: SQL/JSON item method: integer()

  • T871: SQL/JSON item method: number()

  • T872: SQL/JSON item method: string()

  • T873: SQL/JSON item method: time()

  • T874: SQL/JSON item method: time_tz()

  • T875: SQL/JSON item method: time precision

  • T876: SQL/JSON item method: timestamp()

  • T877: SQL/JSON item method: timestamp_tz()

  • T878: SQL/JSON item method: timestamp precision

JSON 数据比较功能(T879-T882)

这个功能允许针对 JSON 数据类型的比较、排序以及分组操作。

属性图查询语言

这是 SQL 标准中增加的一个全新部分:Property Graph Queries (SQL/PGQ)。这个新功能支持使用图数据库的方式查询表中的数据。

完整的属性图查询语言比较复杂,以下是一个简单的示例:

CREATE TABLE person (...);
CREATE TABLE company (...);
CREATE TABLE ownerof (...);
CREATE TABLE transaction (...);
CREATE TABLE account (...);

CREATE PROPERTY GRAPH financial_transactions
VERTEX TABLES (person, company, account)
EDGE TABLES (ownerof, transaction);

SELECT owner_name,
SUM(amount) AS total_transacted
FROM financial_transactions GRAPH_TABLE (
MATCH (p:person WHERE p.name = 'Alice')
-[:ownerof]-> (:account)
-[t:transaction]- (:account)
<-[:ownerof]- (owner:person|company)
COLUMNS (owner.name AS owner_name, t.amount AS amount)
) AS ft
GROUP BY owner_name;

以上示例中,表之间还需要定义外键,这样属性图定义才能确定它们之间的联系;或者也可以在属性图定义时指定表之间的联系。

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

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

相关文章

CSP2025 游寄

Day -??? 膜你赛,膜你赛,还是他妈膜你赛。 Day 0 上午出发,火车上爽爽开摆。 到达秦皇岛,宾馆环境还不错。和 yonghu10010 一个屋。 晚上爽完你画我猜、块、MC,直接干道 2:00 了,再不睡第二天就犯困啦! Kenb…

MySQL性能分析(五)之status详解

一、概述 SHOW STATUS是MySQL内置的核心诊断命令,用于实时查看数据库服务器的运行状态指标,涵盖连接数、查询性能、缓存使用、锁等待等关键维度。这些指标如同数据库的“体检报告”,能帮助开发者快速定位性能瓶颈、…

2025 年 11 月电动门厂家最新推荐,精准检测与稳定性能深度解析

随着出入口智能化升级,电动门成为商业、工业等场景核心设备,但市场产品稳定性差异显著,采购者难辨优劣。2025 年 11 月,国际出入口设备检测协会开展电动门厂家专项测评,覆盖全球 120 余家主流品牌。测评以 “精准…

《密码系统设计》第九周预习

20231313 张景云《密码系统设计》第九周预习AI对内容的总结 Headfirst C 一、系统调用基础 1. 核心定义 系统调用是操作系统内核中的函数,是C程序与硬件、操作系统交互的桥梁。C标准库(如printf())底层依赖系统调用…

《密码系统设计》第九周预习

20231313 张景云《密码系统设计》第九周预习AI对内容的总结 Headfirst C 一、系统调用基础 1. 核心定义 系统调用是操作系统内核中的函数,是C程序与硬件、操作系统交互的桥梁。C标准库(如printf())底层依赖系统调用…

2025年程序员兼职常用的10个平台推荐 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

JavaScript笔记(1)

基本数据类型(值类型):Number、String、Boolean、Null、Undefined、Symbol、BigInt直接存储在栈内存中不可以动态地添加属性: let name = "bob" name.age = 22 // Cannot create property age on string…

回归 CSP-S2025游记

洛谷传送门去年打完 \(CSP-S\) 拿了 \(2=\) 没过线就退役回 \(whk\) 了,回归之后的第一站:\(CSP2025\)坐标 \(HA\)DAY 0 初赛前一周回归复习了一下 (其实复习的基本上都没考) DAY 0.5 CSP-S第一轮(2025.9.28) 起的…

使用netfilter_queue重定向IP数据包

使用netfilter_queue重定向IP数据包 一、开发环境 OS:Debian 12 gcc :15.1.0 安装libnetfilter-queue-dev开发工具包sudo apt-get install libnetfilter-queue-dev

线性表、串、数组、广义表

队列和栈 循环队列:队空 head=tail 队满 (tail+1)%size=head 空串:长度为0的串,不包含任何字符 空格串:一个或多个空格组成的串 串比较:以字符的ASCLL码的值,当其中一个串先结束,则另一个串长的为大。 让我们…

【赶紧收藏】7款Windows数据恢复神器!能解决99%的问题,手慢无!

随着全球智能手机和电脑用户数量的增长,对优质数据恢复软件的需求也日益增长。与此同时,随着数字用户数量的增加,数据丢失问题也愈发突出。 要恢复丢失的数据,你需要一款优秀的专业数据恢复软件,它能够从各种数据…

回归CSP-S2025游记

洛谷传送门去年打完 \(CSP-S\) 拿了 \(2=\) 没过线就退役回 \(whk\) 了,回归之后的第一站:\(CSP2025\)坐标 \(HA\)DAY 0 初赛前一周回归复习了一下 (其实复习的基本上都没考) DAY 0.5 CSP-S第一轮(2025.9.28) 起的…

分类测试

分类测试分类测试

有哪些好用的媒体播放器

HJX media player HJX media player是黄景行电脑软件制作的一款媒体播放器,支持多种格式的音频,例如.mp3 .mpg .wmp .mp4 .mpeg .bmp .png .jpeg .aac .ogg

THUSC 2024 游记

和 @GoodCoder666 一起,/bx 时间久远,好像记不得什么了 嗯好像没过d1t1,但是通过了d1t2,我记得是个好玩的题 day2的工程题好像很好拿分,但是当时还是太弱了读不懂信息熵,最后400- 拿了个3=跑路啦

2025年10月学习机品牌推荐:AI精准学榜对比榜单

开学不到一个月,家长群里“作业崩溃”截图再次刷屏:新课标词汇量陡增、数学建模题连家长都看不懂、物理实验视频要学生自己拍。教育部数据显示,2024 年中小学“双减”课后服务覆盖率已达 100%,但校内时间压缩,家庭…

2025年10月学习机品牌推荐:护眼大屏榜对比与品牌排名

开学不到一个月,不少家长发现孩子在家预习、复习效率低,作业错题反复出现,课外辅导班又贵又远。学习机因此成为“家庭第二课堂”的刚需:既要同步校内教材,又要能精准查漏补缺,还要护眼、易操作。教育部2025年7月…

JSOI 2024 游记

搬过来了( day -114514 无法停课( day 1 快进到开t1。写写写推推推 3h。奇怪的不完全的二分做法(?,假了假了。麻了麻了。要寄了怎么办。()于是扔,后两题随便写写暴力走人。 [0,100]+24+8=[32,132] upd:洛谷T1…

2025年10月学习机品牌评价榜:五款主流机型横向对比指南

孩子放学回家,作业堆积、错题反复、新课标改革后家长不会辅导,这是不少家庭每晚的真实场景。教育部“双减”之后,校内时间压缩,家庭学习场景被放大,家长对“同步、精准、护眼”的需求集中爆发。中怡康2025年三季度…

2025年11月专业太空舱民宿品牌推荐排行:优质厂家对比评价

随着旅游消费升级和个性化住宿需求增长,太空舱民宿作为新兴业态正迎来快速发展。根据文化和旅游部数据,2024年国内特色民宿市场规模同比增长23%,其中创新型住宿产品占比显著提升。选择太空舱民宿的投资者多为景区运…