티스토리 뷰

DB

[MySQL] JSON 조회 JSON_EXTRACT

snail voyager 2023. 12. 6. 12:21
728x90
반응형

MySQL에서 JSON 데이터에서 값을 추출하려면 JSON_EXTRACT() 함수를 사용

JSON_EXTRACT(json_column, path)

json_column: JSON 데이터가 저장된 컬럼
path: 추출하려는 값의 경로

SELECT JSON_EXTRACT(json_column, '$.name') AS extracted_name
FROM your_table;

 

MySQL에서는 JSON 형식의 데이터를 VARCHAR 타입의 컬럼에 저장할 수 있습니다. 

JSON 데이터를 VARCHAR 컬럼에 저장하면 JSON 문자열이 그대로 저장되며, 

JSON 함수 및 연산을 사용하여 JSON 데이터를 다룰 수 있습니다.

 

주의할 점은 JSON 데이터의 크기가 VARCHAR의 최대 크기를 초과하지 않도록 해야 합니다. 

JSON 데이터가 크고 복잡한 경우 VARCHAR의 크기를 적절하게 조절하거나 

JSON 데이터를 저장하기 위해 JSON 데이터 타입을 사용하는 것이 더 적합할 수 있습니다. 

MySQL 5.7 이상에서는 JSON 데이터 타입을 지원하므로 JSON 데이터를 더 효과적으로 다룰 수 있습니다.

 

다음은 WHERE 절에서 JSON_EXTRACT를 사용하여 JSON 데이터에서 특정 필드의 값을 비교하는 간단한 예제

-- JSON 데이터를 저장하는 테이블 생성
CREATE TABLE your_table (
  id INT PRIMARY KEY,
  json_data JSON
);

-- JSON 데이터 삽입
INSERT INTO your_table (id, json_data) VALUES (1, '{"name": "John", "age": 30}');
INSERT INTO your_table (id, json_data) VALUES (2, '{"name": "Jane", "age": 25}');

-- JSON_EXTRACT를 WHERE 절에서 사용하여 특정 조건을 만족하는 행 선택
SELECT id, json_data
FROM your_table
WHERE JSON_EXTRACT(json_data, '$.name') = 'John';


JSON 데이터의 boolean 값을 WHERE 조건에서 조회

적절한 비교를 위해서는 해당 JSON 값이 문자열로 저장되었는지, 아니면 실제 boolean 값으로 저장되었는지에 주의

-- json_data 컬럼의 "status" 키에 해당하는 값이 문자열 'true'인 행을 조회
SELECT *
FROM mytable
WHERE JSON_EXTRACT(json_data, '$.status') = 'true';

-- status 값이 실제로 boolean이라면, 문자열 'true' 대신에 그대로 true로 비교
SELECT *
FROM mytable
WHERE JSON_EXTRACT(json_data, '$.status') = true;

 

728x90
반응형
반응형
300x250