Computer >> 컴퓨터 >  >> 프로그래밍 >> SQL

DBMS 관계형 집합 연산자 완벽 정리: UNION, INTERSECT, MINUS


DBMS의 관계형 집합 연산자란?

DBMS는 관계형 집합 연산자(relational set operators)를 지원합니다. 대표적인 관계형 집합 연산자로는 합집합(UNION), 교집합(INTERSECT), 차집합(MINUS 또는 EXCEPT)이 있으며, 이들은 모두 다양한 SQL 쿼리를 통해 구현할 수 있습니다.

아래 두 개의 예시 테이블을 사용하여 각 연산자를 자세히 살펴보겠습니다.

예시 테이블 1 — Art_Students (미술 수강생)

학생 번호학생 이름학생 점수
1John95
2Mary80
3Damon57

예시 테이블 2 — Dance_Students (무용 수강생)

학생 번호학생 이름학생 점수
2Mary50
3Damon98
6Matt45

UNION (합집합)

UNION은 두 개의 서로 다른 쿼리 결과를 하나의 테이블 형태로 결합합니다. 단, UNION을 적용하려면 두 결과 집합의 컬럼 구조가 동일해야 합니다. UNION은 데이터에서 중복 값을 모두 제거하고 고유한(distinct) 값만 표시합니다. 만약 중복 값까지 결과에 포함하고 싶다면 UNION ALL을 사용하면 됩니다.

UNION 예제:

Select Student_Name from Art_Students
UNION
Select Student_Name from Dance_Students

위 쿼리는 Art_Students 테이블과 Dance_Students 테이블에 있는 모든 학생의 이름을 표시합니다. 즉, John, Mary, Damon, Matt가 출력됩니다.

INTERSECT (교집합)

교집합 연산자는 두 데이터 집합 사이에서 공통으로 존재하는 값만 반환합니다. 교집합 연산자가 올바르게 작동하려면 두 데이터 집합의 구조가 유사해야 하며, 마찬가지로 결과를 표시하기 전에 중복 값을 모두 제거합니다.

INTERSECT 예제:

Select Student_Name from Art_Students
INTERSECT
Select Student_Name from Dance_Students

위 쿼리는 Art_Students 테이블과 Dance_Students 테이블 양쪽에 모두 존재하는 학생, 즉 미술과 무용 수업을 모두 수강하는 학생의 이름을 표시합니다. 이 예시에서는 Mary와 Damon에 해당합니다.

MINUS (차집합)

차집합 연산자는 두 집합을 비교하여 첫 번째 집합에는 존재하지만 두 번째 집합에는 없는 값만 반환합니다.

MINUS 예제:

Select Student_Name from Art_Students
MINUS
Select Student_Name from Dance_Students

위 쿼리는 Art_Students 테이블에는 있지만 Dance_Students 테이블에는 없는 모든 학생의 이름을 표시합니다. 즉, 미술 수업은 듣지만 무용 수업은 듣지 않는 학생들입니다. 이 예시에서는 John에 해당합니다.

마무리 및 참고 사항

정리하면, UNION은 두 집합을 합치고, INTERSECT는 공통 부분만 추출하며, MINUS는 첫 번째 집합에만 있는 값을 찾습니다. 세 연산자 모두 두 결과 집합의 컬럼 개수와 데이터 타입이 서로 호환되어야 한다는 점을 기억하세요.

또한 DBMS마다 지원 방식이 다릅니다. Oracle은 MINUS 키워드를 사용하지만, 표준 SQL에서는 EXCEPT를 사용합니다. MySQL의 경우 INTERSECT와 MINUS(EXCEPT)를 직접 지원하지 않으므로, JOIN이나 IN/NOT IN 조건 등으로 대체 구현해야 한다는 점도 참고하시기 바랍니다.