티스토리 뷰

DEVELOPE/MYSQL&MARIADB

SQL UNION / UNION ALL

소찾나 2017. 10. 18. 08:48
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

SQL UNION / UNION ALL

SQL UNION / UNION ALL

SQL UNION / UNION ALL



SELECT 명령문과 조합할 수 있는 집합 연산자로 UNION, UNION ALL 연산자가 있다. 


  1. UNION
  2. 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 연산자의 사용규칙
  1. 관련된 모든  선택 블록의 SELECT 절은 수식의 수(열의 수)를 동일하게 가져야 한다
  2.  최종 결과를 만들어 내는 수식은 서로 비교할 수 있는 자료형이여야 한다.
  3.  ORDER BY 절은 마지막 선택 블록에서만 지정할 수 있다. 순서화는 모든 중간 결과가 결합된 후에 전체 최종 결과에서 수행된다.
  4.  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 테이블의 중복된 홍길동 학생이 모두 출력이 되었다.


이글이 도움이 되셨다면 아래에 로그인이 필요없는 공감 버튼을 클릭해주세요 ^^


'DEVELOPE > MYSQL&MARIADB' 카테고리의 다른 글

SQL JOIN 조인 메뉴얼  (0) 2017.10.18
SQL SUBQUERY 부속질의어  (0) 2017.10.18
SQL 명령어 ORDER BY 정렬  (0) 2017.10.17
SQL GROUP BY / HAVING  (0) 2017.10.17
SQL SELECT 조회, 정렬  (0) 2017.10.16
댓글