프로그래밍/Oracle

[Oracle] 집합 연산자

eunki 2022. 6. 2. 00:37
728x90
  • 서로 다른 테이블의 데이터를 양 옆으로 연결해서 출력하는 것은? 조인 (join)
  • 서로 다른 테이블의 데이터를 위아래로 연결해서 출력하는 것은? 집합 연산자

 

 

집합 연산자

  • union all → 합집합
  • union → 합집합 (중복된 데이터를 제거)
  • intersect → 교집합
  • minus → 차집합

 

 

 

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

  1. 집합 연산자 위쪽에 있는 쿼리문의 컬럼의 개수와 아래쪽에 있는 컬럼의 개수가 서로 동일해야 한다.
    (컬럼명도 가급적 동일하게 맞춰줍니다.)
  2. 집합 연산자 위아래 쿼리문의 컬럼들의 데이터 유형도 서로 같아야 한다.
  3. 집합 연산자 사용 시 order by 절은 맨 아래쪽의 쿼리문에만 사용 가능하다.

 

 

 

 

예제 1. 부서 번호와 부서 번호 별 토탈 월급을 출력한 것과 토탈 월급만 출력한 것을 연결해서 출력

select deptno, sum(sal)
    from emp
    group by deptno
union all
select null as deptno, sum(sal)
    from emp;

 

 

 

예제 2. 부서 번호, 부서 번호 별 토탈 월급을 출력하는데, 아래쪽에 전체 토탈 월급을 출력

select deptno, sum(sal)
    from emp
    group by deptno
union
select null as deptno, sum(sal)
    from emp;

union 은 union all 과는 다르게 중복된 데이터를 제거하고 정렬도 한다.

※ 21c 에서는 union 에서 데이터 정렬 기능을 제거했다.

 

 

 

예제 3. 사원 테이블과 부서 테이블의 공통된 부서 번호가 무엇인가?

select deptno
    from emp
intersect
select deptno
    from dept;

 

 

 

예제 4. 부서 테이블에는 존재하는데 사원 테이블에는 없는 부서 번호는 무엇인가?

select deptno
    from dept
minus
select deptno
    from emp;
728x90