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