[13일차]데이터 타입 - 배열(Array)

김준석·2023년 12월 26일

배열 (Array)란?

  • 데이터가 저장된 리스트
    • 예) [’a’, ‘b’, ‘c’] / [1, 2, 3]
      • 원소 : a,b,c / 1,2,3
  • Element (원소) : Array에 저장된 각 데이터
  • JSON 타입으로 배열을 저장
    • 데이터를 간단하게 한줄로 부를 수 있는 객체
    • JSON Array 라고도 부름.
  • 기본값 설정 불가

JSON_ARRAY, JSON_TYPE으로 배열 테이블과 컬럼을 만들고 타입을 확인해보자.

JSON_ARRAY : 입력을 JSON 배열로 반환하는 함수.

JSON_TYPE : JSON 데이터의 타입을 반환하는 함수

JSON_ARRAY를 활용한 테이블, 컬럼 생성코드

CREATE TABLE IF NOT EXISTS `products` (
 `product_id` int(6) NOT NULL,
 `category` varchar(40) NOT NULL,
 `name` varchar(10) NOT NULL,
 `price` int unsigned NOT NULL,
 'options' JSON NULL, -- 옵션컬럼을 JSON타입으로 추가
PRIMARY KEY (`product_id`)
); 

INSERT INTO `products` (`product_id`, `category`, `name`, `price`,'options') VALUES 
   (0, '키즈', '어린이칫솔', 1500, JSON_ARRAY('빨강','파랑')), -- JSON_ARRAY함수에 배열의 원소가 될 값들을 넣어줌. 
   (1, '스포츠', '손목보호대', 10000,JSON_ARRAY('S', 'M', 'L' )), 
   (2, '주방용품', '밥그릇', 2000, JSON_ARRAY('소', '중', '대')), 
   (3, '디지털', '마우스', 15000, NULL);

생성된 테이블) options컬럼에 배열이 잘 들어감.


JSON_ARRAY를 사용하지 않고도 배열타입을 만들 수 있다.

작은따옴표, 큰따옴표 사용!

- -INSERT 구문에서.
(0, '키즈', '어린이칫솔', 1500, JSON_ARRAY('빨강','파랑')), -- JSON_ARRAY함수 사용.
(1, '스포츠', '손목보호대', 10000,'["S","M","L"]'), --따옴표를 활용한 배열

JSON_TYPE을 활용하여 TYPE 확인.

SELECT options, JSON_TYPE(options) 
FROM products

결과값) JSON_ARRAY함수와 따옴표를 활용한 배열 모두array 형태로 잘 들어감.


Nested Array - 배열에 배열을 넣어보자.

스포츠 손목보호대를 예로

사이즈별 배열이 있다고 하자.

그리고 사이즈 별로 색상이 있다고 한다면,

사이즈 배열 하위에 색상 배열도 추가해줘야 된다.

구문 : JSON_ARRAY(JSON_ARRAY(”리스트”), JSON_ARRAY(”리스트”))

CREATE TABLE IF NOT EXISTS `products` (
 `product_id` int(6) NOT NULL, 
 `category` varchar(40) NOT NULL,
 `name` varchar(10) NOT NULL,
 `price` int unsigned NOT NULL,
 'options' JSON NULL, -- 옵션컬럼을 JSON타입으로 추가
 PRIMARY KEY (`product_id`) ); 

INSERT INTO `products` (`product_id`, `category`, `name`, `price`,'options') VALUES
   (0, '키즈', '어린이칫솔', 1500, JSON_ARRAY('빨강','파랑')), 
   (1, '스포츠', '손목보호대', 10000,JSON_ARRAY(JSON_ARRAY('S', 'M', 'L'), 
                                                JSON_ARRAY('빨강','파랑')),--JSON_ARRAY안에 함수를 추가로 넣어줌. 
   (2, '주방용품', '밥그릇', 2000, JSON_ARRAY('소', '중', '대')), 
   (3, '디지털', '마우스', 15000, NULL);

결과값

손목보호대의 옵션컬럼이

[”S”, “M”, “L”], [”빨강”, “파랑”] 두개의 리스트를 반환함.


JSON_EXTRACT()

ARRAY 내부 데이터에 접근 하여 데이터를 뽑는 함수.

$ = 배열 키를 지정하는 문장.

$[] = []안에는 인덱스 번호를 넣어서 키를 인덱싱함.

예시)옵션 컬럼에서 모든값을 가져오는 쿼리

$ 달러표시 만 입력하면 배열의 전체를 끌고옴.

SELECT JSON_EXTRACT(oprions, '$') as all_elements -- 옵션 컬럼에서 모든값을 가져오는 쿼리 
FROM products

결과값) 모든 값을 가져옴.

예시)옵션 컬럼의 배열에서 첫번째값을 가져오는 쿼리

SELECT JSON_EXTRACT(oprions, '$[0]') as all_elements -- 옵션 컬럼에서 인덱스 0인 값을 가져옴 
FROM products

결과값) 첫번째 인덱스를 가져옴.

0개의 댓글