[SQL] : UNION

김대현·2024년 6월 8일

(1) UNION
(2) UNION 문법


(1) UNION

  • UNION 는 여러 개의 SQL문을 합쳐서 하나의 SQL 문으로 만들어주는 방법이다. 조금 더 구체적으로는 두 개 이상의 테이블을 두 개 이상의 SELECT 문의 결과를 결합하는 데 사용되는 SQL 구문입라고 할 수 있다. 주의할 사항으로는 SELECT 문으로 결합하려는 두 개의 결과물의 열(column) 의 개수가 같아야한다는 것이다.



(2) UNION 문법

#실습데이터
+----+--------+------------+-----+-----+---------------+-------------------+
| ID | NAME  | BIRTHDAY   | AGE | SEX | JOB_TITLE    | AGENCY            |
+----+--------+------------+-----+-----+---------------+-------------------+
|  1 | 아이유 | 1993-05-16 |  29 | F   | 가수, 탤런트   | EDAM엔터테인먼트    |
|  2 | 이미주 | 1994-09-23 |  28 | F   | 가수          | 울림엔터테인먼트     |
|  3 | 송강   | 1994-04-23 |  28 | M   | 탤런트        | 나무엑터스          |
|  4 | 강동원 | 1981-01-18 |  41 | M   | 영화배우, 탤런트| YG엔터테인먼트      |
|  5 | 유재석 | 1972-08-14 |  50 | M   | MC, 개그맨    | 안테나              |
|  6 | 차승원 | 1970-06-07 |  48 | M   | 영화배우, 모델 | YG엔터테인먼트       |
|  7 | 이수현 | 1999-05-04 |  23 | F   | 가수          | YG엔터테인먼트       |
+----+--------+------------+-----+-----+---------------+-------------------+

🖍️ UNION (중복된 값을 제거하여 알려준다)

#UNION (중복된 값을 제거하여 알려준다)
SELECT column1, column2, ... FROM tableA
UNION
SELECT column1, column2, ... FROM tableB;
#예시, celeb 테이블에서 성별이 여자인 데이터를 검색하는 쿼리와 
#소속사가 YG엔터테이먼트인 데이터를 검색하는 쿼리를 UNION 으로 실행

mysql> SELECT name, sex, agency FROM celeb WHERE sex = 'F'
    -> UNION
    -> SELECT name, sex, agency FROM celeb WHERE agency = 'YG엔터테이먼트';
+--------+-----+-------------------+
| NAME   | SEX | AGENCY            |
+--------+-----+-------------------+
| 아이유 | F   | EDAM엔터테인먼트     |
| 이미주 | F   | 울림엔터테인먼트      |
| 이수현 | F   | YG엔터테인먼트       |
| 강동원 | M   | YG엔터테인먼트       |
| 차승원 | M   | YG엔터테인먼트       |
+--------+-----+-------------------+
5 rows in set (0.00 sec)
  • UNION: UNION 연산자는 두 개의 SELECT 문의 결과를 결합한 뒤 중복된 값을 가진 행을 제거하여 하나의 결과 집합으로 만듭니다. 즉, 중복된 값은 한 번만 표시가 된다.

  • 해당 예시에서 UNION ALL 을 사용했다면 중복된 값도 모두 보여주기에 성별이 여자이고 소속사가 YG엔터테이먼트인 값을 가지고 있는 '이수현' 행이 2번 나왔겠지만 UNION을 사용했기에 중복된 값을 제외하고 하나의 '이수현' 값만 나오게 됐다.



🖍️ UNION ALL (중복된 값도 모두 보여준다)

#UNION ALL (중복된 값도 모두 보여준다)
SELECT column1, column2, ... FROM tableA
UNION ALL
SELECT column1, column2, ... FROM tableB;
#예시, celeb 테이블에서 성별이 여자인 데이터를 검색하는 쿼리와 
#소속사가 YG엔터테이먼트인 데이터를 검색하는 쿼리를 UNION 으로 실행

mysql> SELECT name, sex, agency FROM celeb WHERE sex = 'F'
    -> UNION ALL
    -> SELECT name, sex, agency FROM celeb WHERE agency = 'YG엔터테이먼트';
+--------+-----+-------------------+
| NAME   | SEX | AGENCY            |
+--------+-----+-------------------+
| 아이유 | F   | EDAM엔터테인먼트     |
| 이미주 | F   | 울림엔터테인먼트      |
| 이수현 | F   | YG엔터테인먼트       |
| 강동원 | M   | YG엔터테인먼트       |
| 차승원 | M   | YG엔터테인먼트       |
| 이수현 | F   | YG엔터테인먼트       |
+--------+-----+-------------------+
6 rows in set (0.00 sec)
  • UNION ALL: UNION ALL 연산자는 두 개의 SELECT 문의 결과를 결합한 뒤 중복된 값을 가진 행을 제거하지 않고 모두 표시하여 하나의 결과 집합으로 만든다. 즉, 중복된 값도 모두 결과 집합에 포함이 되게 된다.

  • 해당 예시에서 UNION 을 사용했다면 성별이 여자이고 소속사가 YG엔터테이먼트인 값을 가지고 있는 '이수현' 행이 중복되지 않고 한 개의 '이수현' 값만 나오겠지만 UNION ALL을 사용했기에 중복된 값도 모두 결과 집합에 포함을 시켜 '이수현' 행이 두 번 나오게 된 것이다.

profile
데이터 분석 스쿨 블로그 입니다.

0개의 댓글