(1) UNION
(2) UNION 문법
UNION 는 여러 개의 SQL문을 합쳐서 하나의 SQL 문으로 만들어주는 방법이다. 조금 더 구체적으로는 두 개 이상의 테이블을 두 개 이상의 SELECT 문의 결과를 결합하는 데 사용되는 SQL 구문입라고 할 수 있다. 주의할 사항으로는 SELECT 문으로 결합하려는 두 개의 결과물의 열(column) 의 개수가 같아야한다는 것이다.#실습데이터
+----+--------+------------+-----+-----+---------------+-------------------+
| 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을 사용했기에 중복된 값도 모두 결과 집합에 포함을 시켜 '이수현' 행이 두 번 나오게 된 것이다.