PostgreSQL의 중첩 해제

Bilal Shahid 2024년2월15일
  1. PostgreSQL unnest () 기능
  2. PostgreSQL unnest() 사용
PostgreSQL의 중첩 해제

이 기사에서는 PostgreSQL에서 unnest() 키워드와 그 용도를 여러 예제와 함께 설명합니다.

PostgreSQL unnest () 기능

PostgreSQL에서는 배열을 데이터 유형으로 사용할 수 있습니다. 또한 언어에서 배열의 사용성 개선과 관련된 여러 기능이 있습니다.

unnest() 함수는 오늘 설명할 많은 배열 기능 중 하나입니다. 그러나 기본 기능은 ‘unnest’라는 단어 자체에서 매우 명확합니다. 배열을 행으로 확장합니다.

테이블 형식으로 배열을 표시하려고 할 때 필수적입니다. PostgreSQL은 이 기능을 통해 배열을 테이블 형식으로 행으로 나타낼 수 있는 단일 값 집합으로 확장할 수 있습니다.

이전 버전의 PostgreSQL에는 다른 PostgreSQL 기능과 함께 사용할 수 있는 unnest() 기능으로 대체된 어레이 확장을 달성하는 더 느리고 복잡한 방법이 있었습니다.

다른 PostgreSQL 기능과 함께 사용하면 보다 쉽고 빠르게 작업할 수 있는 방대한 가능성이 있습니다.

PostgreSQL unnest() 사용

기본 기능부터 시작한 다음 천천히 더 복잡한 사용 사례로 이동합니다. 구문은 unnest(배열)입니다.

단순히 배열의 모든 개별 값을 가져와 테이블의 행 형식으로 표시되는 집합에 넣습니다.

참고: unnest() 키워드를 배열과 함께 제공해야 합니다. 예: unnest (array_to_expand).

이제 각 필수 기능의 예를 살펴보겠습니다.

간단한 1차원 배열에서 PostgreSQL unnest () 함수 사용

5까지 자연수의 배열이 있다고 하자. 이를 확장하고 테이블의 행으로 표시하는 간단한 방법은 중첩 해제하는 것입니다.

SELECT unnest (ARRAY[1,2,3,4,5]);

표 형식(5행)으로 모든 5 숫자가 포함된 출력을 제공합니다.

postresql의 unnest - 출력 1

이제 숫자 대신 단어로 정확한 것을 시도하여 변화가 있는지 확인합시다.

SELECT unnest (ARRAY['apple', 'oranges', 'mango']);

표 형식(3행)으로 모든 3 단어가 포함된 출력을 제공합니다.

postresql의 unnest - 출력 2

보시다시피 정수와 텍스트 모두에 완벽하게 작동합니다.

단순 다차원 배열에서 PostgreSQL unnest () 함수 사용

위에서 1D 배열에 unnest () 함수를 적용하는 방법을 설명했습니다. 아래 예는 2D 배열에서 사용하는 방법을 보여줍니다.

SELECT unnest (array[array[1, 2], array[2, 3], array[4,5]]);

표 형식의 모든 6 숫자가 포함된 총 6 행에 표시됩니다.

postresql의 unnest - 출력 3

동시에 여러 어레이에서 PostgreSQL unnest () 기능 사용

이 섹션에서는 여러 어레이에서 unnest () 기능을 동시에 사용하는 방법을 보여줍니다. 배열은 다른 데이터 유형일 수도 있습니다.

unnest () 함수를 사용한 후 각 배열은 배열 값이 행인 테이블의 열로 나타납니다.

unnest (array1, array2, array3…)로 쓸 수 있습니다. 아래 예는 개념을 명확히 하는 데 도움이 됩니다.

SELECT * FROM
unnest
(
    array [1, 2, 3],
    array ['HP', 'AMD', 'APPLE']
)
AS data(ID, Company);

