sql >> Database teknologi >  >> RDS >> Mysql

Sådan forespørges JSON-kolonnen i MySQL

Nogle gange skal du muligvis søge i JSON-array af objekter, udtrække JSON-data eller hente JSON-data i MySQL. I denne artikel vil vi se på, hvordan man forespørger JSON-kolonnen i MySQL.


Sådan forespørges JSON-kolonnen i MySQL

Lad os sige, at du har følgende tabel brugere(id, detaljer) hvor id er et heltal og primær nøgle mens detaljer er en JSON-datatypekolonne.

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

Vi indsætter følgende JSON-data i vores tabel.

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 } }'
);


Sådan hentes data fra JSON-kolonnen i MySQL

MySQL giver to operatorer (-> og ->>) til at udtrække data fra JSON-kolonner.

->> får strengværdien, mens -> henter værdi uden anførselstegn.

Her er SQL-forespørgslen til at udtrække browsernavn fra detaljer kolonne

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

Som du kan se ->> returnerer output som citerede strenge, mens -> returnerer værdier, som de er.

Du kan også bruge disse operatorer i WHERE-sætningen som vist nedenfor.

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

Hvis du vil hente resolution.x værdi, det vil sige fra et objekt, så kan du gøre det ved at bruge prik (.) operatoren, som vist nedenfor.

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

Tilsvarende, hvis du vil udtrække et array-element fra en JSON, kan du få adgang til dem ved hjælp af firkantede parenteser '[ ]' og indeks for array-element. Her er SQL-forespørgslen til at udtrække det første element af array spend .

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


Udtræk JSON ved hjælp af Ubiq

Ubiq Reporting-værktøj understøtter alle ovenstående SQL-forespørgsler og gør det nemt at visualisere SQL-resultater på forskellige måder. Her er den første SQL-forespørgsel nævnt ovenfor, i Ubiq.

Har du brug for et rapporteringsværktøj til MySQL? Ubiq gør det nemt at visualisere data på få minutter og overvåge i dashboards i realtid. Prøv det i dag!

  1. Hvornår har Postgres kolonne- eller tabelnavne brug for anførselstegn, og hvornår behøver de ikke?

  2. Hvad er den hurtigste måde at afkorte tidsstempler til 5 minutter i Postgres?

  3. Relationelle vs ikke-relationelle databaser:Hvad er forskellen?

  4. JOIN-forespørgsler vs. flere forespørgsler