• [SQLD] 집합 연산자

    2025. 2. 24.

    by. hyunji1109

    집합 연산자

    • SELECT 문 결과를 하나의 집합으로 간주, 그 집합에 대한 합집합, 교집합, 차집합 연산
    • SELECT 문과 SELECT 문 사이에 집합 연산자 정의
    • 두 집합의 컬럼이 동일하게 구성되어야 함(각 컬럼의 데이터 타입과 순서 일치 필요)
    • 전체 집합의 데이터 타입과 컬럼명은 첫번째 집합에 의해 결정됨


    합집합

    • 두 집합의 총 합(전체) 출력
    • UNION 과 UNION ALL 사용 가능

     

    1) UNION

    • 중복된 데이터는 한 번만 출력
    • 중복된 데이터를 제거하기 위해 내부적으로 정렬 수행
    • 중복된 데이터가 없을 경우는 UNION 사용 대신 UNION ALL 사용(불필요한 정렬 발생할 수 있음

     

    2) UNION ALL

    • 중복된 데이터도 전체 출력

     

    👉 10번 부서 소속이 아닌 직원 정보와 20번 소속 정보가 각각 분리되어있다 가정할 때 두 집합의 합집합

    UNION 결과)

     

     

    UNION ALL 결과)

     

     

    교집합

    • 두 집합 사이의 INTERSECT
    • 두 집합의 교집합(공통으로 있는 행)출력

     

    👉 10번 부서 정보와 20번 부서 정보가 각각 분리되어있다 가정할 때 두집합의 교집합

    👉 부서 번호가 10번이 아닌 집합은 20, 30번 이고 20번이 아닌 부서원은 10, 30번 부서원이므로 두 집합의 교집합인 30번 부서원 정보만 출력됨


    차집합

    • 두 집합 사이에 MINUS 전달
    • 두 집합의 차집합(한 쪽 집합에만 존재하는 행) 출력
    • A-B와 B-A는 다르므로 집합의 순서 주의

    👉 10번이 아닌 부서 정보와 20번 부서 정보가 각각 분리되어있다 가정할 때 두 집합의 차집합

    👉 부서번호가 10이 아닌 20, 30번 집합에서 20번 집합을 빼면 30번 부서원 집합만 출력됨


    집합 연산자 사용 시 주의사항

    • 두 집합의 컬럼 수 일치
    • 두 집합의 컬럼 순서 일치
    • 두 집합의 각 컬럼의 데이터 타입 일치
    • 각 컬럼의 사이즈는 달라도 됨

    👉 두 집합의 컬럼의 데이터타입이 다른 경우 에러 발생

    👉 아래와 같은 EMP_T1 테이블이 있다고 가정, EMP와의 합집합 출력

    👉 EMP 테이블의 각 컬럼별 데이터 타입

     

    👉 EMP_T1 테이블의 각 컬럼별 데이터 타입

     

    에러)

    👉 에러 발생(EMPNO컬럼 데이터 타입 서로 다름)

     

    해결)

    👉 두 집합의 EMPNO 컬럼의 데이터 타입이 다르므로 한 쪽으로 맞춰줄 필요 있음

     

    👉 집합연산자와 ORDER BY의 사용

    💥 개별 쿼리에 ORDER BY절 전달 불가

     

    해결)

    💥 집합연산자 절체 결과에 ORDER BY절 전달 가능

     

     

     

    출처: https://youtu.be/hLvv0GN0rT8?si=xmtqP5FzFpgG72Ns

    'CS > SQL' 카테고리의 다른 글

    [SQLD] 윈도우 함수  (0) 2025.02.26
    [SQLD] 그룹함수  (0) 2025.02.25
    [SQLD] 서브쿼리  (0) 2025.02.24
    [SQLD] 표준조인  (0) 2025.02.23
    [SQLD] 조인  (0) 2025.02.23

    댓글