[MySQL] JSON_TABLE(), JSON_ARRAY()
MySQL은 JSON 데이터 타입을 지원하면서 더 강력하고 유연한 JSON 처리를 제공하고 있다.
특히 JSON_TABLE 함수는 JSON 데이터를 SQL 테이블처럼 다룰 수 있는 매우 유용한 기능이다.
JSON_TABLE과 JSON_ARRAY 함수의 사용법과 예제를 통해 어떻게 JSON 데이터를 더 쉽게 다룰 수 있는지 알아보자.
JSON_ARRAY
여러 값을 JSON 배열로 생성할 때 사용된다. 이 값은 인자로 들어온 값을 JSON 배열 형식으로 반환한다.
사용법
JSON_ARRRAY([val1,[, val2, ...]])
예시
SELECT JSON_ARRAY(1, 'apple', true, NULL);
위 쿼리의 결과는 다음과 같은 JSON 배열을 반환한다.
[1, "apple", true, null]
또한, 여러 개의 데이터를 하나의 JSON 배열로 결합할 때 유용하다.
다음과 같이 여러 컬럼 값을 JSON 배열로 반환할 수 있다.
SELECT JSON_ARRAY(id, name, age) AS user_info
FROM users;
위 쿼리는 각 사용자의 id, name, age 값을 하나의 JSON 배열로 반환한다.
JSON_TABLE
MySQL은 8.4 버전 부터 JSON 데이터를 표 형식 데이터로 변환하는 JSON_TABLE()을 지원한다.
JSON 문서에서 데이터를 추출하여 지정된 열을 갖는 관계형 테이블로 반환한다.
사용법
JSON_TABLE(expr, path COLUMNS (column_list) [AS] alias)
- expr : 테이블화 할 JSON 데이터를 지정한다.
- path : JSON 경로를 지정한다. 이 경로를 따라 JSON 문서에서 데이터를 추출한다.
- columns : 생성 할 테이블의 컬럼과 그에 매핑되는 JSON 경로를 정의한다.
예시
다음과 같은 JSON 데이터를 가지고 있다고 가정해보자.
{
"users":[
{"id": 1, "name": "Alice", "age":25},
{"id": 2, "name": "Alice", "age":25},
{"id": 3, "name": "Alice", "age":25},
]
}
이 데이터를 MySQL의 JSON_TABLE을 사용해 테이블 형식으로 변환해보자
SELECT *
FROM JSON_TABLE(
'{
"users":[
{"id": 1, "name": "Alice", "age":25},
{"id": 2, "name": "Alice", "age":25},
{"id": 3, "name": "Alice", "age":25},
]
}' "$.user[*]" COLUMNS (
user_id INT PATH "$.id",
user_name VARCHAR(50) PATH "$.name".
user_age INT PATH "$.age"
)
) AS users_table;
결과는 다음과 같다.
user_id | user_name | user_age |
1 | Alice | 25 |
2 | Bob | 30 |
3 | Charlie | 35 |
아래 링크에 좋은 예시들이 있으니 참고하면 좋을 것 같다.
MySQL :: JSON_TABLE - The Best of Both Worlds
One of the new JSON functions in MySQL 8.0 is JSON_TABLE. It is also MySQL’s first table function. That is, the return value is not a scalar value, but a result set. JSON_TABLE will convert (part of) a JSON document into a relational table. In this blog
dev.mysql.com
참고
https://dev.mysql.com/doc/refman/8.4/en/json-table-functions.html
https://dev.mysql.com/doc/refman/8.4/en/json-search-functions.html
'💾 Data > SQL' 카테고리의 다른 글
[MySQL] 프로시저 변수(DECLARE, SET)에 대한 이해 (0) | 2024.12.10 |
---|---|
[MySQL] 실행중인 쿼리 확인하기 (0) | 2024.12.02 |
[MySQL] 데이터를 구분자로 Split 하기 (0) | 2024.09.13 |
[MySQL] EXISTS (0) | 2024.09.11 |
[MySQL] PERCENT_RANK() (0) | 2024.09.04 |