Software/데이터베이스(SQL)

[HOW]SQL 집합 연산자(SET OPERATOR) 사용하는 방법, UNION, UNION ALL, INTERSECT, MINUS -오라클(ORACLE)

friendly 2020. 9. 15. 01:00
반응형

안녕하세요. 신기한 연구소입니다.

조인(JOIN)을 사용하지 않고 두 개의 테이블을 사용해서 조회하는 방법으로

집합 연산자를 사용할 수 있습니다.

 

 

수학에서도 배웠던 합집합, 교집합 등과 같은 개념인데요.

총 4가지 연산자가 있으니 각각의 특징을 같이 살펴보도록 합니다.

 

UNOIN

두 개 이상의 쿼리를 작성해서 합집합을 만드는 연산자입니다.

두 개의 쿼리를 합친다면 SELECT 문의 컬럼도 같아야 합니다. 합쳐야 하니까요.

그리고 두 쿼리 사이에 UNION을 넣고 합치면 됩니다.

UNION은 중복된 데이터가 있다면 하나로 표현합니다.

 

 

 

첫 번째 쿼리와 두 번째 쿼리 둘 다 7건이 나옵니다.

UNION으로 결합하면 14건이 아닌 중복된 데이터를 제거하고 9건만

조회됩니다.

 

UNION ALL

 

같은 쿼리를 UNION ALL로 합쳤습니다.

UNION ALL도 합집합이지만 중복된 행도 조회됩니다.

 

 

조회를 하면 각각 7건씩 총 14건이 조회됨을 확인할 수 있습니다.

 

INTERSECT

이 연산자는 교집합을 나타냅니다.

두 쿼리간 같은 값들만 추출해서 보여주는데

SELECT문의 컬럼들 모두가 일치해야 합니다.

 

 

5건이 조회되었습니다.

 

MINUS

이 연산자는 차집합을 나타냅니다.

먼저 조회된 쿼리에서 다음 쿼리의 결과값을 뺀 나머지를 보여줍니다.

 

 

2건이 조회되었습니다.

 

이렇게 4가지 집합 연산자에 대해 알아봤습니다

주의할 점이 있습니다.

 

우선 정렬하는 방법에 주의해야 합니다.

각 쿼리에서 ORDER BY를 사용할 수 없고

SET 연산을 한 마지막 쿼리 뒤로 ORDER BY를 사용할 수 있습니다.

어짜피 여러 개의 쿼리를 합쳐서 하나의 결과를 얻는 게 목적이고

그 결과에 대해 정렬(ORDER BY)를 하는 게 맞겠지요?

미리 ORDER BY 해도 합치는 과정에 의미가 없어지기 때문입니다.

 

 

그리고 BLOB, CLOB 등의 타입의 컬럼은 SELECT문에서 사용할 수 없으며

LONG 타입은 UNION ALL만 SELECT문에서 사용이 가능합니다.

나머지 연산자는 LONG 타입을 사용하면 오류가 납니다.

 

조인(JOIN)해서 데이터를 구하기 힘들거나

두 가지 쿼리에 대해 대사를 하는 과정에서

데이터가 안 맞을 때 교집합, 차집합을 이용해서

잘못된 데이터를 찾는데 활용하곤 했습니다.

 

잘못된 정보나 수정이 필요한 부분이 있으면 댓글 주세요.

아래 하트(공감) 버튼을 눌러서 더 다양한 글을 쓸 수 있게 응원 부탁드립니다. 감사합니다.

반응형