<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
用法提示:
json
字串不是陣列,則直接使用$.欄位名
json
字串是陣列[Array]
,則直接使用$[對應元素的索引id]
使用json欄位名->’$.json屬性’
進行查詢條件,注意:如果 ‘->’ 不能用也可用 ‘->>’ 查詢
舉個例子:如果想查詢deptLeader=張五的資料,那麼sql語句如下:
SELECT * from dept WHERE json_value->'$.deptLeaderId'='5';
比如想查dept為“部門3”和deptLeaderId=5的資料,sql如下:
SELECT * from dept WHERE json_value->'$.deptLeaderId'='5' and json_value->'$.deptId'='5';
比如想查詢json格式中deptLeader=張五和deptId=5的資料
SELECT * from dept WHERE json_value->'$.deptLeaderId'='5' and json_value->'$.deptId'='5';
這裡我們要連表查詢在dept 表中部門leader在dept_leader 中的詳情
SELECT * from dept,dept_leader WHERE dept.json_value->'$.deptLeaderId'=dept_leader.json_value->'$.id' ;
寫到這裡大家都發現了,我們查詢的json都是整條json資料,這樣看起來不是很方便,那麼如果我們只想看json中的某個欄位怎麼辦?
Name | Description | 解釋 |
---|---|---|
-> | Return value from JSON column after evaluating path; equivalent to JSON_EXTRACT() | 計算路徑後返回JSON列的值;相當於JSON_EXTRACT () |
->> | Return value from JSON column after evaluating path and unquoting the result; equivalent to JSON_UNQUOTE(JSON_EXTRACT()). | 從JSON列返回值後,就算路徑和取消引號的結果;相當於JSON_UNQUOTE (JSON_EXTRACT ()) |
JSON_ARRAY() | Create JSON array | 建立JSON陣列 |
JSON_ARRAY_APPEND() | Append data to JSON document | 向JSON檔案追加資料 |
JSON_ARRAY_INSERT() | Insert into JSON array | 插入JSON陣列 |
JSON_CONTAINS() | Whether JSON document contains specific object at path | JSON檔案是否包含路徑上的特定物件 |
JSON_CONTAINS_PATH() | Whether JSON document contains any data at path | JSON檔案是否在路徑上包含任何資料 |
JSON_DEPTH() | Maximum depth of JSON document | JSON檔案的最大深度 |
JSON_EXTRACT() | Return data from JSON document | 從JSON檔案返回資料 |
JSON_INSERT() | Insert data into JSON document | 將資料插入JSON檔案 |
JSON_KEYS() | Array of keys from JSON document | 來自JSON檔案的鍵陣列 |
JSON_LENGTH() | Number of elements in JSON document | JSON檔案中的元素數量 |
JSON_MERGE_PATCH() | Merge JSON documents, replacing values of duplicate keys | 合併JSON檔案,替換重複鍵的值 |
JSON_MERGE_PRESERVE() | Merge JSON documents, preserving duplicate keys | 合併JSON檔案,保留重複的金鑰 |
JSON_OBJECT() | Create JSON object | 建立JSON物件 |
JSON_OVERLAPS() | Compares two JSON documents, returns TRUE (1) if these have any key-value pairs or array elements in common, otherwise FALSE (0) | 比較兩個JSON檔案,如果它們有共同的鍵值對或陣列元素,則返回TRUE(1),否則返回FALSE (0) |
JSON_PRETTY() | Print a JSON document in human-readable format | 以人類可讀的格式列印JSON檔案 |
JSON_QUOTE() | Quote JSON document | 參照JSON檔案 |
JSON_REMOVE() | Remove data from JSON document | 從JSON檔案中刪除資料 |
JSON_REPLACE() | Replace values in JSON document | 替換JSON檔案中的值 |
JSON_SCHEMA_VALID() | Validate JSON document against JSON schema; returns TRUE/1 if document validates against schema, or FALSE/0 if it does not | 針對JSON模式驗證JSON檔案;如果檔案針對模式進行驗證,則返回TRUE/1,否則返回FALSE/0 |
JSON_SCHEMA_VALIDATION_REPORT() | Validate JSON document against JSON schema; returns report in JSON format on outcome on validation including success or failure and reasons for failure | 針對JSON模式驗證JSON檔案;以JSON格式返回關於驗證結果的報告,包括成功或失敗以及失敗原因 |
JSON_SEARCH() | Path to value within JSON document | JSON檔案中值的路徑 |
JSON_SET() | Insert data into JSON document | 將資料插入JSON檔案 |
JSON_STORAGE_FREE() | Freed space within binary representation of JSON column value following partial update | 在部分更新後釋放JSON列值的二進位制表示形式中的空間 |
JSON_STORAGE_SIZE() | pace used for storage of binary representation of a JSON document | 用於儲存JSON檔案的二進位制表示的空間 |
JSON_TABLE() | Return data from a JSON expression as a relational table | 以關係表的形式從JSON表示式返回資料 |
JSON_TYPE() | Type of JSON value | JSON值型別 |
JSON_UNQUOTE() | Unquote JSON value | 不參照JSON值 |
JSON_VALID() | Whether JSON value is valid | JSON值是否有效 |
JSON_VALUE() | Extract value from JSON document at location pointed to by path provided; return this value as VARCHAR(512) or specified type | 根據所提供的路徑從JSON檔案中所指向的位置提取值;返回該值為VARCHAR(512)或指定的型別 |
MEMBER OF() | Returns true (1) if first operand matches any element of JSON array passed as second operand, otherwise returns false (0) | 如果第一個運算元匹配作為第二個運算元的JSON陣列中的任何元素,則返回true(1),否則返回false (0) |
->
在field
中使用的時候結果帶引號,->>
的結果不帶引號
特別注意:->
當做where
查詢是要注意型別的,->>
是不用注意型別的
用法:json_extract(欄位名,$.json欄位名)
select id,json_extract(json_value,'$.deptName') as deptName from dept;
用法: JSON_CONTAINS(target, candidate[, path])
事例:如果我們想查詢包含deptName=部門5
的物件
select * from dept WHERE JSON_CONTAINS(json_value, JSON_OBJECT("deptName","部門5"))
比如我們想查詢某個物件裡面的值等於多少
比如我們新增這麼一組資料到dept表中:
insert into dept VALUES(6,'部門9','{"deptName": {"dept":"de","depp":"dd"}, "deptId": "5", "deptLeaderId": "5"}');
我們可以看到deptName
中還有一個物件,裡面還有dept和depp兩個屬性欄位,那麼我們應該怎麼查詢depp=dd的員工呢。
用法:JSON_OBJECT([key, val[, key, val] …])
事例:
SELECT * from ( SELECT *,json_value->'$.deptName' as deptName FROM dept ) t WHERE JSON_CONTAINS(deptName,JSON_OBJECT("depp","dd"));
比如我們新增這麼一組資料到dept表中:
insert into dept VALUES(7,'部門9','{"deptName": ["1","2","3"], "deptId": "5", "deptLeaderId": "5"}'); insert into dept VALUES(7,'部門9','{"deptName": ["5","6","7"], "deptId": "5", "deptLeaderId": "5"}');
用法:JSON_ARRAY([val[, val] …])
事例:我們要查詢deptName包含1的資料
SELECT * from dept WHERE JSON_CONTAINS(json_value->'$.deptName',JSON_ARRAY("1"))
用法:JSON_TYPE(json_val)
事例:比如我們想查詢deptName的欄位屬性是什麼
SELECT json_value->'$.deptName' ,JSON_TYPE(json_value->'$.deptName') as type from dept
用法:JSON_KEYS(json_value)
事例:比如我們想查詢json格式資料中的所有key
SELECT JSON_KEYS(json_value) FROM dept
接下來的3種函數都是新增資料型別的:
JSON_SET(json_doc, path, val[, path, val] …)
JSON_INSERT(json_doc, path, val[, path, val] …)
JSON_REPLACE(json_doc, path, val[, path, val] …)1.3.9 JSON_SET():將資料插入JSON格式中,有key則替換,無key則新增
這也是我們開發過程中經常會用到的一個函數
用法:JSON_SET(json_doc, path, val[, path, val] …)
事例:比如我們想針對id=2的資料新增一組:newData:新增的資料,修改deptName為新增的部門1
sql語句如下:
update dept set json_value=JSON_SET('{"deptName": "部門2", "deptId": "2", "deptLeaderId": "4"}','$.deptName','新增的部門1','$.newData','新增的資料') WHERE id=2;
注意
:json_doc
如果不帶這個單元格之前的值,之前的值是會新值被覆蓋的,比如我們如果更新的語句換成:
update dept set json_value=JSON_SET('{"a":"1","b":"2"}','$.deptName','新增的部門1','$.newData','新增的資料') WHERE id=2我們可以看到這裡json_doc是{「a」:「1」,「b」:「2」},這樣的話會把之前的單元格值覆蓋後再新增/覆蓋這個單元格欄位
用法:JSON_INSERT(json_doc, path, val[, path, val] …)
事例:
UPDATE dept set json_value=JSON_INSERT('{"a": "1", "b": "2"}', '$.deptName', '新增的部門2','$.newData2','新增的資料2') WHERE id=2
我們可以看到由於json_doc
變化將之前的值覆蓋了,新增了deptName
和newData2
.
如果我們再執行以下剛才的那個sql,只是換了value,我們會看到裡面的key值不會發生變化。
因為這個函數只負責往json中插入新值,但不替換已經存在的舊值。
用法:JSON_REPLACE(json_doc, path, val[, path, val] …)
用例:
如果我們要更新id=2資料中newData2的值為:更新的資料2
sql語句如下:
UPDATE dept set json_value=JSON_REPLACE('{"a": "1", "b": "2", "deptName": "新增的部門2", "newData2": "新增的資料2"}', '$.newData2', '更新的資料2') WHERE id =2;
用法:JSON_REMOVE(json_doc, path[, path] …)
舉例:刪除key為a的欄位。
UPDATE dept set json_value=JSON_REMOVE('{"a": "1", "b": "2", "deptName": "新增的部門2", "newData2": "更新的資料2"}','$.a') WHERE id =2;
到此這篇關於MYSQL中的json資料操作的文章就介紹到這了,更多相關mysql json資料內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45