CodeGym /행동 /SQL SELF /배열(`ARRAY`) 사용하기

배열(`ARRAY`) 사용하기

SQL SELF
레벨 16, 레슨 2
사용 가능

오늘은 PostgreSQL에서 진짜 강력한 도구 중 하나인 배열에 대해 좀 얘기해볼게. 배열은 한 컬럼 안에 같은 타입의 값 리스트를 저장할 수 있게 해줘. 더 자세한 건 다음 단계에서 다룰 거야.

“배열”이라고 하면 바로 리스트가 떠오르지? 마치 장 보러 가기 전에 쇼핑 리스트 적는 것처럼: 사과, 바나나, 우유, 빵. PostgreSQL에서 배열은 이런 리스트랑 비슷해. 여러 값을 한 필드에 저장할 수 있고, 각 값은 같은 데이터 타입이야. 예를 들어 숫자 배열, 텍스트 배열, 날짜 배열 등등.

예시 몇 개 보여줄게.

숫자 배열:

{1, 2, 3, 4}

문자열 배열:

{"사과", "바나나", "체리"}

날짜 배열:

{2024-10-01, 2024-10-02, 2024-10-03}

배열을 쓰면 여러 값을 한 필드에 넣을 수 있어서 테이블 공간도 아끼고, 쿼리도 더 유연하게 할 수 있어.

배열이 왜 필요할까? 주요 장점

데이터를 컴팩트하게 저장: 여러 값을 한 필드에 저장할 수 있어. 서로 논리적으로 연결된 데이터에 특히 좋아. 예를 들어, 글의 태그 리스트나 학생의 점수 리스트 같은 거. 태그 두 개 때문에 별도 테이블 만들기 귀찮잖아?

쿼리 편의성: 배열 덕분에 한 필드에서 바로 값 리스트를 꺼낼 수 있고, 배열의 특정 요소도 쉽게 다룰 수 있어.

성능: 어떤 상황에서는 관련 데이터를 위한 추가 테이블을 만들 필요가 없어서 DB 구조가 단순해지고 개발도 빨라져. 이거 꽤 기분 좋지.

PostgreSQL에서 배열 다루기

SELECT에서 배열 만들기

배열을 만들 때는 ARRAY[] 생성자를 써. 예시 볼래?

-- 숫자 배열 예시
SELECT ARRAY[1, 2, 3, 4];

-- 문자열 배열 예시
SELECT ARRAY['사과', '바나나', '체리'];

너무 쉽지? 이제 테이블을 만들어서 뭔가 뽑아보자.

배열 컬럼이 있는 테이블 만들기

먼저, 컬럼 중 하나가 배열인 테이블을 만들어보자.

id name - VARCHAR(50) subjects - TEXT[]
1 Alex {수학,물리}
2 Maria {화학,생물,영어}
3 Peter {정보}

결과를 한번 볼까:

SELECT * FROM students;
id name subjects
1 Alex {수학,물리}
2 Maria {화학,생물,영어}
3 Peter {정보}

배열에서 데이터 꺼내기

PostgreSQL에서는 배열에서 데이터를 꺼낼 수 있는 함수랑 연산자가 몇 개 있어.

배열 요소 꺼내기

배열에서 인덱스로 값을 꺼낼 때는 대괄호 []를 써. 참고로 인덱스는 1부터 시작해(대부분 프로그래밍 언어는 0부터 시작하는데 PostgreSQL은 1이야).

-- 각 학생의 첫 번째 과목 가져오기
SELECT name, subjects[1] AS 첫_과목 FROM students;

결과는 이렇게 나와:

name 첫_과목
Alex 수학
Maria 화학
Peter 정보

배열 전체 꺼내기

배열의 모든 요소를 가져오려면 그냥 SELECT 쓰면 돼:

SELECT name, subjects FROM students;

배열 안에서 값 찾기

가끔 배열에 특정 값이 있는지 확인하고 싶을 때가 있지. 이럴 땐 ANY 연산자를 써.

-- "수학"을 배우는 학생 찾기
SELECT name
FROM students
WHERE '수학' = ANY(subjects);

쿼리 결과:

name
Alex

PostgreSQL에는 배열 다루는 함수랑 연산자가 진짜 많은데, 이건 다음 단계에서 더 배울 거야 :P

배열 쓸 때 흔히 하는 실수

0과 1 인덱스 헷갈리기.

PostgreSQL에서 배열 인덱스는 1부터 시작해. Python이나 JavaScript 같은 언어에 익숙하면 헷갈릴 수 있어.

빈 배열.

빈 배열 {}이랑 NULL은 PostgreSQL에서 완전 다른 거야. 배열 비교할 때 이거 헷갈리지 마.

큰 배열 다루기.

엄청 많은 데이터를 배열에 넣으면 쿼리 속도가 느려질 수 있어. 배열은 소량 데이터에만 쓰는 게 좋아.

2
과제
SQL SELF, 레벨 16, 레슨 2
잠금
배열 안에서 값 찾기
배열 안에서 값 찾기
2
과제
SQL SELF, 레벨 16, 레슨 2
잠금
배열의 첫 번째 요소 추출하기
배열의 첫 번째 요소 추출하기
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION