From : https://wwwi.tistory.com/350
PostgreSQL에서는 컬럼을 배열형으로 만들 수 있다.
● 배열형 컬럼 만들기
CREATE TABLE member(
id serial PRIMARY KEY,
name varchar(20),
age integer,
hobby varchar(100)[] -- 배열형 컬럼
);
테이블을 만들 때 위와같이 컬럼 타입뒤에 []를 붙이면 배열형 컬럼이 된다.
● 배열형 컬럼에 데이터 추가하기
INSERT INTO member (name, age, hobby)
VALUES('kim', 10, '{book, music}');
배열형 데이터를 {} 안에 ","로 구분해서 입력한다.
INSERT INTO member (name, age, hobby)
VALUES('lee', 12, '{game}');
데이터를 하나만 넣을 때는 위와 같이 쓴다.
INSERT INTO member (name, age, hobby)
VALUES('park', 11, ARRAY['movie','sing','craft']);
ARRAY를 사용하여 추가할 수도 있다.
ARRAY를 사용하면 각 항목별에 따옴표를 달아야 된다.
INSERT INTO member (name, age, hobby)
VALUES('hong', 9, '{baseball,soccer,swim, tennis,book}');
INSERT INTO member (name, age, hobby)
VALUES('ha', 15, '{golf, cartoon, drink, sing, dance}');
테스트용 데이터
● 배열형 컬럼을 가진 데이터 읽어오기
SELECT * FROM member;
1;"kim";10;"{book,music}"
2;"lee";12;"{game}"
3;"park";11;"{movie,sing,craft}"
4;"hong";9;"{baseball,soccer,swim,tennis,book}"
5;"ha";15;"{golf,cartoon,drink,sing,dance}"
배열형 컬럼은 대괄호에 각 항목들이 쉼표로 구분되어진다.
SELECT name, hobby[1] FROM member;
"kim";"book"
"lee";"game"
"park";"movie"
"hong";"baseball"
"ha";"golf"
배열형 컬럼의 첫번째 데이터만을 읽어 오기
SELECT name, hobby[2], hobby[3] FROM member;
"kim";"music";""
"lee";"";""
"park";"sing";"craft"
"hong";"soccer";"swim"
"ha";"cartoon";"drink"
배열형 컬럼의 두번째와 세번째 데이터를 읽어 오기
해당 순번에 데이터가 없으면 데이터가 안나온다.
SELECT name, hobby[2:5] FROM member;
"kim";"{music}"
"lee";"{}"
"park";"{sing,craft}"
"hong";"{soccer,swim,tennis,book}"
"ha";"{cartoon,drink,sing,dance}"
항목의 2번째에서 5번째 값을 읽어올 때는 위와 같이 쓴다.
SELECT * FROM member
WHERE hobby[1] = 'game';
2;"lee";12;"{game}"
첫번째 항목인 'game'인 것을 찾을 때
SELECT * FROM member
WHERE 'book' = ANY(hobby);
1;"kim";10;"{book,music}"
4;"hong";9;"{baseball,soccer,swim,tennis,book}"
항목 중에 book이 있는 것을 찾을 때
SELECT id, (SELECT COUNT(arrayColumn) FROM UNNEST(hobby) arrayColumn) as array_count
FROM member;
배열 컬럼에 항목이 몇개 들어있는지를 알고 싶을 때
● 배열형 컬럼을 가진 데이터 갱신하기
UPDATE member SET hobby = '{swim, movie, racing}'
WHERE id = 1;
배열 컬럼의 전체 항목을 바꿀 때
UPDATE member SET hobby[3] = 'sing'
WHERE id = 1;
배열 컬럼의 3번 째 항목을 바꿀 때
UPDATE member SET hobby[5] = 'fishing'
WHERE id = 1;
해당 필드의 항목이 3개있는 경우에 5번째 데이터를 변경하면 4번째는 NULL값이 들어간다.
UPDATE member SET hobby[2:4] = '{golf, sing, movie}'
WHERE id = 2;
구간을 지정해서 항목을 변경할 수 있다.
UPDATE member SET hobby = array_append(hobby, 'game')
WHERE id = 3;
배열 컬럼에 새로운 항목을 추가하고 싶을 때