[13일차][SQL] 데이터 타입 - Key - value 구조체

김준석·2023년 12월 26일
post-thumbnail

Key - value란?

  • Key - value : Key와 Value로 이루어진 데이터(컬럼) / JSON 타입
    • Key를 통해 Value에 접근할 수 있음
    • 예시) {’이름’ : ‘홍길동’, ‘부서’ : ‘개발팀’, ‘직책’ : ‘팀장’, ‘근무지’ : ‘판교’}
      1. 키 값 : 이름 , Value : 홍길동{’색상’ : [’빨강’, ‘파랑’], ‘사이즈’ : [’S’, ‘M’, ‘L’]}
      1. 키 값 : 색상, Value : [빨강, 파랑] array형태로 저장.Value에는 배열도 들어갈 수 있다.


JSON_OBJECT

Key - value 입력값을 JSON 객체로 반환하는 함수

INSERT 구문에서 사용 / 테이블, 컬럼을 추가할 때

(구문)

JSON_OBJECT(1키값, 1벨류값, 2키값, 2벨류값….)

예제1) 배열을 통해 컬럼 수를 줄여보자

하기 코드에서

무슨요일에 쉬는지를 의미하는 off 컬럼과

대체자를 뜻하는 substitute 컬럼을

하나의 Key - value로 묶어보겠다.

기존 코드

CREATE TABLE IF NOT EXISTS `managers_v2` ( 
`id` int unsigned NOT NULL, 
`name` varchar(40) NOT NULL, 
`managing` varchar(50) NOT NULL, 
`off` varchar(50) NOT NULL, -- 휴일 
`substitute` int unsigned NOT NULL, --대체자 
PRIMARY KEY (`id`) ); 

INSERT INTO `managers_v2` (`id`, `name`, `managing`, `off`, `substitute`) VALUES 
   (0, '영희', '스포츠', '토,일', 1), 
   (1, '철수', '주방용품', '일,월', 2), 
   (2, '민수', '디지털', '화,토', 3), 
   (3, '길순', '키즈', '금,토', 0);

JSON_OBJECT로 off,substitute 컬럼을 묶은 코드

DROP TABLE IF EXISTS `managers_v2`; -- 이전에 만들어진 테이블 삭제 

CREATE TABLE IF NOT EXISTS `managers_v2` (
 `id` int unsigned NOT NULL, 
 `name` varchar(40) NOT NULL,
 `managing` varchar(50) NOT NULL,
 `info` JSON NULL, -- 휴일과 대체자 값을 넣어줄 info 테이블을 만들어 줌
 PRIMARY KEY (`id`) ); 

INSERT INTO `managers_v2` (`id`, `name`, `managing`, 'info') VALUES
   (0, '영희', '스포츠', JSON_OBJECT('off',JSON_ARRAY('일','월'),'substitute', '민수' )), 
   --설명
   --key1 : "off", Value1 :('일','월')
   --key2 : substitute, Value2 : '민수'
   -- JSON_OBJECT함수를 활용해 key값은 컬럼 역할, value값은 값 역할을 할 수 있도록 작성 
   
   (1, '철수', '주방용품', JSON_OBJECT('off',JSON_ARRAY('화','수'),'substitute', '길순' )), 
   (2, '민수', '디지털', JSON_OBJECT('off',JSON_ARRAY('목','금'),'substitute', '철수' )), 
   (3, '길순', '키즈', JSON_OBJECT('off',JSON_ARRAY('토','일'),'substitute', '영희' ));

결과 테이블


JSON_EXTRACT

JSON 배열의 Value값을 추출할때 사용.

SELECT 구문에서 사용.

구문 : SELECT JSON_EXTRACT(컬럼명, ‘$.key값’)

$ : 키의 Value값 추출시에 사용

예제) Managers_v2 테이블에서 info컬럼의 off키의 Value값을 추출해 보자.

SELECT JSON_EXTRACT(info, '$.off') as off 
FROM Managers_v2

결과값) info라는 키값에서 off라는 value 값을 가져옴.

+인덱싱 처리도 할 수 있다.

SELECT JSON_EXTRACT(info, '$.off[0]') as off_first -- 인덱스 0 추출(인덱싱처리) 
FROM Managers_v2

결과값) off key 값의 인덱스 0번(첫번째) 추출


Key-Value UPDATE


JSON_INSERT

컬럼에 Key - value 쌍을 삽입할때 사용.

구문

UPDATE 테이블명 set 컬럼명 = JSON_INSERT(컬럼명, ‘$.신규키값’,’신규value값’);

  • 데이터를 추가하고싶은 테이블, 컬럼을 작성 후 새로운 키,value 값을 넣는다.

예제)Managers_v2 테이블의 info 컬럼에

new라는 키값과 1,2,3,4라는 value의 배열을 넣어보자.

UPDATE Managers_V2 set info = JSON_INSERT(info, ‘$.new’,JSON_ARRAY(1,2,3,4));

JSON_REPLACE

이미 있는 KEY값을 바꾸는 함수

구문

UPDATE 테이블명 set 컬럼명 = JSON_REPLACE(컬럼명, ‘$.키값’,’변경 Value값’);

=데이터를 변경하고싶은 테이블, 컬럼을 작성 후 변경하고자 하는 키 값, 변경 value 값을 넣는다.

예제)Managers_v2 테이블의 info 컬럼에

new라는 키값에 있는 value를 1로 변경해보자.

UPDATE Managers_V2 set info = JSON_REPLACE(info, ‘$.new’,1);

0개의 댓글