[Oracle] 집합 연산

Oracle / / 2019. 6. 10. 16:38

1. SQL 집합 연산

1.1 UNION으로 합집합 구하기

집합 연산에서는 만약 ADDRESS 테이블과 ADDRESS2 테이블의 합집합을 구할 때는 UNION이라는 합이라는 연산자를 사용합니다.

SELECT *
FROM   ADDRESS
UNION
SELECT *
FROM ADDRESS2;

문자 그대로 2개의 테이블을 하나의 테이블로 합친 결과가 나옵니다. 여기서 기억해야 할 점 하나는 만약 ADDRESS 테이블에는 6개의 레코드가 있고, ADDRESS2 테이블에는 9개의 레코드가 있다고해서 2개를 합친 결과가 15개가 나오지 않을 수 있다는 것 입니다. 바로 중복해서 존재하는 레코드를 제거합니다. 이는 INTERSECT와 EXCEPT 등에서도 같습니다. 만약 중복을 제거하고 싶지 않다면 'UNION ALL'처럼 ALL 옵션을 붙이면 됩니다.

1.2 INTERSECT로 교집합 구하기

이어서 AND에 해당하는 교집합을 구해보겠습니다. 교집합을 구할 때 사용하는 연산자는 INTERSECT로 '교차'라는 의미입니다. 

SELECT *
FROM   ADDRESS
INTERSECT
SELECT *
FROM   ADDRESS2

1.3 EXCEPT로 차집합 구하기

EXCEPT 연산자는  '제외'라는 의미로 차집합 연산을 수행합니다. 이때 주의할 점으로는 어떤 테이블을 먼저 적을지에 따라 결과가 다르다는 것 입니다. 아래 SQL 구문의 경우 ADDRESS - ADDRESS2 가 되고, 순서를 거꾸로 적으면 ADDRESS2 - ADDRESS의 결과를 얻을 것 입니다.

SELECT *
FROM   ADDRESS
EXCEPT
SELECT *
FROM   ADDRESS2

 

'Oracle' 카테고리의 다른 글

[Oracle] 집계와 조건 분기  (0) 2019.06.10
[Oracle] 윈도우 함수  (0) 2019.06.10
[Oracle] SQL 구문의 성능을 결정하는 실행 계획  (0) 2019.06.10
[Oracle] DBMS와 실행 계획  (0) 2019.06.04
[Oracle] DBMS 구조  (0) 2019.06.04
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기