230322 DB_ SET(집합)

Myung A Lee·2023년 3월 22일
0

DB

목록 보기
8/15
post-thumbnail

SET (집합)

  • 다수의 테이블을 이용하여 집합 연산을 수행할 수 있다.
  • 합집합(UNION, UNIONALL), 교집합(INTERSECT), 차집합(NOT IN) 이 존재한다.
  • UNION 은 중복을 포함하지 않는 결과를 반환하지만 중복 제거시 시간이 오래걸려 성능저하가 발생한다.
  • [TABLE|QUERY1][UNION|UNION ALL|INTERSECT] [TABLE|QUERY2]

1. UNION

  • 중복을 제거한 합집합
  • 동일한 컬럼이 한 개 이상은 있어야 한다.
  • select deptno from emp
    union
    select deptno from dept;
  • union을 통해서 full outer join의 결과를 얻을 수 있다.
    select e.deptno, e.ename, d.deptname from emp e left outer join dept d on e.deptno = d.deptno
    union
    select d.deptno, e.ename, d.deptname from emp e right outer join dept d on e.deptno = d.deptno;

2. UNION ALL

  • 중복을 제거하지 않은 합집합
  • 동일한 컬럼이 한 개 이상은 있어야 한다.
    select deptno from emp
    union all
    select deptno from dept order by deptno;
  • union의 중복 제거 대신 'distinct' 키워드 사용
    select distinct u.deptno
    from
    (select deptno from emp
    union all
    select deptno from dept order by deptno) u;

3. INTERSECT

  • 두 쿼리 사이에 중복 된 내용만 가져온다.
    select deptno from emp
    intersect
    select deptno from dept;

4. MINUS (NOT IN)

  • select distinct deptno from emp; -- 1,2,4,6
    select deptno from dept; -- 1,2,3,4,5

  • emp - dept
    select deptno from emp where deptno not in(select deptno from dept);

  • dept - emp
    select deptno from dept where deptno not in (select deptno from emp);

  • emp와 dept를 합집합 한 내용을 emp와 교집합
    -- 1) emp와 dept를 합집합
    (select deptno from emp
    union all
    select deptno from dept)
    intersect
    select deptno from emp;

0개의 댓글