각 배열이 열로 포함된 테이블과 내부 값이 해당 열의 행으로 표시됩니다.

postresql의 unnest - 출력 4

두 배열의 요소 수가 같지 않은 또 다른 예를 들어 보겠습니다.

SELECT * FROM
unnest
(
    array [1, 2, 3],
    array ['HP', 'AMD', 'APPLE', 'DELL']
)
AS data(ID, Company);

이 예에서는 IDs보다 회사가 하나 더 있습니다. 이 경우 보상을 위해 더 짧은 것이 NULLS로 채워지고 테이블이 오류 없이 표시됩니다.

postresql의 unnest - 출력 5

PostgreSQL unnest () 함수를 ORDER BY 절과 함께 사용

PostgreSQL unnest () 함수는 ORDER BY 절과 함께 사용할 수도 있습니다. 우리는 그것을 예를 들어 설명할 것입니다.

ORDER BY 절을 사용하는 방법 중 하나는 배열의 순서를 활용하는 것입니다. 이 경우 결과는 두 번째 열(회사)에 따라 정렬됩니다.

SELECT * FROM
unnest
(
    array [1, 2, 3],
    array ['HP', 'AMD', 'APPLE']
)
AS data(ID, Company) ORDER BY 2;

postresql의 unnest - 출력 6

ORDER BY 절을 사용하는 또 다른 방법은 AS를 사용하여 배열에 이름을 지정하는 것입니다. 이 경우 결과는 두 번째 열(Ranking)에 따라 정렬됩니다.

SELECT * FROM
unnest
(
    array['HP', 'AMD', 'APPLE'],
    array[23,14,1]
)
AS data(Company, Ranking) ORDER BY Ranking;

postresql의 unnest - 출력 7

PostgreSQL unnest () 함수를 LIMIT 절과 함께 사용

PostgreSQL에서는 LIMIT 절과 함께 unnest () 함수를 사용할 수 있습니다.

이 경우 결과 테이블(배열 확장 후)은 LIMIT 절에 설명된 조건으로 제한됩니다. 아래의 예는 아이디어를 명확히 할 것입니다.

SELECT unnest (array[1,2,3,4,5,6])
LIMIT 3;

배열의 첫 번째 3 값만 행으로 표시합니다.

postresql의 unnest - 출력 8

LIMIT와 함께 OFFSET 명령을 사용할 수도 있습니다.

SELECT unnest (array[1,2,3,4,5,6])
LIMIT 3 OFFSET 3;

첫 번째 3 값을 건너뛰고 마지막 3(4,5,6)만 결과 테이블의 행으로 표시합니다.

postresql의 unnest - 출력 9

DISTINCT 절과 함께 PostgreSQL unnest () 기능 사용

DISTINCT 절은 중복을 제거하기 위해 여러 데이터베이스 언어에서 사용됩니다.

PostgreSQL에서는 정수, 문자열 등 모든 종류의 데이터 중복 제거가 가능하지만 표 형식의 데이터에서만 중복 제거가 가능하다는 한계가 있다.

이러한 제한으로 인해 어레이에서 중복 항목을 제거하기가 어렵습니다. 그러나 unnest () 기능은 이 문제를 빠르게 해결합니다.

unnest () 명령을 사용하여 먼저 배열 값을 표 형식으로 변환할 수 있습니다. 그런 다음 DISTINCT 절을 쉽게 적용하여 중복 항목을 제거할 수 있습니다.

이 아이디어는 이해를 돕기 위해 아래 예에 설명되어 있습니다.

SELECT DISTINCT unnest (array['HP', 'DELL', 'APPLE','AMD', 'HP']);

이 예에서 배열은 먼저 unnest ()를 사용하여 테이블 형식으로 변환됩니다. 그런 다음 DISTINCT 절을 적용하여 중복을 제거합니다. 결과적으로 결과 테이블에는 HP가 한 번만 포함됩니다.

postresql의 unnest - 출력 10

작가: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub