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
숫자가 포함된 출력을 제공합니다.
이제 숫자 대신 단어로 정확한 것을 시도하여 변화가 있는지 확인합시다.
SELECT unnest (ARRAY['apple', 'oranges', 'mango']);
표 형식(3행)으로 모든 3
단어가 포함된 출력을 제공합니다.
보시다시피 정수와 텍스트 모두에 완벽하게 작동합니다.
단순 다차원 배열에서 PostgreSQL unnest ()
함수 사용
위에서 1D 배열에 unnest ()
함수를 적용하는 방법을 설명했습니다. 아래 예는 2D 배열에서 사용하는 방법을 보여줍니다.
SELECT unnest (array[array[1, 2], array[2, 3], array[4,5]]);
표 형식의 모든 6
숫자가 포함된 총 6
행에 표시됩니다.
동시에 여러 어레이에서 PostgreSQL unnest ()
기능 사용
이 섹션에서는 여러 어레이에서 unnest ()
기능을 동시에 사용하는 방법을 보여줍니다. 배열은 다른 데이터 유형일 수도 있습니다.
unnest ()
함수를 사용한 후 각 배열은 배열 값이 행인 테이블의 열로 나타납니다.
unnest (array1, array2, array3…)
로 쓸 수 있습니다. 아래 예는 개념을 명확히 하는 데 도움이 됩니다.
SELECT * FROM
unnest
(
array [1, 2, 3],
array ['HP', 'AMD', 'APPLE']
)
AS data(ID, Company);
각 배열이 열로 포함된 테이블과 내부 값이 해당 열의 행으로 표시됩니다.
두 배열의 요소 수가 같지 않은 또 다른 예를 들어 보겠습니다.
SELECT * FROM
unnest
(
array [1, 2, 3],
array ['HP', 'AMD', 'APPLE', 'DELL']
)
AS data(ID, Company);
이 예에서는 IDs
보다 회사가 하나 더 있습니다. 이 경우 보상을 위해 더 짧은 것이 NULLS
로 채워지고 테이블이 오류 없이 표시됩니다.
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;
ORDER BY
절을 사용하는 또 다른 방법은 AS
를 사용하여 배열에 이름을 지정하는 것입니다. 이 경우 결과는 두 번째 열(Ranking
)에 따라 정렬됩니다.
SELECT * FROM
unnest
(
array['HP', 'AMD', 'APPLE'],
array[23,14,1]
)
AS data(Company, Ranking) ORDER BY Ranking;
PostgreSQL unnest ()
함수를 LIMIT
절과 함께 사용
PostgreSQL에서는 LIMIT
절과 함께 unnest ()
함수를 사용할 수 있습니다.
이 경우 결과 테이블(배열 확장 후)은 LIMIT
절에 설명된 조건으로 제한됩니다. 아래의 예는 아이디어를 명확히 할 것입니다.
SELECT unnest (array[1,2,3,4,5,6])
LIMIT 3;
배열의 첫 번째 3
값만 행으로 표시합니다.
LIMIT
와 함께 OFFSET
명령을 사용할 수도 있습니다.
SELECT unnest (array[1,2,3,4,5,6])
LIMIT 3 OFFSET 3;
첫 번째 3
값을 건너뛰고 마지막 3
값 (4,5,6)
만 결과 테이블의 행으로 표시합니다.
DISTINCT
절과 함께 PostgreSQL unnest ()
기능 사용
DISTINCT
절은 중복을 제거하기 위해 여러 데이터베이스 언어에서 사용됩니다.
PostgreSQL에서는 정수, 문자열 등 모든 종류의 데이터 중복 제거가 가능하지만 표 형식의 데이터에서만 중복 제거가 가능하다는 한계가 있다.
이러한 제한으로 인해 어레이에서 중복 항목을 제거하기가 어렵습니다. 그러나 unnest ()
기능은 이 문제를 빠르게 해결합니다.
unnest ()
명령을 사용하여 먼저 배열 값을 표 형식으로 변환할 수 있습니다. 그런 다음 DISTINCT
절을 쉽게 적용하여 중복 항목을 제거할 수 있습니다.
이 아이디어는 이해를 돕기 위해 아래 예에 설명되어 있습니다.
SELECT DISTINCT unnest (array['HP', 'DELL', 'APPLE','AMD', 'HP']);
이 예에서 배열은 먼저 unnest ()
를 사용하여 테이블 형식으로 변환됩니다. 그런 다음 DISTINCT
절을 적용하여 중복을 제거합니다. 결과적으로 결과 테이블에는 HP
가 한 번만 포함됩니다.
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