MySQL에서 JSON 객체 값을 조건으로 사용할 수 있을까요?
네, 가능합니다. MySQL에서는 json_extract() 함수를 사용하면 JSON 컬럼에 저장된 객체의 특정 키 값을 손쉽게 추출하고, 이를 SELECT 문의 WHERE 절 조건으로 활용할 수 있습니다.
아래 예제를 통해 단계별로 살펴보겠습니다.
1단계: JSON 타입 테이블 생성
먼저 JSON 데이터를 저장할 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> Data json
-> );
Query OK, 0 rows affected (0.63 sec)
2단계: 샘플 데이터 삽입
insert 명령을 사용해 JSON 형식의 레코드를 삽입합니다.
mysql> insert into DemoTable values('{"Name": "John", "CountryName": "US"}');
Query OK, 1 row affected (0.33 sec)
mysql> insert into DemoTable values('{"Name": "Chris", "CountryName": "UK"}');
Query OK, 1 row affected (0.15 sec)3단계: 저장된 전체 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+----------------------------------------+
| Data |
+----------------------------------------+
| {"Name": "John", "CountryName": "US"} |
| {"Name": "Chris", "CountryName": "UK"} |
+----------------------------------------+
2 rows in set (0.01 sec)
4단계: json_extract()로 JSON 값 조회하기
다음은 json_extract() 함수를 사용해 JSON 객체의 특정 값을 WHERE 조건으로 활용하는 쿼리입니다.
mysql> SELECT *from DemoTable WHERE json_extract(Data, '$.CountryName') like '%US%';
출력 결과
+---------------------------------------+
| Data |
+---------------------------------------+
| {"Name": "John", "CountryName": "US"} |
+---------------------------------------+
1 row in set (0.00 sec)
쿼리 핵심 포인트 정리
- json_extract(컬럼명, 경로): 첫 번째 인자에는 JSON 컬럼을, 두 번째 인자에는 추출하고자 하는 키의 경로를 지정합니다.
- '$.CountryName':
$는 JSON 문서 전체를 의미하며,.CountryName은 해당 키의 값을 가리킵니다. - LIKE '%US%': 추출된 값에 대해 부분 일치 검색을 수행합니다. 정확한 값 비교가 필요하다면
= 'US'를 사용하는 것이 좋습니다.
참고: 더 간결한 연산자 방식
MySQL 5.7 이상에서는 -> 또는 ->> 연산자를 사용해 더 짧게 작성할 수도 있습니다.
mysql> SELECT * FROM DemoTable WHERE Data->>'$.CountryName' = 'US';
->는 따옴표가 포함된 JSON 값을 반환하고, ->>(인라인 경로 연산자)는 따옴표가 제거된 순수 문자열을 반환하므로 문자열 비교 시 유용합니다.