SQL - JSON 函數:初學者指南

您好,未來的數據庫大師!今天,我們將踏上一段令人興奮的旅程,探索 SQL 和 JSON 函數的世界。別擔心如果你之前從未寫過一行代碼——我將成為你的友好導遊,我們會一步步來。在本教程結束時,你將能夠像專家一樣輕鬆應對 JSON 數據!

SQL - JSON Functions

JSON 是什麼?

在我們深入 SQL 函數之前,讓我們先來了解一下 JSON。JSON 的全稱是 JavaScript Object Notation,它是存儲和交換數據的一種流行方式。可以把看作是一種組織信息的格式,這種格式對人類和計算機來說都很易於閱讀。

例如,以下是一些關於一本書的 JSON 數據:

{
"title": "The SQL Adventure",
"author": "Jane Coder",
"year": 2023,
"genres": ["Technology", "Education"]
}

看起來是不是既整潔又有序?這就是 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 Mastery"]}', '$.books') AS BookList;

結果:

BookList
--------
["SQL 101", "JSON Mastery"]

當你需要提取嵌套的 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 Basics", "author": "John Doe", "year": 2020, "genres": ["Technology", "Education"]}'),
(2, '{"title": "JSON and You", "author": "Jane Smith", "year": 2021, "genres": ["Technology"]}');

-- 查詢書名的語句
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),
',"Programming"]'
)
)
)
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