MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

MariaDB JSON_OBJECTAGG() Dijelaskan

Di MariaDB, JSON_OBJECTAGG() adalah fungsi bawaan yang mengembalikan objek JSON yang berisi pasangan nilai kunci, berdasarkan dua argumennya.

Sintaks

Sintaksnya seperti ini:

JSON_OBJECTAGG(key, value)

Fungsi menerima dua ekspresi yang mengevaluasi nilai tunggal, atau dua nama kolom, sebagai argumen. Argumen pertama adalah kuncinya, dan yang kedua adalah nilainya.

Contoh

Berikut adalah contoh sederhana untuk ditunjukkan:

SELECT JSON_OBJECTAGG("name", "Homer");

Hasil:

+---------------------------------+
| JSON_OBJECTAGG("name", "Homer") |
+---------------------------------+
| {"name":"Homer"}                |
+---------------------------------+

Meskipun contoh ini menunjukkan cara kerja fungsi, manfaat sebenarnya datang saat bekerja dengan kolom atau ekspresi lainnya.

Di bawah ini adalah contoh yang menggunakan kolom database untuk argumen.

Contoh Basis Data

Misalkan kita membuat kueri tabel:

SELECT 
    PetName,
    DOB
FROM Pets;

Dan dapatkan set hasil berikut:

+---------+------------+
| PetName | DOB        |
+---------+------------+
| Fluffy  | 2020-11-20 |
| Fetch   | 2019-08-16 |
| Scratch | 2018-10-01 |
| Wag     | 2020-03-15 |
| Tweet   | 2020-11-28 |
| Fluffy  | 2020-09-17 |
| Bark    | NULL       |
| Meow    | NULL       |
+---------+------------+

Sekarang mari kita jalankan kueri yang meneruskan setiap kolom ke JSON_OBJECTAGG() fungsi, sehingga hasilnya dikembalikan sebagai objek JSON:

SELECT JSON_OBJECTAGG(PetName, DOB)
FROM Pets
WHERE DOB < '2020-04-01';

Hasil:

+--------------------------------------------------------------------+
| JSON_OBJECTAGG(PetName, DOB)                                       |
+--------------------------------------------------------------------+
| {"Fetch":"2019-08-16", "Scratch":"2018-10-01", "Wag":"2020-03-15"} |
+--------------------------------------------------------------------+

Yang kami lakukan hanyalah meneruskan nama kolom ke JSON_OBJECTAGG() fungsi.

Kami juga menggunakan WHERE klausa untuk mempersempit hasil sedikit.

Hasil yang Dikelompokkan

Kita dapat menggunakan SQL GROUP BY klausa untuk menghasilkan objek JSON berdasarkan pengelompokan kolom lain.

Misalkan kita menambahkan kolom ke kueri asli kita:

SELECT 
    PetTypeId,
    PetName,
    DOB
FROM Pets;

Hasil:

+-----------+---------+------------+
| PetTypeId | PetName | DOB        |
+-----------+---------+------------+
|         2 | Fluffy  | 2020-11-20 |
|         3 | Fetch   | 2019-08-16 |
|         2 | Scratch | 2018-10-01 |
|         3 | Wag     | 2020-03-15 |
|         1 | Tweet   | 2020-11-28 |
|         3 | Fluffy  | 2020-09-17 |
|         3 | Bark    | NULL       |
|         2 | Meow    | NULL       |
+-----------+---------+------------+

Sekarang kita memiliki PetTypeId kolom serta PetName dan DOB kolom. Ini cocok dengan jenis hewan peliharaan untuk setiap hewan peliharaan.

Berikut ini contoh penggunaan GROUP BY klausa untuk mengelompokkan hasil kami dengan PetTypeId kolom saat menggunakan JSON_OBJECTAGG() fungsi:

SELECT 
    PetTypeId,
    JSON_OBJECTAGG(PetName, DOB)
FROM Pets
GROUP BY PetTypeId;

Hasil:

+-----------+--------------------------------------------------------------------------------+
| PetTypeId | JSON_OBJECTAGG(PetName, DOB)                                                   |
+-----------+--------------------------------------------------------------------------------+
|         1 | {"Tweet":"2020-11-28"}                                                         |
|         2 | {"Fluffy":"2020-11-20", "Scratch":"2018-10-01", "Meow":null}                   |
|         3 | {"Fetch":"2019-08-16", "Wag":"2020-03-15", "Fluffy":"2020-09-17", "Bark":null} |
+-----------+--------------------------------------------------------------------------------+

Ini memungkinkan kami untuk membuat objek JSON terpisah untuk setiap jenis hewan peliharaan.

Kueri berikut menggunakan INNER JOIN di meja lain untuk mengembalikan jenis hewan peliharaan yang sebenarnya, bukan hanya ID.

SELECT 
    pt.PetType,
    p.PetName,
    p.DOB
FROM Pets p 
INNER JOIN PetTypes pt 
ON pt.PetTypeId = p.PetTypeId
ORDER BY PetType;

Hasil:

+---------+---------+------------+
| PetType | PetName | DOB        |
+---------+---------+------------+
| Bird    | Tweet   | 2020-11-28 |
| Cat     | Scratch | 2018-10-01 |
| Cat     | Fluffy  | 2020-11-20 |
| Cat     | Meow    | NULL       |
| Dog     | Wag     | 2020-03-15 |
| Dog     | Fetch   | 2019-08-16 |
| Dog     | Bark    | NULL       |
| Dog     | Fluffy  | 2020-09-17 |
+---------+---------+------------+

Kita dapat melihat bahwa jenis hewan peliharaan yang sebenarnya sekarang terdaftar di kolom pertama, bukan hanya ID jenis hewan peliharaan.

Sekarang mari kita gunakan JSON_OBJECTAGG() fungsi:

SELECT 
    pt.PetType,
    JSON_OBJECTAGG(p.PetName, p.DOB)
FROM Pets p 
INNER JOIN PetTypes pt 
ON pt.PetTypeId = p.PetTypeId
GROUP BY pt.PetType;

Hasil:

+---------+--------------------------------------------------------------------------------+
| PetType | JSON_OBJECTAGG(p.PetName, p.DOB)                                               |
+---------+--------------------------------------------------------------------------------+
| Bird    | {"Tweet":"2020-11-28"}                                                         |
| Cat     | {"Scratch":"2018-10-01", "Fluffy":"2020-11-20", "Meow":null}                   |
| Dog     | {"Wag":"2020-03-15", "Fetch":"2019-08-16", "Bark":null, "Fluffy":"2020-09-17"} |
+---------+--------------------------------------------------------------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menghadapi Jaringan yang Tidak Dapat Diandalkan Saat Membuat Solusi HA untuk MySQL atau MariaDB

  2. Membandingkan MariaDB Enterprise Backup dengan ClusterControl Backup Management

  3. Apakah driver MariaDB JDBC terpengaruh oleh kerentanan Log4j?

  4. Apa yang Baru di MariaDB 10.6

  5. Berurusan dengan MySQL Long Running Query