sql >> Databáze >  >> RDS >> Mysql

Jak dotazovat sloupec JSON v MySQL

Někdy můžete potřebovat prohledat pole JSON objektů, extrahovat data JSON nebo načíst data JSON v MySQL. V tomto článku se podíváme na to, jak dotazovat sloupec JSON v MySQL.


Jak dotazovat sloupec JSON v MySQL

Řekněme, že máte následující tabulku uživatelé(id, podrobnosti) kde id je celé číslo a primární klíč, zatímco podrobnosti je sloupec datového typu JSON.

create table users(
    id int auto_increment primary key,
    details json
   );

Do naší tabulky vložíme následující data 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 } }'
);


Jak načíst data ze sloupce JSON v MySQL

MySQL poskytuje dva operátory ( -> a ->> ) pro extrakci dat ze sloupců JSON.

->> získá hodnotu řetězce, zatímco -> načte hodnotu bez uvozovek.

Zde je dotaz SQL pro extrahování názvu prohlížeče z podrobností sloupec

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     |
+----+--------------+--------------+

Jak můžete vidět ->> vrací výstup jako řetězce v uvozovkách, zatímco -> vrací hodnoty tak, jak jsou.

Tyto operátory můžete také použít v klauzuli WHERE, jak je uvedeno níže.

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      |
+----+--------------+--------------+

Pokud chcete načíst resolution.x hodnotu, to znamená z objektu, můžete tak učinit pomocí operátoru tečka (.), jak je znázorněno níže.

mysql> select details->'$.resolution.x' as  width
       from users;
+----+-----------+
| id |  width    |
+----+-----------+
|  1 | 1920      |
|  2 | 1680      |
|  3 | 1280      |
+----+-----------+

Podobně, pokud chcete extrahovat prvek pole z JSON, můžete k nim přistupovat pomocí hranatých závorek „[ ]“ a indexu prvku pole. Zde je dotaz SQL pro extrahování prvního prvku pole spend .

mysql> select details->>'$.spend[0]' as spend
       from users;
+----+-----------+
| id |  spend    |
+----+-----------+
|  1 | 100       |
|  2 | 150       |
|  3 | 200       |
+----+-----------+


Extrahujte JSON pomocí Ubiq

Nástroj Ubiq Reporting podporuje všechny výše uvedené SQL dotazy a usnadňuje vizualizaci výsledků SQL různými způsoby. Zde je první SQL dotaz zmíněný výše v Ubiq.

Potřebujete nástroj pro vytváření sestav pro MySQL? Ubiq usnadňuje vizualizaci dat během několika minut a sledování na řídicích panelech v reálném čase. Vyzkoušejte to ještě dnes!

  1. Které jsou výkonnější, CTE nebo dočasné tabulky?

  2. Jak převést velká na malá písmena na serveru SQL - LOWER ()

  3. Jak vytvořit pohled MySQL

  4. Rozdíl mezi databází a schématem