티스토리 뷰

데이터베이스/MySQL

집합 연산 및 UNION

토마's 2017. 12. 23. 16:22

안녕하세요. 오늘은 집합 연산에 대해서 포스팅 하려고 합니다. 지금까지 진행했던 SQL 명령은 대부분 '하나의 테이블'을 사용해왔습니다. 오늘은 '여러 개의 테이블'을 사용해 테이터를 검색하는 방법에 대해 알아보겠습니다.


1. SQL과 집합


집합이라고 하면 보통 벤다이어 그램을 많이 떠올리실 겁니다. 벤다이어 그램에서는 하나의 원이 곧 하나의 집합입니다. 원 안에는 몇가지 요소가 포함되어 있는데 원 안의 숫자들을 요소라고 합니다. 그리고 데이터베이스에서는 테이블의 행이 요소에 해당하며, 행은 여러 개의 열로 구성되는 경우도 있으므로 수치상으로는 복수의 값이 존재합니다. 하지만, 집합의 요소라는 측면에서 보면 하나의 행이 하나의 요소가 됩니다. 즉,

SELECT 명령을 실행하면 데이터베이스에 질의하며, 그 결과로 몇개의 행이 반환되고 이 때, 반환된 결과 전체를 하나의 집합으로 생각하시면 됩니다.



- UNION으로 합집합 구하기


집합의 연산에는 '합집합'이라는 것이 있고, 이것은 집합을 서로 더한 것을 말합니다. 그럼 구문으로 살펴보겠습니다.

SELECT * FROM 테이블1
UNION
SELECT * FROM 테이블2;


위의 구문을 간단한 예제를 통해 알아보겠습니다. 우선 sample71_a과 sample_b 두개의 테이블에 저장된 데이터를 확인해보겠습니다.


<sample71_a>

 


<sample71_b>



그리고 두개의 테이블을 UNION 구문을 사용해서 합집합을 구해보겠습니다.



위의 결과를 확인해보시면 중복을 제거한 결과와 같다고 볼 수 있습니다. 즉, sample71_a와 sample71_b에 각각 데이터 2가 들어 있는데 중복을 제거한 것과 같이 합집합에는 하나의 2가 나타난 것을 확인해볼 수 있습니다.



- UNION ALL로 합집합 구하기


경우에 따라서는 중복을 제거하지 않고 2개의 SELECT 명령의 결과를 그냥 합치고 싶을 때도 있을 겁니다. 이러한 경우에는 UNION ALL을 사용합니다.

SELECT * FROM 테이블1
UNION ALL
SELECT * FROM 테이블2;


위의 구문을 예제를 통해 확인해보겠습니다.


위의 결과를 확인해보시면, 중복된 데이터인 2가 결과로 나타나는 것을 확인할 수 있습니다.


이상으로 집합 연산에서 합집합에 대한 포스팅을 마치도록 하겠습니다. 추후에는 교집합, 차집합에 관한 내용도 포스팅 하도록하겠습니다. : )