MySQLでオブジェクトのJSON配列を検索したり、JSONデータを抽出したり、JSONデータを取得したりする必要がある場合があります。この記事では、MySQLでJSON列をクエリする方法を見ていきます。
MySQLでJSON列をクエリする方法
次のテーブルがあるとしますusers(id、details) ここでid は整数で主キーですが、詳細 em> JSONデータ型の列です。
create table users( id int auto_increment primary key, details json );
次のJSONデータをテーブルに挿入します。
insert into users(details) values( '{ "page": "/" , "name": "Safari", "os": "Mac", "spend": [100, 50] "resolution": { "x": 1920, "y": 1080 } }' ), ( '{ "page": "/products", "name": "Chrome", "os": "Windows", "spend": [150, 250] "resolution": { "x": 1680, "y": 1050 } }' ), ( '{ "page": "/shoes", "name": "Firefox", "os": "Windows", "spend": [200,300] "resolution": { "x": 1280, "y": 800 } }' );
MySQLのJSON列からデータを取得する方法
MySQLには、JSON列からデータを抽出するための2つの演算子(->と->>)が用意されています。
->>は文字列値を取得し、->は引用符なしで値を取得します。
詳細em>からブラウザ名を抽出するSQLクエリは次のとおりです。 列
mysql> select id, details->>'$.name' as browser_str, details->'$.name' as browser_name from users; +----+--------------+--------------+ | id | browser_str | browser_name | +----+--------------+--------------+ | 1 | "Safari" | Safari | | 2 | "Chrome" | Chrome | | 3 | "Firefox" | Firefox | +----+--------------+--------------+
ご覧のとおり、->>は引用符で囲まれた文字列として出力を返しますが、->は値をそのまま返します。
以下に示すように、WHERE句でこれらの演算子を使用することもできます。
mysql> select id, details->>'$.name' as browser_str, details->'$.name' as browser_name from users where ->>'$.name'="Chrome"; +----+--------------+--------------+ | id | browser_str | browser_name | +----+--------------+--------------+ | 2 | "Chrome" | Chrome | +----+--------------+--------------+
resolution.xを取得する場合 値、つまりオブジェクトから、以下に示すように、ドット(。)演算子を使用してこれを行うことができます。
mysql> select details->'$.resolution.x'
as width
from users;
+----+-----------+
| id | width |
+----+-----------+
| 1 | 1920 |
| 2 | 1680 |
| 3 | 1280 |
+----+-----------+
同様に、JSONから配列要素を抽出する場合は、角かっこ「[]」と配列要素のインデックスを使用してそれらにアクセスできます。配列の最初の要素を抽出するSQLクエリspendは、次のとおりです。 。
mysql> select details->>'$.spend[0]'
as spend
from users;
+----+-----------+
| id | spend |
+----+-----------+
| 1 | 100 |
| 2 | 150 |
| 3 | 200 |
+----+-----------+
Ubiqを使用してJSONを抽出する
Ubiq Reportingツールは、上記のすべてのSQLクエリをサポートし、さまざまな方法でSQL結果を簡単に視覚化できるようにします。これが、Ubiqでの上記の最初のSQLクエリです。
MySQL用のレポートツールが必要ですか? Ubiqを使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日お試しください。