MySQL中JSON_CONTAINS函數(shù)詳細(xì)用法示例?及場(chǎng)景
前言
MySQL中的JSON_CONTAINS
函數(shù)用于檢查一個(gè)JSON文檔(目標(biāo))是否包含另一個(gè)JSON文檔(搜索值)。以下是其詳細(xì)用法:
函數(shù)語(yǔ)法?
JSON_CONTAINS(target_json, search_json [, path])
- ?target_json?:要檢查的目標(biāo)JSON文檔。
- ?search_json?:要搜索的JSON值或結(jié)構(gòu)。
- ?path?(可選):指定在目標(biāo)JSON中的具體路徑。若未指定,默認(rèn)檢查整個(gè)文檔。
?返回值?:
1
:目標(biāo)包含搜索值。0
:目標(biāo)不包含搜索值。NULL
:參數(shù)為NULL
或路徑不存在。
?使用場(chǎng)景和示例?
?1. 檢查數(shù)組是否包含元素?
?示例表?:
CREATE TABLE users ( id INT PRIMARY KEY, tags JSON ); INSERT INTO users VALUES (1, '["mysql", "database", "developer"]'), (2, '["python", "web", "tester"]'), (3, '["java", "backend", "developer"]');
?查詢包含"developer"標(biāo)簽的用戶?:
SELECT * FROM users WHERE JSON_CONTAINS(tags, '"developer"', '$');
或簡(jiǎn)寫(xiě):
SELECT * FROM users WHERE JSON_CONTAINS(tags, '"developer"');
?注意?:字符串需用雙引號(hào)包裹,外層用單引號(hào)。
?2. 檢查對(duì)象是否包含鍵值對(duì)?
?示例數(shù)據(jù)?:
{"name": "Alice", "age": 30, "skills": ["SQL", "Java"]}
?查詢包含"name": "Alice"的對(duì)象?:
SELECT * FROM profiles WHERE JSON_CONTAINS(data, '{"name": "Alice"}');
?3. 嵌套結(jié)構(gòu)和路徑參數(shù)?
?示例數(shù)據(jù)?:
{"department": {"team": ["Alice", "Bob"], "id": 101}}
?**檢查
team
數(shù)組是否包含"Bob"
**?:SELECT JSON_CONTAINS( '{"department": {"team": ["Alice", "Bob"], "id": 101}}', '"Bob"', '$.department.team' ); -- 返回1
?4. 數(shù)據(jù)類(lèi)型嚴(yán)格匹配?
JSON區(qū)分?jǐn)?shù)據(jù)類(lèi)型,如數(shù)字3
和字符串"3"
不匹配:
SELECT JSON_CONTAINS('[1, 2, 3]', '3'); -- 返回1(數(shù)值3) SELECT JSON_CONTAINS('[1, 2, "3"]', '"3"'); -- 返回1(字符串"3") SELECT JSON_CONTAINS('[1, 2, 3]', '"3"'); -- 返回0(類(lèi)型不匹配)
?5. 通配符路徑?
?示例數(shù)據(jù)?:
{"employees": [{"name": "Alice"}, {"name": "Bob"}]}
?**檢查任意
name
是否為"Bob"
**?:SELECT JSON_CONTAINS( '{"employees": [{"name": "Alice"}, {"name": "Bob"}]}', '"Bob"', '$.employees[*].name' ); -- 返回1
?注意事項(xiàng)?
?路徑存在性?:若路徑不存在,返回
NULL
。SELECT JSON_CONTAINS('{"a": 1}', '1', '$.b'); -- 返回NULL
?對(duì)象匹配?:搜索對(duì)象時(shí),必須完全包含所有鍵值對(duì)。
SELECT JSON_CONTAINS('{"a":1, "b":2}', '{"a":1}'); -- 返回1 SELECT JSON_CONTAINS('{"a":1}', '{"a":1, "b":2}'); -- 返回0
?數(shù)組子集?:搜索數(shù)組時(shí),目標(biāo)數(shù)組需包含搜索數(shù)組所有元素(順序無(wú)關(guān))。
SELECT JSON_CONTAINS('[1,2,3]', '[3,1]'); -- 返回1 SELECT JSON_CONTAINS('[1,2,3]', '[1,4]'); -- 返回0
?總結(jié)?
JSON_CONTAINS
適用于驗(yàn)證JSON結(jié)構(gòu)中的存在性,需注意:
- 正確使用路徑和數(shù)據(jù)類(lèi)型。
- 對(duì)象需完全匹配鍵值對(duì),數(shù)組需包含所有元素。
- 結(jié)合路徑通配符(
*
)可靈活處理嵌套數(shù)據(jù)。
到此這篇關(guān)于MySQL中JSON_CONTAINS函數(shù)詳細(xì)用法示例?及場(chǎng)景的文章就介紹到這了,更多相關(guān)MySQL JSON_CONTAINS函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL安裝starting?the?server失敗的2種解決辦法(推薦!)
MySQL是一個(gè)非常強(qiáng)大的關(guān)系型數(shù)據(jù)庫(kù),但有些初學(xué)者在安裝配置的時(shí)候,遇到種種的困難,下面這篇文章主要給大家介紹了關(guān)于MySQL安裝starting?the?server失敗的2種解決辦法,需要的朋友可以參考下2023-04-04MySQL字符串的拼接、截取、替換、查找位置實(shí)例詳解
MySQL中的字符串操作包括拼接、截取、替換和查找位置等功能,本文給大家介紹MySQL字符串的拼接、截取、替換、查找位置示例詳解,感興趣的朋友一起看看吧2024-09-09Mysql優(yōu)化調(diào)優(yōu)中兩個(gè)重要參數(shù)table_cache和key_buffer
這篇文章主要介紹了Mysql優(yōu)化調(diào)優(yōu)中兩個(gè)重要參數(shù)table_cache和key_buffer,需要的朋友可以參考下2014-12-12與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(五)--運(yùn)算符
MYSQL中的運(yùn)算符很多,這一節(jié)主要講MYSQL中有的,而SQLSERVER沒(méi)有的運(yùn)算符2014-06-06mysql外鍵(Foreign Key)介紹和創(chuàng)建外鍵的方法
這篇文章主要介紹了mysql外鍵(Foreign Key)命令和添加外鍵方法,需要的朋友可以參考下2014-02-02