본문 바로가기

Data Literacy/SQL

Chapter 3. 집합 연산자와 서브쿼리 - (2) UNION과 합집합 1

PostgreSQL logo image

 

 

 

우리는 앞서서 아주 간단하고 심플한 방식으로 '관계형 데이터베이스'에서의 용어 개념에 대해서 알아보았습니다. 100% 정확한 내용이라고 볼 수도 없고, 실무적인 내용은 아니지만 어설프게 사용하는 용어의 관념에 대해서 최소한의 정의를 진행한 것에 의의를 두시기 바랍니다.

 

 

 

Chapter 3. 집합 연산자와 서브쿼리 - (1) 관계형 데이터베이스의 정의

이번 아티클부터는 새로운 챕터를 통해서 몇 가지 집합 연산자와 이와 관련된 서브쿼리를 배워볼 예정입니다. 이번 시간에 배우는 개념들은 SQL을 이해하는 데 있어서 매우 중요합니다. 왜냐하

nozeroslope.tistory.com

 

 

이제부터는 '데이터베이스'의 관점에서 복수의 테이블을 다루는 방식, 그리고 그와 관련된 개념들에 대해서 살펴보겠습니다. 우선 하나의 테이블은 하나의 집합이라고 볼 수 있습니다. 

 

 

위와 같은 '집합'이 있다고 보겠습니다. 벤다이어그램 상 원 안의 숫자는 요소가 됩니다. 이를 테이블로 구성하면 오른쪽과 같은 형태가 되는 것이죠. '요소'는 테이블에서 하나의 행(row)을 의미합니다. 그리고 그 행은 복수의 열(column)이 존재하게 됩니다. 이를 속성과 유사하다고 설명했었죠. 하나의 행에 넘버, 이름, 주소, 성별, 직급... 등 다양한 속성이 있겠지만 어쨌든 요소는 하나의 행을 의미하게 됩니다. 

 

우리가 평소에 SELECT를 사용해서 원하는 몇 개의 행 데이터를 출력하는 경우가 있습니다. 이렇게 리턴된 결과 전체 역시도 새로운 하나의 '집합'이라고 생각하시면 됩니다. 

 

 

 


 

○ 집합에서의 합집합 : UNION

 

간단한 중학생 수준의 합집합 개념을 다시 짚어봅시다. A = {1, 2, 5} 그리고 B = {5, 10, 11}이라는 두 개의 집합이 있다고 가정합니다. 여기서 합집합 A ∪ B는 무엇이 될까요? {1, 2, 5, 10, 11}이 됩니다. 당연한 이야기 같지만, 정확히는 5라는 요소는 두 가지가 존재합니다. A의 5와 B의 5죠. 하지만 우리가 익히 알다시피, 동일한 요소가 있는 집합의 합집합을 구할 때에는 중복을 제거합니다. 

 

자, 이 기본 상식은 SQL에서 테이블을 다루기 때문에 다시 한번 주지한 내용입니다. 'A ∪ B'라는 개념은 SQL에서 'A UNION B'로 표현하게 됩니다. 이 UNION 명령어의 원칙에 대해서 차근차근 정리해 보겠습니다. 

 

1. UNION은 SELECT sth FROM sth 형태의 집합의 합집합을 만든다. 
2. 합집합을 위한 각각의 집합은 열 개수와 각 열의 이름은 다르더라도 데이터 타입이 동일해야 한다.
    → 애스터리스크(*)를 사용할 때는 완전히 동일해야 하지만, 특정 열만 지정해서 조건을 맞출수도 있다. 
3. 합집합의 성질에 따라, '중복되는 값'은 제거된다. 

 

기본적인 쿼리 사용 방식은 다음과 같습니다. 

 

SELECT * FROM TABLE00
UNION
SELECT * FROM TABLE01
UNION
SELECT * FROM TABLE02

 

그럼 다음 아티클에서 실제 사용 사례를 확인해보도록 하겠습니다.