본 포스트는 UNION과 UNION ALL의 차이에 대해 공부한 내용을 정리한 것입니다.
두 테이블을 합친다고 하면 일반적으로 JOIN을 떠올립니다.
물론 JOIN이 굉장히 자주 쓰이는 SQL 명령어는 맞습니다.
그렇지만 JOIN 계열은 두 테이블을 가로로 붙이는 것 밖에 못하잖아요?
그럼 두 테이블을 세로로(위아래로) 붙이는 명령어도 있지 않을까요?
그렇습니다!
UNION과 UNION ALL이 바로 두 테이블을 세로로(위아래로) 붙이는 역할을 하는 명령어입니다!
자 이제 그 차이에 대해 한번 알아보도록 해요~
UNION
- 기능
- table1 아래에 table2를 붙여 줌 (단 두 테이블이 가진 컬럼 목록이 같아야 함)
- 결과 테이블에 중복 행이 있다면 하나만 남기고 중복 제거
- 용도
- 중복 행을 제거해야 할 때
- 두 테이블을 합쳤을 때 중복 행이 존재하는지 알 수 없을 때
- 예시
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2;
UNION ALL
- 기능
- table1 아래에 table2를 붙여 줌 (단 두 테이블이 가진 컬럼 목록이 같아야 함)
- 결과 테이블에 중복이 있더라도 그대로 반환
- 용도
- 중복 행을 그대로 유지해야 할 때
- 두 테이블을 합쳤을 때 중복 행이 존재하지 않는다고 확신할 수 있을 때
- 성능이 중요한 경우 (UNION은 중복을 제거하는 작업을 추가로 수행해야 하므로 UNION ALL이 더 성능이 좋음)
- 예시
SELECT column1, column2 FROM table1
UNION ALL
SELECT column1, column2 FROM table2;
요약
- UNION: "두 테이블을 위아래로 합치되, 중복은 제거해줘."
- UNION ALL: "두 테이블을 있는 그대로 위아래로 합쳐줘. 중복이 있어도 괜찮아."
'Study > SQL' 카테고리의 다른 글
[MySQL] SUBSTR 함수에 대하여 (0) | 2024.11.05 |
---|---|
[MySQL] 세션 변수 (@) (0) | 2024.10.23 |
[MySQL] CASE문 (CASE WHEN THEN END) (0) | 2024.10.10 |
[MySQL] IFNULL과 NULLIF의 차이 (0) | 2024.09.02 |