MySQL JSON 查詢中的對(duì)象與數(shù)組技巧及查詢示例
MySQL 中 JSON 對(duì)象和 JSON 數(shù)組查詢的詳細(xì)介紹及帶有 WHERE
條件的查詢示例:
JSON 對(duì)象查詢
1. JSON_CONTAINS
用于檢查 JSON 對(duì)象是否包含指定的值或 JSON 對(duì)象。
- 語(yǔ)法:
JSON_CONTAINS(json_doc, val[, path])
- 示例: 假設(shè)有一個(gè)表
person
,其中有一個(gè) JSON 列info
,存儲(chǔ)了個(gè)人信息。
CREATE TABLE person ( id INT PRIMARY KEY, info JSON ); INSERT INTO person (id, info) VALUES (1, '{"name": "張三", "age": 30}');
查詢 info
列中 name
為 "張三"
的記錄:
SELECT * FROM person WHERE JSON_CONTAINS(info, '"張三"', '$.name');
如果 info
列中包含 {"name": "張三"}
,則返回對(duì)應(yīng)的行。
2. JSON_EXTRACT
用于從 JSON 對(duì)象中提取指定路徑的值。
- 語(yǔ)法:
JSON_EXTRACT(json_doc, path)
- 示例: 查詢
info
列中age
大于 25 的記錄
SELECT * FROM person WHERE JSON_EXTRACT(info, '$.age') > 25;
通過(guò)提取 age
的值并進(jìn)行比較,篩選出符合條件的記錄。
3. JSON_TABLE
將 JSON 對(duì)象轉(zhuǎn)換為關(guān)系型表格,便于查詢。
語(yǔ)法
JSON_TABLE( json_doc, path_expression COLUMNS( column_name column_type PATH json_path [on_empty] [on_error], ... ) ) [AS] alias
示例
SELECT * FROM person, JSON_TABLE( info, '$' COLUMNS( name VARCHAR(50) PATH '$.name', age INT PATH '$.age' ) ) AS jt WHERE jt.age > 25;
將 info
列中的 JSON 數(shù)據(jù)轉(zhuǎn)換為表格格式,然后通過(guò) WHERE
條件篩選出 age
大于 25 的記錄。
JSON 數(shù)組查詢
1. JSON_CONTAINS
同樣適用于 JSON 數(shù)組,檢查數(shù)組是否包含指定的值。
- 語(yǔ)法:
JSON_CONTAINS(json_array, val[, path])
- 示例: 假設(shè)有一個(gè)表
fruits
,其中有一個(gè) JSON 列fruits_array
,存儲(chǔ)了水果數(shù)組
CREATE TABLE fruits ( id INT PRIMARY KEY, fruits_array JSON ); INSERT INTO fruits (id, fruits_array) VALUES (1, '["apple", "banana", "orange"]');
查詢 fruits_array
列中包含 "banana"
的記錄
SELECT * FROM fruits WHERE JSON_CONTAINS(fruits_array, '"banana"');
如果 fruits_array
中包含 "banana"
,則返回對(duì)應(yīng)的行。
2. JSON_EXTRACT
從 JSON 數(shù)組中提取指定索引的值。
- 語(yǔ)法:
JSON_EXTRACT(json_array, path)
- 示例: 查詢
fruits_array
列中第二個(gè)水果為"banana"
的記錄
SELECT * FROM fruits WHERE JSON_EXTRACT(fruits_array, '$[1]') = '"banana"';
通過(guò)提取數(shù)組中索引為 1 的值并進(jìn)行比較,篩選出符合條件的記錄。
3. JSON_TABLE
將 JSON 數(shù)組轉(zhuǎn)換為關(guān)系型表格。
語(yǔ)法
JSON_TABLE( json_doc, path_expression COLUMNS( column_name column_type PATH json_path [on_empty] [on_error], ... ) ) [AS] alias
示例
SELECT * FROM fruits, JSON_TABLE( fruits_array, '$[*]' COLUMNS( fruit VARCHAR(50) PATH '$' ) ) AS jt WHERE jt.fruit = 'banana';
將 fruits_array
列中的 JSON 數(shù)組轉(zhuǎn)換為表格格式,然后通過(guò) WHERE
條件篩選出包含 "banana"
的記錄。
到此這篇關(guān)于MySQL JSON 查詢中的對(duì)象與數(shù)組技巧的文章就介紹到這了,更多相關(guān)mysql json查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql插入帶emoji表情的數(shù)據(jù)報(bào)錯(cuò)問(wèn)題
在處理MySQL數(shù)據(jù)庫(kù)插入表情時(shí)出現(xiàn)錯(cuò)誤,主要可能是由三個(gè)因素引起的:1、數(shù)據(jù)庫(kù)版本號(hào)是否大于5.5.3;2、數(shù)據(jù)庫(kù)表及字段的字符集是否為utf8mb4;3、項(xiàng)目中MySQL驅(qū)動(dòng)的版本是否大于5.1.13,本文詳細(xì)講解了如何針對(duì)這三個(gè)關(guān)鍵點(diǎn)進(jìn)行排查和解決2024-11-11mysql 遞歸查找菜單節(jié)點(diǎn)的所有子節(jié)點(diǎn)的方法
這篇文章主要介紹了mysql 遞歸查找菜單節(jié)點(diǎn)的所有子節(jié)點(diǎn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11innodb存儲(chǔ)引擎修改表共享空間為獨(dú)立空間
最近在優(yōu)化mysql innodb存儲(chǔ)引擎,把共享表空間轉(zhuǎn)換成獨(dú)立表空間,下面是詳細(xì)步驟2014-01-01MySQL如何比較兩個(gè)表數(shù)據(jù)的差異
這篇文章主要介紹了MySQL比較兩個(gè)表數(shù)據(jù)的差異,這些方式可以根據(jù)具體需求和數(shù)據(jù)結(jié)構(gòu)選擇合適的方法來(lái)比較兩個(gè)表的數(shù)據(jù)差異,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10mysql 8.0.22壓縮包完整安裝與配置教程圖解(親測(cè)安裝有效)
這篇文章主要介紹了mysql 8.0.22壓縮包完整安裝與配置教程圖解(親測(cè)安裝有效),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12