Json, 다중 Json 데이터 WHERE문 검색하기

 

MySQL 5.7 버전부터는 Json 타입의 데이터를 사용할 수 있습니다. Json 타입의 데이터를 검색하는 방법에 대해 알아봅시다.


테스트용 테이블 만들기

 

테이블 생성

# 테이블 생성 #
CREATE TABLE json_test (
	name varchar(8),
	data json
)

Query OK, 0 rows affected (0.01 sec)

# 테이블 확인 #
DESC json_test;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| name  | varchar(8) | YES  |     | NULL    |       |
| data  | json       | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+

2 rows in set (0.00 sec)

 

데이터 추가

# 데이터 추가 #
INSERT INTO json_test(name, data) VALUE ('test0','{"id":0, "value": { "name": "a", "array": [0, 2] } }');
INSERT INTO json_test(name, data) VALUE ('test1','{"id":1, "value": { "name": "b", "array": [0, 3] } }');
INSERT INTO json_test(name, data) VALUE ('test2','{"id":2, "value": { "name": "c", "array": [1, 2] } }');

# 데이터 확인 #
SELECT * FROM json_test;
+-------+----------------------------------------------------+
| name  | data                                               |
+-------+----------------------------------------------------+
| test0 | {"id": 0, "value": {"name": "a", "array": [0, 2]}} |
| test1 | {"id": 1, "value": {"name": "b", "array": [0, 3]}} |
| test2 | {"id": 2, "value": {"name": "c", "array": [1, 2]}} |
+-------+----------------------------------------------------+
3 rows in set (0.00 sec)

테스트용 테이블 검색하기

 

Json 검색

SELECT * FROM json_test
WHERE data->"$.id" = 0;
+-------+----------------------------------------------------+
| name  | data                                               |
+-------+----------------------------------------------------+
| test0 | {"id": 0, "value": {"name": "a", "array": [0, 2]}} |
+-------+----------------------------------------------------+
1 row in set (0.00 sec)

 

Json 타입 컬럼명 -> "$.필드이름" 형식을 이용하여 Json 데이터에 접근할 수 있습니다.

 

다중 Json 검색

SELECT * FROM json_test
WHERE data->"$.value.name" = "c";
+-------+----------------------------------------------------+
| name  | data                                               |
+-------+----------------------------------------------------+
| test2 | {"id": 2, "value": {"name": "c", "array": [1, 2]}} |
+-------+----------------------------------------------------+
1 row in set (0.00 sec)

 

Json 타입 컬럼명 -> "$.필드이름.필드이름" 형식을 이용하여 Json 속 Json 데이터에 접근할 수 있습니다.

 

Json 속 배열 검색

SELECT * FROM json_test
WHERE data->"$.value.array[0]" = 0;
+-------+----------------------------------------------------+
| name  | data                                               |
+-------+----------------------------------------------------+
| test0 | {"id": 0, "value": {"name": "a", "array": [0, 2]}} |
| test1 | {"id": 1, "value": {"name": "b", "array": [0, 3]}} |
+-------+----------------------------------------------------+
2 rows in set (0.00 sec)

 

Json 타입 컬럼명 -> "$.필드이름[n]" 형식을 이용하여 Json 속 배열 n번째 데이터에 접근할 수 있습니다.

 

Json 속 배열 전체 내 검색

SELECT * FROM json_test
WHERE JSON_CONTAINS(data->"$.value.array",'2');
+-------+----------------------------------------------------+
| name  | data                                               |
+-------+----------------------------------------------------+
| test0 | {"id": 0, "value": {"name": "a", "array": [0, 2]}} |
| test2 | {"id": 2, "value": {"name": "c", "array": [1, 2]}} |
+-------+----------------------------------------------------+
2 rows in set (0.00 sec)

 

JSON_CONTAINS(배열,값) 함수를 이용하여 특정값 배열이 있는 데이터를 찾을 수 있습니다.


마무리

 

잘못된 점이 있거나 궁금한 점이 있다면 언제든지 문의해주시기 바랍니다!

728x90
반응형

+ Recent posts