본문 바로가기
DBMS/PostgreSQL

[PostgreSQL] 배열(array) 연산자 (ft. compare, concat)

by 썸머워즈 2021. 10. 11.
반응형

PostgreSQL에서 배열을 다룰때 사용하는 연산자에 대해 알아보자.

특히 배열과 배열의 비교 또는 배열에 추가적인 값을 넣어줄때 많이 사용하게 될 것이다.

 

PostgreSQL Document에 자세한 설명이 나와있으니 표를 가져와 정리해 두고자 한다.

 

▷ PostgreSQL Document Array Operators

표현식 설명 예시 결과
= equal ARRAY[1.1,2.1,3.1]::int[] = ARRAY[1,2,3] t
<> not equal ARRAY[1,2,3] <> ARRAY[1,2,4] t
< less than ARRAY[1,2,3] < ARRAY[1,2,4] t
> greater than ARRAY[1,4,3] > ARRAY[1,2,4] t
<= less than or equal ARRAY[1,2,3] <= ARRAY[1,2,3] t
>= greater than or equal ARRAY[1,4,3] >= ARRAY[1,4,3] t
@> contains ARRAY[1,4,3] @> ARRAY[3,1,3] t
<@ is contained by ARRAY[2,2,7] <@ ARRAY[1,7,4,2,6] t
&& overlap (have elements in common) ARRAY[1,4,3] && ARRAY[2,1] t
|| array-to-array concatenation ARRAY[1,2,3] || ARRAY[4,5,6] {1,2,3,4,5,6}
|| array-to-array concatenation ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9]] {{1,2,3},{4,5,6},{7,8,9}}
|| element-to-array concatenation 3 || ARRAY[4,5,6] {3,4,5,6}
|| array-to-element concatenation ARRAY[4,5,6] || 7 {4,5,6,7}

 

표현식과 설명 예시만 봐서는 사실 잘 모르는 부분이 있을수 있다.

좀 더 자세히 설명을 해보자면,

 

평등 연산자 ( = , <>) 의 경우 배열의 원소 별 비교를 진행한다.

select
array[1,2,3] = array[1,2,4] as compare1, -- false
array[1,2,3] <> array[1,2,4] as compare2; -- true

 

순서 연산자( > , < , >= , <=)의 경우 같은 순서로 배열의 각 요소를 비교한다.

크기랑은 상관없이 배열의 서로 위치한 요소 쌍을 기반으로 비교를 진행하는 것이다.

select
array[1,2,5] >= array[1,2,4] as compare1, -- true
array[1,2,5] <= array[1,2,4,5] as compare2; -- false

 

포함 연산자(@> , <@)의 경우 각각의 고유한 요소가 다른 배열에도 존재하는 경우 배열은 다른 배열에 포함된다고 표시한다.

-- This reads as array['a', 'b', 'c'] contains array['a', 'b', 'b', 'a']
select array['a', 'b', 'c'] @> array['a', 'b', 'b', 'a'] as contains; -- true

-- this reads as array[1, 1, 4] is contained by array[4, 3, 2, 1]
select array[1, 1, 4] <@ array[4, 3, 2, 1] as is_contained_by; -- true

한 배열의 요소가 하나라도 다른 배열에 포함되어있으면 true를 반환하는것 같다.

 

중첩 연산자(&&)의 경우 서로 다른 배열에 공통 요소가 있는지를 확인해준다.

공통 요소가 있는 배열을 중첩 배열 이라고한다.

select
array[1, 2] && array[2, 3] as overlap1, -- true
array[1, 2] && array[3, 4] as overlap2; -- false

뭔가 포함 연산자 두개를 합친게 중첩연산자로 보인다.

 

결합 연산자(||)의 경우 말 그대로 두 배열을 합쳐주는건데 사실 그 외에도 좀 다양하게 쓰인다.

개인적으로는 두 배열이 아니라 두 요소를 합치는거라 배열에서도 사용이 가능한것이라 생각된다.

select
array[1, 2, 3] || array[4, 5, 6] as concat1, -- {1,2,3,4,5,6}
array[1, 2, 3] || array[[4,5,6],[7,8,9]] as concat2, -- {{1,2,3},{4,5,6},{7,8,9}}
3 || array[4, 5, 6] as concat3, -- {3,4,5,6}
array[1, 2, 3] || 7 as concat4, -- {1,2,3,7}

참고 : https://www.postgresql.org/docs/10/functions-array.html

 

9.18. Array Functions and Operators

9.18. Array Functions and Operators Table 9.48 shows the operators available for array types. Table 9.48. Array Operators Operator Description Example Result = equal …

www.postgresql.org

 

참고 : https://popsql.com/learn-sql/postgresql/how-to-compare-arrays-in-postgresql

 

How to Compare Arrays in PostgreSQL - PopSQL

 

popsql.com

반응형


댓글

TOP