Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách truy vấn cột JSON trong MySQL

Đôi khi bạn có thể cần tìm kiếm mảng đối tượng JSON, trích xuất dữ liệu JSON hoặc truy xuất dữ liệu JSON trong MySQL. Trong bài viết này, chúng ta sẽ xem xét cách truy vấn cột JSON trong MySQL.


Cách truy vấn cột JSON trong MySQL

Giả sử bạn có bảng sau người dùng (id, chi tiết) ở đâu id là một số nguyên và khóa chính trong khi chi tiết là một cột kiểu dữ liệu JSON.

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

Chúng tôi sẽ chèn dữ liệu JSON sau vào bảng của chúng tôi.

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


Cách lấy dữ liệu từ cột JSON trong MySQL

MySQL cung cấp hai toán tử (-> và ->>) để trích xuất dữ liệu từ các cột JSON.

->> sẽ nhận giá trị chuỗi trong khi -> sẽ lấy giá trị mà không có dấu ngoặc kép.

Đây là truy vấn SQL để trích xuất tên trình duyệt từ chi tiết cột

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

Như bạn thấy ->> trả về kết quả đầu ra dưới dạng chuỗi được trích dẫn, trong khi -> trả về giá trị như chúng vốn có.

Bạn cũng có thể sử dụng các toán tử này trong mệnh đề WHERE như được hiển thị bên dưới.

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

Nếu bạn muốn truy xuất Resolution.x giá trị, nghĩa là từ một đối tượng, sau đó bạn có thể làm như vậy bằng cách sử dụng toán tử dấu chấm (.), như được hiển thị bên dưới.

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

Tương tự, nếu bạn muốn trích xuất một phần tử mảng từ JSON, thì bạn có thể truy cập chúng bằng cách sử dụng dấu ngoặc vuông ‘[]’ và chỉ mục của phần tử mảng. Đây là truy vấn SQL để trích xuất phần tử đầu tiên của mảng tiêu .

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


Giải nén JSON bằng Ubiq

Công cụ Báo cáo Ubiq hỗ trợ tất cả các truy vấn SQL ở trên và giúp bạn dễ dàng hình dung kết quả SQL theo những cách khác nhau. Đây là truy vấn SQL đầu tiên được đề cập ở trên, trong Ubiq.

Cần một công cụ báo cáo cho MySQL? Ubiq giúp dễ dàng trực quan hóa dữ liệu trong vài phút và theo dõi trong trang tổng quan thời gian thực. Thử nó ngay hôm nay!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kết quả kép trong mảng của tôi (mysql_fetch_array)

  2. Kết nối MySQL không hoạt động:2002 Không có tệp hoặc thư mục nào như vậy

  3. Với MySQL, làm cách nào để tạo cột chứa chỉ mục bản ghi trong bảng?

  4. CẬP NHẬT MySQL:5 mẹo hàng đầu cho nhà phát triển T-SQL

  5. MySQL MONTHNAME () từ các số