[LearningSql] 집합 연산자

반응형
반응형

집합... 우리가 수학에서 가장 잘하는 챕터입니다.
왜냐하면

더 이상 말하지 않겠다.

아무튼
집합에는 3가지 용법이 등장합니다.
합집합, 교집합, 차집합 
물론 여집합 같은 것도 있지만
여기에서는 이 3가지만 알아도 충분합니다.

사실 집합에는 전제조건이 있습니다.
정확히 말하면 합집합, 교집합, 차집합을 온전히 구하기 위한 전제조건입니다.

바로 두 집합이 비슷한 부분이 있어야 됩니다.

만약 없다면 합집합, 교집합, 차집합을 하는 의미가 없어질지도 모릅니다.

합집합

합집합의 의미는 두개의 집합을 합친다는 의미입니다.

여기 집합이 두개 있습니다.
여기서 이 두 집합을 합친다면...

다음과 같은 것을 확인 할 수 있습니다.

여기서 질문!
만약, 공통된 부분이 존재한다면, 어떻게 해야할까요?

정답은 공통된 부분은 2번이 아니라 1번만 입력하게 되어집니다.
그래서 위에서 말한 전제조건이 이때문입니다.
물론, 불가능한것은 아닙니다.
다만 합치면 공통된 부분이 없기 때문에 위 그림처럼 등장하게 되는것이죠

SQL에서는 UNION으로 합칩합을 구현할 수 있습니다.

select * from A
union
select * from B

 

여기서 UNION ALL을 사용하게 되면 중복된 부분은 무시합니다.
즉, 여기에서는 공통된 부분은 1번이 아니라 2번입니다.

교집합

이 부분은 공통된 부분의 집합을 구한다는 의미입니다.
위에서 합집합에대해 공부했습니다.

그리고 공통된 부분은 1번만 발생한다고 말했습니다.

이것이 그것을 구하는 부분입니다.

이 그림에서 공통된 부분이 있다고 가정해봅시다.
그러면 그 해당 부분만 출력이 되어집니다.

넵 맞습니다. 갈색 부분이 공통된 부분입니다.

이것또한 SQL에서 제공되어집니다.
하지만 MYSQL은 없지... 있는걸 찾는게 더 어려울껄...

그래도 설명하자면 intersect라는 연산자를 이용한다고 합니다.

select * from A
intersect
select * from B

이것도 intersect all을 통해 중복을 제거하지 않는다는데..
어차피 IBM의 DB2유니버셜만 유일하다고 하니 없다고 생각해도 될것 같네요.
어떻게 출력되는지는 잘 모르겠네요.

차 집합

위에서 말한 집합들과의 차이점은

A 차집합 B와 B 차집합 A는 다릅니다.

위 2가지는 A가 먼저오든 B가 먼저오든 상관없이 같은 결과를 리턴하지만 이건 그렇지 않습니다.

빠르게 말하면 빼는겁니다.
그러니까 A에서 B에 대한 값을 빼게 되는 것이죠.
결과적으로 A에서 (A 교집합 B)을 빼는것과 같은 결과를 리턴합니다.

select * from A
expeect
select * from B

 

어디서 읽었는지는 기억안나는데 집합 연산은 웬만하면 사용하지 말라고 합니다.
이유는 잘모르겠습니다. 아무튼 저는 사용안할겁니다.

반응형

'sql' 카테고리의 다른 글

[Learning SQL] 서브쿼리  (0) 2021.05.03
[Learning SQL] 그룹화와 집계  (0) 2021.04.28
[LearningSql] 다중 테이블 쿼리  (0) 2021.04.13
[LearningSql] 필터링  (0) 2021.04.11
[Leaning SQL] select  (0) 2021.04.10

댓글

Designed by JB FACTORY