데이터베이스

[Oracle] 집합쿼리 ( UNION ALL, UNION, INTERSECT, MINUS)

포포015 2021. 2. 11. 14:15

UNION ALL

- SQL에서 두개의 SELECT 문장을 UNION ALL로 연결하면 각문장이 반환하는 결과가 모두 조회된다.

-두 SELECT절에서 사용하는 컬럼의 데이터형과 수는 일치해야한다.

-SELECT 문이 2개여도 첫번째 SELECT 문에서 사용된 컬럼명으로 조회된다.

1
2
3
4
5
SELECT emp_id, emp_name, gender, age
    From emp03
    UNION ALL
SELECT emp_id2, emp_name, gender, age
    FROM emp08
cs

SELECT 문장이 두개지만 집합연산자로 인해 하나의 문장으로 결과값이 연결되어 나온다

UNION

- UNION ALL과 동일하나 한가지가 다름( 중복된 데이터가 존재할경우 그 데이터 1건만 조회된다)

- 만약 아래와 같이 동일한 컬럼만 조회할경우 중복된 데이터를 제거하지만,다른 컬럼(나이나 성별등)을 명시할경우 중복된 데이터라 간주 하지않고 모두 조회된다

1
2
3
4
5
6
SELECT emp_name
    FROM emp03
    UNION
SELECT emp_name
    FROM emp08
    ORDER BY 1;
cs

 

INTERSECT

-두개의 쿼리 결과를 검사해 공통된 요소에 해당하는 결과를 가져온다( 중복데이터만 추출)

-공통된 요소가 없다면 아무것도 조회되지 않음. (중복된 데이터를 판별하는기준은 집합쿼리 부분이 다동일하다)

1
2
3
4
5
6
SELECT emp_name
    FROM emp03
   INTERSECT 
SELECT emp_name
    FROM emp08
    ORDER BY 1;
cs

 

MINUS

-첫번째 쿼리 결과와 두번째 쿼리 결과를 비교해 첫번쨰 결과에만 있는 데이터만 조회

 (두번째 결과에 첫번째 데이터와 중복된 데이터가 있으면 중복된 데이터는 결과X)

 

1
2
3
4
5
SELECT emp_name
FROM emp03
    MINUS
SELECT emp_name
FROM emp08
cs