sql >> データベース >  >> RDS >> Mysql

MySQLでJSON列をクエリする方法

    MySQLでオブジェクトのJSON配列を検索したり、JSONデータを抽出したり、JSONデータを取得したりする必要がある場合があります。この記事では、MySQLでJSON列をクエリする方法を見ていきます。


    MySQLでJSON列をクエリする方法

    次のテーブルがあるとしますusers(id、details) ここでid は整数で主キーですが、詳細 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つの演算子(->と->>)が用意されています。

    ->>は文字列値を取得し、->は引用符なしで値を取得します。

    詳細からブラウザ名を抽出する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を使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日お試しください。

    1. Postgresデータベースを使用してJavaで非同期/イベント駆動型のLISTEN/NOTIFYサポートを取得するにはどうすればよいですか?

    2. Oracleデータベースのテーブルドロップ列を変更する

    3. PHPのMSSQLで挿入IDを取得するにはどうすればよいですか?

    4. PrintStatementを使用してVARCHAR(MAX)を印刷するにはどうすればよいですか?