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

MySQL에서 JSON 데이터 타입 쿼리하는 방법 – JSON_CONTAINS 활용 가이드

MySQL 5.7 버전부터 도입된 JSON 데이터 타입을 사용하면 관계형 데이터베이스 안에서도 JSON 형식의 데이터를 손쉽게 저장하고 조회할 수 있습니다. 이 글에서는 JSON 타입 컬럼을 가진 테이블을 만들고, 데이터를 삽입한 뒤, JSON_CONTAINS() 함수로 특정 값을 조회하는 방법을 단계별로 살펴보겠습니다.

1단계: JSON 타입 테이블 생성하기

먼저 JSON 데이터 타입의 컬럼을 포함하는 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> StudentName json
-> );
Query OK, 0 rows affected (0.74 sec)

2단계: JSON 데이터 삽입하기

INSERT 문을 사용하여 JSON 배열 형태의 문자열을 그대로 삽입할 수 있습니다.

mysql> insert into DemoTable values('["John", "Chris", "Robert","David","Sam"]');
Query OK, 1 row affected (0.33 sec)

3단계: 저장된 데이터 확인하기

SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+---------------------------------------------+
| StudentName |
+---------------------------------------------+
| ["John", "Chris", "Robert", "David", "Sam"] |
+---------------------------------------------+
1 row in set (0.00 sec)

4단계: JSON_CONTAINS()로 조건 조회하기

JSON 배열 안에 특정 값이 포함되어 있는지 확인하려면 JSON_CONTAINS() 함수를 사용합니다. 아래 쿼리는 'Chris'라는 이름이 포함된 행만 반환합니다.

mysql> SELECT *from DemoTable WHERE JSON_CONTAINS(StudentName, '["Chris"]');

실행 결과는 다음과 같습니다.

+---------------------------------------------+
| StudentName |
+---------------------------------------------+
| ["John", "Chris", "Robert", "David", "Sam"] |
+---------------------------------------------+
1 row in set (0.04 sec)

함께 알아두면 좋은 JSON 조회 팁

JSON_CONTAINS() 외에도 MySQL은 다양한 JSON 함수를 제공합니다.

  • JSON_EXTRACT(): JSON 문서에서 특정 경로의 값을 추출합니다. 예를 들어 JSON_EXTRACT(StudentName, '$[0]')은 배열의 첫 번째 요소인 "John"을 반환합니다.
  • -> 연산자(컬럼-경로 연산자): StudentName->'$[0]'처럼 간결하게 값을 추출할 수 있으며, MySQL 5.7.13 이상에서 지원됩니다.
  • MEMBER OF 연산자: MySQL 8.0.17 이상에서는 'Chris' MEMBER OF (StudentName)처럼 더 직관적인 문법으로 배열 멤버 여부를 검사할 수 있습니다.

이처럼 MySQL의 JSON 데이터 타입과 내장 함수를 활용하면 별도의 애플리케이션 로직 없이도 SQL 쿼리만으로 JSON 데이터를 유연하게 필터링하고 조회할 수 있습니다.