[MySql] 쿼리 결과를 합치는 union vs union all의 차이
쿼리문 합치는 방법 (UNION, UNION ALL)
두 개 이상의 SQL 쿼리문을 합치는 방법에 대해 알아보자.
부득이하게 여러개에 쿼리문을 사용하여 하나에 데이터로 출력해야되는 경우가 존재한다. 이럴 때 사용하는 방법이 바로 UNION 연산자이다.
예제를 통해 빠르게 이해해보자. 아래는 예제 테이블 2개이다.
예제 테이블 1
ID |
NAME |
1 |
김서방 |
2 |
조서방 |
예제 테이블 2
ID |
NAME |
2 |
조서방 |
3 |
박서방 |
예제 테이블 각각에 데이터가 들어있다. 예제 테이블들에 데이터를 추출해보자.
SELECT ID, NAME FROM TABLE1 ;
SELECT ID, NAME FROM TABLE2 ;
그러면 위에 예제 테이블 데이터대로 ID와 NAME값을 얻을 수 있다. 그럼 하나의 쿼리로 만들기 위해 UNION ALL을 사용해보자.
SELECT ID, NAME FROM TABLE1 ;
UNION ALL
SELECT ID, NAME FROM TABLE2 ;
UNION ALL 연산자 결과
ID |
NAME |
1 |
김서방 |
2 |
조서방 |
2 | 조서방 |
3 | 박서방 |
그러면 위와 같이 출력되는 것을 확인할 수 있다. UNION ALL 연산자는 각각에 쿼리에서 나온 데이터를 하나로 합쳐주는 역할을 하고 있으며, 중복되는 값도 그대로 출력이 된다. 그럼 다른 연산자인 UNION을 사용해보자.
SELECT ID, NAME FROM TABLE1 ;
UNION
SELECT ID, NAME FROM TABLE2 ;
UNION 연산자 결과
ID |
NAME |
1 |
김서방 |
2 | 조서방 |
3 | 박서방 |
그러면 UNION ALL 연산자와 확연히 차이나는 부분이 있을 것이다. 바로 중복되는 부분은 하나에 로우로만 출력이 되는 것이다.
UNION 연산자와 UNION ALL 연산자는 두 개이상에 SQL 쿼리를 하나로 만들어주지만 차이나는 부분은 중복여부이다. 또한 UNION 연산자를 사용할 시에는 각 쿼리에 컬럼 갯수 및 명칭을 맞춰줘야 되며 그렇지 않으면 오류가 발생하는 것을 볼 수 있다.
출처: https://sesok808.tistory.com/510 [살아가는 그 이유:티스토리]