SQL - JSON 函数:初学者指南

你好,未来的数据库大师们!今天,我们将踏上一段激动人心的旅程,探索 SQL 和 JSON 函数的世界。如果你之前从未编写过一行代码,也不用担心——我会成为你友好的向导,我们会一步步地进行。在本教程结束时,你将能够像专业人士一样熟练地处理 JSON 数据!

SQL - JSON Functions

什么是 JSON?

在我们深入 SQL 函数之前,让我们先来了解一下 JSON。JSON 是 JavaScript Object Notation 的缩写,它是存储和交换数据的一种流行方式。可以把它看作是一种组织信息的方式,这种格式既便于人类阅读,也便于计算机处理。

例如,以下是一些关于一本书的 JSON 数据:

{
"title": "SQL 冒险之旅",
"author": "简·编码者",
"year": 2023,
"genres": ["技术", "教育"]
}

看看这有多么整洁有序!这就是 JSON 的魅力所在!

为什么在 SQL 中使用 JSON?

你现在可能在想:“我们为什么需要在数据库中使用 JSON?”想象一下,你正在经营一个在线书店。有些书可能有多个作者,而有些书只有一个作者。有些书可能有多种类型,而有些书只有几种类型。JSON 允许我们灵活地存储这种多样化的信息,而无需创建大量独立的表。

SQL JSON 函数:你的新好朋友

让我们来认识一下我们在 SQL-JSON 游戏中的明星球员。这些函数帮助我们在 SQL 数据库中处理 JSON 数据。

1. JSON_VALUE()

这个函数就像一个寻宝者。它会深入你的 JSON 数据并提取一个特定的值。

SELECT JSON_VALUE('{"name": "Alice", "age": 30}', '$.name') AS FirstName;

这将返回:

FirstName
--------
Alice

在这里,我们要求 SQL 查看我们的 JSON 数据并找到与 "name" 键关联的值。

2. JSON_QUERY()

虽然 JSON_VALUE 只检索单个值,但 JSON_QUERY 可以获取整个对象或数组。

SELECT JSON_QUERY('{"books": ["SQL 101", "JSON 精通"]}', '$.books') AS BookList;

结果:

BookList
--------
["SQL 101", "JSON 精通"]

当需要提取嵌套的 JSON 结构时,这个函数非常完美。

3. JSON_MODIFY()

这个函数就像你的个人 JSON 编辑器。它允许你在 JSON 数据中更改值。

DECLARE @json NVARCHAR(100) = '{"name": "Bob", "age": 35}';
SELECT JSON_MODIFY(@json, '$.age', 36) AS UpdatedJSON;

结果:

UpdatedJSON
-----------
{"name": "Bob", "age": 36}

我们刚刚给 Bob 过了一个生日!我们把他的年龄从 35 改成了 36。

4. ISJSON()

这个函数是我们的 JSON 侦探。它会检查一个字符串是否为有效的 JSON。

SELECT ISJSON('{"name": "Charlie", "age": 40}') AS IsValidJSON;

结果:

IsValidJSON
-----------
1

返回值为 1 表示“是的,这是有效的 JSON”,而 0 表示“不,这不是有效的 JSON”。

5. JSON_OBJECT()

这个函数就像一个 JSON 工厂。它从你的 SQL 数据创建 JSON 对象。

SELECT JSON_OBJECT('name': 'Dana', 'age': 28) AS PersonJSON;

结果:

PersonJSON
----------
{"name":"Dana","age":28}

这是将你的常规 SQL 数据转换为 JSON 格式的一个很好的方式。

将所有内容结合起来

现在我们已经认识了我们的 JSON 函数,让我们看看如何在现实世界的场景中使用它们。想象一下我们在管理之前提到的那个在线书店。

-- 创建一个用于存储书籍信息的表
CREATE TABLE Books (
BookID INT PRIMARY KEY,
BookInfo NVARCHAR(MAX)
);

-- 插入一些示例数据
INSERT INTO Books (BookID, BookInfo)
VALUES
(1, '{"title": "SQL 基础", "author": "约翰· Doe", "year": 2020, "genres": ["技术", "教育"]}'),
(2, '{"title": "JSON 与你", "author": "简·史密斯", "year": 2021, "genres": ["技术"]}');

-- 获取书籍标题的查询
SELECT
BookID,
JSON_VALUE(BookInfo, '$.title') AS Title
FROM Books;

-- 获取所有类型的查询
SELECT
BookID,
JSON_QUERY(BookInfo, '$.genres') AS Genres
FROM Books;

-- 更新书籍的年份
UPDATE Books
SET BookInfo = JSON_MODIFY(BookInfo, '$.year', 2023)
WHERE BookID = 1;

-- 向书籍添加一个新的类型
UPDATE Books
SET BookInfo = JSON_MODIFY(
BookInfo,
'$.genres',
JSON_QUERY(
CONCAT(
'[',
SUBSTRING(JSON_QUERY(BookInfo, '$.genres'), 2, LEN(JSON_QUERY(BookInfo, '$.genres')) - 2),
',"编程"]'
)
)
)
WHERE BookID = 2;

-- 检查 BookInfo 是否为有效的 JSON
SELECT
BookID,
ISJSON(BookInfo) AS IsValidJSON
FROM Books;

就这样!我们已经创建了一个表,插入 JSON 数据,查询特定的值,更新我们的 JSON,甚至向 JSON 数组添加了新的信息。

结论

恭喜你!你已经迈出了进入 SQL JSON 函数世界的第一步。这些强大的工具允许我们在 SQL 数据库中处理灵活、嵌套的数据结构。在你继续旅程的过程中,你会发现更多利用这些函数创建健壮、灵活数据库解决方案的方式。

记住,掌握这些概念的关键是练习。所以不要害怕用你自己的 JSON 数据和 SQL 查询进行实验。快乐编码,愿你的数据库始终保持规范化!

函数 描述 示例
JSON_VALUE() 从 JSON 字符串中提取标量值 JSON_VALUE('{"name": "Alice", "age": 30}', '$.name')
JSON_QUERY() 从 JSON 字符串中提取对象或数组 JSON_QUERY('{"books": ["SQL 101", "JSON Mastery"]}', '$.books')
JSON_MODIFY() 在 JSON 字符串中修改值 JSON_MODIFY('{"name": "Bob", "age": 35}', '$.age', 36)
ISJSON() 检查字符串是否为有效的 JSON ISJSON('{"name": "Charlie", "age": 40}')
JSON_OBJECT() 创建 JSON 对象 JSON_OBJECT('name': 'Dana', 'age': 28)

Credits: Image by storyset