: 여러 개의 SQL문을 합쳐서 하나의 SQL 문으로 만들어주는 방법
(❗주의❗: 컬럼의 수가 같아야 함)
SELECT COL1,COL2,..FROM 테이블명1 UNION|UNION ALL SELECT FROM COL1,COL2,...FROM 테이블명2;
mysql> SELECT * FROM TEST1;
+------+
| NO |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM TEST2;
+------+
| NO |
+------+
| 5 |
| 6 |
| 3 |
+------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM TEST1 UNION ALL SELECT * FROM TEST2;
+------+
| NO |
+------+
| 1 |
| 2 |
| 3 |
| 5 |
| 6 |
| 3 |
+------+
6 rows in set (0.00 sec)
mysql> SELECT * FROM TEST1 UNION SELECT * FROM TEST2;
+------+
| NO |
+------+
| 1 |
| 2 |
| 3 |
| 5 |
| 6 |
+------+
5 rows in set (0.00 sec)
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)
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)
- 가수가 직업인 연예인의 이름, 직업을 검색하는 쿼리와, 1980년대 태어난 연예인의 이름, 생년월일, 나이를 검색하는 쿼리를 UNION으로 실행
✔️가져오는 컬럼과 상관없이 각 테이블에서 가져오는 컬럼의 수가 달라서 에러 발생
mysql> SELECT NAME, SEX FROM CELEB WHERE SEX ='F'
-> UNION
-> SELECT NAME, AGE FROM CELEB WHERE AGE>30;
+--------+------+
| NAME | SEX |
+--------+------+
| 아이유 | F |
| 이미주 | F |
| 이수현 | F |
| 강동원 | 41 |
| 유재석 | 50 |
| 차승원 | 48 |
+--------+------+
6 rows in set (0.00 sec)
- 각 테이블에서 다 다른 컬럼을 가져오는 경우 (이름,성별 + 나이,소속사)
역시 처음 테이블 컬럼 명만 출력된다.
mysql> SELECT NAME, SEX FROM CELEB WHERE SEX ='F'
-> UNION
-> SELECT AGE, AGENCY FROM CELEB WHERE AGE >30;
+--------+----------------+
| NAME | SEX |
+--------+----------------+
| 아이유 | F |
| 이미주 | F |
| 이수현 | F |
| 41 | YG엔터테이먼트 |
| 50 | 안테나 |
| 48 | YG엔터테이먼트 |
+--------+----------------+
6 rows in set (0.00 sec)
mysql> select name, job_title from celeb where job_title like '%가수%'
-> union
-> select name, job_title from celeb where job_title like '%탤런트%';
+--------+-----------------+
| name | job_title |
+--------+-----------------+
| 아이유 | 가수,탤런트 |
| 이미주 | 가수 |
| 이수현 | 가수 |
| 송강 | 탤런트 |
| 강동원 | 영화배우,탤런트 |
+--------+-----------------+