SQL 첫걸음 - 7장 복수의 테이블 다루기(1)

강경훈·2021년 1월 4일
0
post-thumbnail

31강 집한 연산

UNION

UNION을 이용하여 복수의 테이블에 대해 합집합을 구할 수 있다.

1.SQL과 집합

  • 집합의 벤 다이어그램의 원 하나가 하나의 테이블로 생각 할 수 있다.
  • 벤 다이어그램의 원소 하나는 테이블의 행 하나에 해당한다.
  • SELECT 명령의 결과를 하나의 집합으로 생각하면 된다.

2. UNION (합집합)

  • 합집합은 각 집합의 공통된 부분을 제거해 중복을 없앤다.
  • 따라서 UNION을 사용하여 중복을 제거 할 수 있다.
  • 열의 갯수와 자료형이 서로 같아야 UNION을 사용할 수 있다.

예제1

SELECT * FROM sample71_a;
+---+
| a |
+---+
| 1 |
| 2 |
| 3 |
+---+
SELECT * FROM sample71_b;
+----+
| b  |
+----+
| 2  |
| 10 |
| 11 |
+----+
SELECT * FROM sample71_a
UNION
SELECT * FROM sample71_b;
+----+
| a  |
+----+
| 1  |
| 2  |
| 3  |
| 10 |
| 11 |
+----+

-> 두 SELECT 결과가 합쳐진 뒤 중복인 2가 제거 된 결과를 볼 수 있다.

예제2

SELECT * FROM sample31;
+------+-----+-------------------+
| name | age | address           |
+------+-----+-------------------+
| A씨  | 36  | 대구광역시 중구       |
| B씨  | 18  | 부산광역시 연제구     |
| C씨  | 25  | 서울특별시 중구      |
+------+-----+-------------------+
SELECT * FROM sample71_a
UNION
SELECT * FROM sample71_b
UNION
SELECT * FROM sample31;
1222, 'The used SELECT statements have a different number of columns'

-> 열의 갯수와 자료형이 맞지 않아 에러 발생

3. ORDER BY

  • UNION으로 SELECT 명령을 연결하는 경우에는 가장 마지막 SELECT 명령에만 ORDER BY 적용이 가능하다.
  • AS을 이용하여 SELECT로 지정한 열의 이름을 일치시키면 UNION 결과에 ORDER BY을 적용 할 수 있다.

예제

SELECT b AS c FROM sample71_b
UNION
SELECT a AS c FROM sample71_a ORDER BY c;
+----+
| c  |
+----+
| 1  |
| 2  |
| 3  |
| 10 |
| 11 |
+----+

4. UNION ALL

  • 중복 제거를 안 하고 복수의 테이블을 합쳐 준다.
  • 중복을 고려하지 않기 때문에 중복이 없을 경우 그냥 UNION 대신 사용하면 성능이 증가한다.

예제

SELECT * FROM sample71_a
UNION ALL
SELECT * FROM sample71_b;
+----+
| a  |
+----+
| 1  |
| 2  |
| 3  |
| 2  |
| 10 |
| 11 |
+----+

-> 중복이 제거 되지 않아 2가 두 번 있는 것을 볼 수있다.

5. 교집합, 차집합

  • mysql에서는 불가능
  • 교집합 : INTERSECT
  • 차집합 : EXCEPT
profile
방랑하는 개발자

0개의 댓글