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
반응형