[MariaDB] UNION / EXCEPT / INTERSECT 절

Geehyun(장지현)·2024년 2월 25일
0

MariaDB

목록 보기
9/12
post-thumbnail

UNION / EXCEPT / INERSECT절은 다수의 SELECT문의 결과셋을 특정 조건에 따라 통합하는 문법구조 입니다!

UNION

다수의 테이블 내 자료형이 같은 컬럼들을 합쳐서 조회할 수 있습니다.
각 각 SELECT 문의 결과셋을 더하는 개념으로 합집합 개념입니다.

  • 첫번째 테이블 ∪ 두번째 이후 테이블의 데이터를 조회할 수 있습니다.
  • UNION할 각 테이블은 컬럼 개수와 해당 컬럼의 자료형이 같아야합니다.
  • UNION : 유니온 결과 각 테이블의 중복된 행은 1건만 표시합니다.
    UNOIN ALL : 유니온 결과 각 테이블의 중복된 행도 다 표시합니다.
    UNION / UNION ALL
  • UNION할 각 SELECT문 내에서도 각 각 WHERE절, GROUP BY절, HAVING절 사용 가능하고 유니온 후 결과셋에서도 WHERE절, GROUP BY절, HAVING절, ORDER BY절, LIMIT절 까지 사용 가능합니다.
  • 결과셋은 첫번째 SELECT문의 컬럼명 기준으로 표시됩니다.
    따라서 유니온 후 결과셋에서 WHERE절, GROUP BY절, HAVING절, ORDER BY절을 작성할 때는 첫번째 SELECT문 기준으로 컬럼명을 작성해야합니다.
  • ORDER BY, GROUP BY, WHERE 조건절에서 컬럼명을 명시 하지않고 컬럼의 순서로만 작성할 수도 있습니다. 다만, 되도록 컬럼명을 정확히 명시해주는게 옳습니다.
-- 사용법
# UNION
SELECT 컬럼,,,, FROM 테이블1 [WEHRE 조건절 GROUP BY 컬럼,, HAVING 조건절]
UNION
SELECT 컬럼,,,, FROM 테이블2 [WEHRE 조건절 GROUP BY 컬럼,, HAVING 조건절]
[WEHRE 조건절 
GROUP BY 컬럼,, 
HAVING 조건절
ORDER BY 정렬조건
LIMIT [시작인덱스, ]개수]

# UNION ALL
SELECT 컬럼,,,, FROM 테이블1 [WEHRE 조건절 GROUP BY 컬럼,, HAVING 조건절]
UNION ALL
SELECT 컬럼,,,, FROM 테이블2 [WEHRE 조건절 GROUP BY 컬럼,, HAVING 조건절]
[WEHRE 조건절 
GROUP BY 컬럼,, 
HAVING 조건절
ORDER BY 정렬조건
LIMIT [시작인덱스, ]개수]

-- 사용예시
# UNION
SELECT custid, custnm FROM tbl_customer
UNION
SELECT memberId, NAME FROM tbl_member
ORDER BY custnm            
;
# UNION ALL
SELECT custid, custnm FROM tbl_customer
UNION ALL
SELECT memberId, NAME FROM tbl_member
ORDER BY custnm         
;

EXCEPT

다수의 테이블 내 동일한 자료형을 갖는 컬럼을 기준으로 첫 번째 테이블에서 두번째 이후 테이블의 데이터를 제외한 데이터를 최종 결과셋으로 반환합니다.
첫번째 SELECT문의 결과에서 두번째 이후 SELECT문의 결과를 빼는 차집합 개념 입니다.

  • 첫번째 테이블 - 두번째 이후 테이블의 데이터를 조회할 수 있습니다.
  • 나머지 사용법은 UNION과 동일합니다.
    EXCEPT
-- 사용법
SELECT 컬럼,,,, FROM 테이블1 [WEHRE 조건절 GROUP BY 컬럼,, HAVING 조건절]
EXCEPT
SELECT 컬럼,,,, FROM 테이블2 [WEHRE 조건절 GROUP BY 컬럼,, HAVING 조건절]
[WEHRE 조건절 
GROUP BY 컬럼,, 
HAVING 조건절
ORDER BY 정렬조건
LIMIT [시작인덱스, ]개수]

-- 사용예시
SELECT custid, custnm FROM tbl_customer
EXCEPT
SELECT memberId, NAME FROM tbl_member
ORDER BY custnm            
;

INTERSECT

다수의 테이블 내 동일한 자료형을 갖는 컬럼을 기준으로 첫 번째 테이블에서 두번째 이후 테이블의 데이터 중 중복되는 데이터만 가져와 결과셋으로 반환합니다.
첫번째 SELECT문에서 두번째 이후 SELECT문 결과셋 중 겹치는 것만 가져오는 교집합 개념입니다.

  • 첫번째 테이블 ∩ 두번째 이후 테이블의 데이터를 조회할 수 있습니다.
  • 나머지 사용법은 UNION과 동일합니다.
    INTERSECT
-- 사용법
SELECT 컬럼,,,, FROM 테이블1 [WEHRE 조건절 GROUP BY 컬럼,, HAVING 조건절]
INTERSECT
SELECT 컬럼,,,, FROM 테이블2 [WEHRE 조건절 GROUP BY 컬럼,, HAVING 조건절]
[WEHRE 조건절 
GROUP BY 컬럼,, 
HAVING 조건절
ORDER BY 정렬조건
LIMIT [시작인덱스, ]개수]

-- 사용예시
SELECT custid, custnm FROM tbl_customer
INTERSECT
SELECT memberId, NAME FROM tbl_member
ORDER BY custnm            
;

참고

MariaDB로 따라 하며 배우는 SQL프로그래밍 데이터베이스 기초에서 실무까지 - 나익수, 서연경 지음
위 책을 공부하며 작성하고 있습니다!

profile
개발자를 꿈꾸는 병아리 (블로그 이전 준비중 입니다.)

0개의 댓글