Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL SELECT 문에서 JSON 객체의 값을 활용하는 방법 (json_extract 완벽 가이드)

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 값을 반환하고, ->>(인라인 경로 연산자)는 따옴표가 제거된 순수 문자열을 반환하므로 문자열 비교 시 유용합니다.