본문 바로가기

데이터베이스/SQLD

[SQLD] 집합연산자

728x90

SQL 집합 연산자: UNION, UNION ALL, INTERSECT, MINUS/EXCEPT

SQL에서는 집합 연산자를 사용하여 두 개 이상의 테이블에서 데이터를 결합하거나 비교할 수 있습니다. 이 연산자들은 각각 합집합, 교집합, 차집합의 개념을 기반으로 데이터를 처리합니다.

 

 

UNION ALL

    • 특징: 두 테이블의 중복된 레코드를 포함하여 결합합니다.
    • 장점: 중복된 데이터도 모두 유지하기 때문에 성능이 UNION보다 좋습니다. 데이터를 단순히 합치는 용도로 사용됩니다.
    • 예시: A : {1, 2, 3, 4}, B : {3, 4, 5, 6}
      • A UNION ALL B => {1, 2, 3, 3, 4, 4, 5, 6}

UNION

    • 특징: 중복된 레코드는 한 번만 포함하여 결합합니다.
    • 단점: 중복 제거를 위해 추가적인 정렬 작업이 필요하므로, UNION ALL에 비해 성능이 떨어질 수 있습니다.
    • 예시: A : {1, 2, 3, 4}, B : {3, 4, 5, 6}
      • A UNION B => {1, 2, 3, 4, 5, 6}

 

 

INTERSECT

INTERSECT는 교집합 연산을 수행하여 두 테이블에 모두 존재하는 중복 레코드만 포함하는 연산자입니다.

특징

  • 두 테이블에 공통적으로 존재하는 레코드만 반환합니다.
  • 중복된 레코드가 있으면, 그 중복된 횟수만큼 결과에 포함되지 않고, 단 한 번만 반환됩니다.

예시:

A : {1, 2, 3, 4}, B : {3, 4, 5, 6}

  • A INTERSECT B => {3, 4}

 

 

MINUS / EXCEPT

MINUS(Oracle) 또는 EXCEPT(SQL Server, PostgreSQL)는 차집합 연산을 수행하여 왼쪽 테이블에서 오른쪽 테이블의 레코드를 제외한 나머지 레코드만 포함하는 연산자입니다.

특징

  • 두 테이블의 공통 레코드를 제외한 나머지 레코드를 반환합니다.
  • SQL 표준에서는 EXCEPT을 사용하며, Oracle에서는 MINUS를 사용합니다. 두 연산자는 동일한 결과를 반환합니다.

예시

A : {1, 2, 3, 4}, B : {3, 4, 5, 6}

  • A MINUS B 또는 A EXCEPT B => {1, 2}

 

 

 

성능 고려사항

  • UNION ALL: 중복 제거 작업을 하지 않으므로 가장 빠릅니다. 대용량 데이터의 단순 결합에 적합합니다.
  • UNION: 중복 제거 작업이 추가되므로, 성능이 떨어질 수 있습니다. 필요한 경우에만 사용해야 합니다.
  • INTERSECT와 MINUS/EXCEPT: 연산의 복잡성에 따라 성능에 영향을 미칠 수 있습니다. 사용 시 데이터베이스의 최적화가 중요합니다.
728x90

'데이터베이스 > SQLD' 카테고리의 다른 글

[SQLD] 서브 쿼리  (0) 2024.08.14
[SQLD] NULL 속성  (0) 2024.08.13
[SQLD] 트랜잭션  (1) 2024.08.02
[SQLD] 정규화  (1) 2024.07.30
[SQLD] Entity와 속성  (0) 2024.07.26