336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
SQL UNION / UNION ALL
SQL UNION / UNION ALL
![SQL UNION / UNION ALL](https://t1.daumcdn.net/cfile/tistory/992EF63359E68C422C)
SELECT 명령문과 조합할 수 있는 집합 연산자로 UNION, UNION ALL 연산자가 있다.
- UNION
- UNION ALL
집합 연산자는 SELECT 문의 기능을 확장한 것이며 합집합과 동일하다. UNION 연산자는 전체 명령문의 결과가 하나의 테이블을 가지도록
2개의 테이블을 하나로 조합한다.
1 UNION
첫번째 학생 테이블
mysql> select * from student;
+----+------+-----------+-------+--------+
| no | sno | name | jumsu | course |
+----+------+-----------+-------+--------+
| 1 | 100 | 홍길동 | 100 | 수학 |
| 2 | 101 | 김철수 | 90 | 국어 |
| 3 | 102 | 김순이 | 30 | 영어 |
| 4 | 103 | 김말동 | 45 | 국어 |
| 5 | 104 | 정민철 | 80 | 역사 |
| 6 | 105 | 이만수 | 70 | 과학 |
| 7 | 106 | 안철수 | 90 | 영어 |
| 8 | 107 | 김재동 | 100 | 역사 |
| 9 | 108 | 이미자 | 95 | 수학 |
| 10 | 109 | 김기철 | 100 | |
+----+------+-----------+-------+--------+
10 rows in set (0.00 sec)
두번째 학생 테이블
mysql> select * from student2;
+----+------+-----------+-------+--------+
| no | sno | name | jumsu | course |
+----+------+-----------+-------+--------+
| 11 | 200 | 김만수 | 55 | 영어 |
| 12 | 201 | 김옥경 | 95 | 수학 |
| 13 | 202 | 김수겨 | 40 | 영어 |
| 14 | 203 | 김말동 | 45 | 국어 |
| 15 | 204 | 민영탁 | 80 | 역사 |
| 16 | 205 | 이경철 | 70 | 과학 |
| 17 | 206 | 김영진 | 90 | 영어 |
| 18 | 207 | 탁재훈 | 50 | 역사 |
| 19 | 208 | 안병훈 | 95 | 수학 |
| 20 | 209 | 진우형 | 100 | 국어 |
| 21 | 100 | 홍길동 | 100 | 수학 |
+----+------+-----------+-------+--------+
11 rows in set (0.00 sec)
두 학생 테이블의 UNION 합집합 조합 출력 명령문이다
mysql> select sno,name,jumsu,course from student union select sno,name,jumsu,course from student2;
+------+-----------+-------+--------+
| sno | name | jumsu | course |
+------+-----------+-------+--------+
| 100 | 홍길동 | 100 | 수학 |
| 101 | 김철수 | 90 | 국어 |
| 102 | 김순이 | 30 | 영어 |
| 103 | 김말동 | 45 | 국어 |
| 104 | 정민철 | 80 | 역사 |
| 105 | 이만수 | 70 | 과학 |
| 106 | 안철수 | 90 | 영어 |
| 107 | 김재동 | 100 | 역사 |
| 108 | 이미자 | 95 | 수학 |
| 109 | 김기철 | 100 | |
| 200 | 김만수 | 55 | 영어 |
| 201 | 김옥경 | 95 | 수학 |
| 202 | 김수겨 | 40 | 영어 |
| 203 | 김말동 | 45 | 국어 |
| 204 | 민영탁 | 80 | 역사 |
| 205 | 이경철 | 70 | 과학 |
| 206 | 김영진 | 90 | 영어 |
| 207 | 탁재훈 | 50 | 역사 |
| 208 | 안병훈 | 95 | 수학 |
| 209 | 진우형 | 100 | 국어 |
+------+-----------+-------+--------+
20 rows in set (0.00 sec)
☞ UNION 연산자의 특별한 속성은 모든 중복된 행이 최종 결과에서 자동적으로 제거된다.
(student2 테이블의 홍길동 학생의 중복제거됨)
UNION 연산자의 사용규칙
- 관련된 모든 선택 블록의 SELECT 절은 수식의 수(열의 수)를 동일하게 가져야 한다
- 최종 결과를 만들어 내는 수식은 서로 비교할 수 있는 자료형이여야 한다.
- ORDER BY 절은 마지막 선택 블록에서만 지정할 수 있다. 순서화는 모든 중간 결과가 결합된 후에 전체 최종 결과에서 수행된다.
- SELECT 절은 DISTINCT를 가질 수 없다. SQL은 UNION을 사용했을때 자동적으로 중복을 제거한다.
2 UNION ALL
위 결과에서 보듯이 UNION이 사용되면 최종 결과로부터 중복된 행은 자동적으로 제거되지만 이러한 연산자의 변형인 ALL 을 사용하게 되면
이를 모두 출력되게 할 수 있다.
mysql> select sno,name,jumsu,course from student union all select sno,name,jumsu,course from student2;
+------+-----------+-------+--------+
| sno | name | jumsu | course |
+------+-----------+-------+--------+
| 100 | 홍길동 | 100 | 수학 |
| 101 | 김철수 | 90 | 국어 |
| 102 | 김순이 | 30 | 영어 |
| 103 | 김말동 | 45 | 국어 |
| 104 | 정민철 | 80 | 역사 |
| 105 | 이만수 | 70 | 과학 |
| 106 | 안철수 | 90 | 영어 |
| 107 | 김재동 | 100 | 역사 |
| 108 | 이미자 | 95 | 수학 |
| 109 | 김기철 | 100 | |
| 200 | 김만수 | 55 | 영어 |
| 201 | 김옥경 | 95 | 수학 |
| 202 | 김수겨 | 40 | 영어 |
| 203 | 김말동 | 45 | 국어 |
| 204 | 민영탁 | 80 | 역사 |
| 205 | 이경철 | 70 | 과학 |
| 206 | 김영진 | 90 | 영어 |
| 207 | 탁재훈 | 50 | 역사 |
| 208 | 안병훈 | 95 | 수학 |
| 209 | 진우형 | 100 | 국어 |
| 100 | 홍길동 | 100 | 수학 |
+------+-----------+-------+--------+
21 rows in set (0.00 sec)
위 출력 결과물에서 보듯이 student 테이블과 student2 테이블의 중복된 홍길동 학생이 모두 출력이 되었다.
이글이 도움이 되셨다면 아래에 로그인이 필요없는 공감 버튼을 클릭해주세요 ^^