강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

집합 연산자

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

sub_title_icon.gif 집합 연산자
1. 집합 산술 연산자
SET, MULTISET, LIST(SEQUENCE) 타입에 대해 합집합, 차집합, 교집합을 구하기 위해서 각각 +, -, * 연산자를 사용할 수 있다.
다음 표에 연산자에 대한 용법이 요약되어 있다.
컬렉션 피연산자 집합 산술 연산자 컬렉션 피연산자 결과 컬렉션 타입
SET +
-
*
SET SET
SET +
-
*
MULTISET
LIST (SEQUENCE)
MULTISET
MULTISET +
-
*
SET
MULTISET
LIST (SEQUENCE)
MULTISET
LIST (SEQUENCE) + LIST (SEQUENCE) LIST (SEQUENCE)
LIST (SEQUENCE) + SET
MULTISET
MULTISET
LIST (SEQUENCE) -
*
SET
MULTISET
LIST (SEQUENCE)
MULTISET
icon_sub02.gif 합집합
+ 연산자는 두 개의 컬렉션의 모든 원소들을 합쳐서 하나의 컬렉션을 생성한다. 두 LIST를 + 연산자로 합치면 결과로 입력된 두 개의 LIST를 병합(concatenation)한 LIST가 반환된다. 입력한 LIST의 개별적인 순서는 변하지 않는다. + 연산자의 피연산자 모두가 같은 컬렉션 타입이면, 결과는 입력한 컬렉션 타입이 된다. 예를 들어, 두 개의 SET을 더할 경우 그 결과로는 SET가 반환되며, SET의 성격상 중복된 원소는 제거된다. 두 개의 MULTISET의 합집합을 구하면, 원소들이 순서대로 정렬된 MULTISET가 반환된다. 예를 들어, {1, 3, 4, 3} + {3, 5, 4} 수식은 {1, 3, 3, 3, 4, 4, 5}와 같은 MULTISET가 반환된다. + 연산에 서로 다른 두 컬렉션 타입이 주어지면, 두 피연산자 모두 MULTISET로 변환된 후 계산되며 결과로 MULTISET가 반환된다.
icon_sub02.gif 차집합
- 연산자는 하나의 컬렉션에 속한 원소 중에서 다른 컬렉션에 속하지 않은 원소만을 결정하는데 사용된다. 두 컬렉션간의 차집합을 계산할 때, - 연산자의 왼편에 있는 컬렉션에 속한 원소 중에서 오른쪽에 있는 컬렉션에 속하지 않은 원소들을 반환한다. 예를 들어, {1, 3, 4, 3} - {3, 5, 4} 수식은 {1, 3}과 같은 MULTISET를 반환한다. 두 피연산자 모두가 SET 타입인 경우에만 결과가 SET 타입이고, 그 외에는 MULTISET가 반환된다.
icon_sub02.gif 교집합
두 컬렉션 모두에 속한 원소들을 찾기 위해서 * 연산자를 사용한다. 두 컬렉션 피연산자가 모두 SET이면, 중복이 모두 제거된 SET 타입의 컬렉션이 결과로 반환된다. 이 경우를 제외한 나머지 피연산자 조합에 대해서는 결과로 MULTISET가 반환된다. 이 경우에 두 피연산자가 모두 계산 이전에 MULTISET로 변환되고 결과 역시 MULTISET가 반환된다. 예를 들어, {1, 3, 4, 3} * {3, 5, 4} 수식은 {3, 4}와 같은 MULTISET를 반환한다.
2. 타입 변환
컬렉션 타입에 대한 산술 연산은 다음과 같은 데이터 타입 변환 규칙을 따른다.
icon_sub02.gif 두 인자가 같은 타입이면, 변환은 필요 없고 인자의 타입과 같은 결과가 반환된다.
icon_sub02.gif 두 인자가 서로 다른 컬렉션 타입을 가지는 경우에는, 필요한 경우 두 인자 모두 MULTISET로 변환된다. 결과는 MULTISET이다.
3. 변수에 집합 데이터 값 할당
컬렉션 값을 변수에 할당하기 위해서는 외부 질의가 하나의 행만을 반환해야 한다.
icon_sub02.gif 다음은 컬렉션 값을 변수에 할당하는 방법을 나타내는 예제이다. 다음과 같이 외부 질의는 하나의 행만을 반환해야 한다.
SELECT SET(SELECT name
FROM people
WHERE ssn in {'1234', '5678'})
TO :"names"
FROM TABLE people;

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,810 개
  • 현재 접속자 :  76 명