💾 Data/SQL

[MySQL] JSON_TABLE(), JSON_ARRAY()

heywantodo 2024. 9. 23. 09:49
728x90
반응형

[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

728x90
반응형