그곰의 생활

[Oracle] Set Operator(여러 select를 한번에 출력) 본문

Server-side/SQL

[Oracle] Set Operator(여러 select를 한번에 출력)

그곰 2011. 6. 29. 17:06

Set Operator

UNION
    - 합집합을 구한다.
    - 중복제거
    - Sort된 상태로 나온다.

UNION ALL
    - 합집합을 구한다.
    - 중복된 값도 출력한다.
    - Sort된 상태가 아니다.

INTERSECT
    - 교집합을 구한다.

MINUS
    - 차집합을 구한다.

* Set Operators를 사용하면 각 select문이 따로 실행된 후에 마지막에 UNION ALL이 실행된다.
따라서 join과는 다르다.



SELECT last_name NAME
FROM s_emp
UNION
SELECT name FROM s_customer;

해설 : 회사의 사원이름과 고객이름을 출력한다.

SELECT id, last_name
FROM s_emp
WHERE id IN ( SELECT id
                      FROM s_emp
                      INTERSECT
                      SELECT sales_rep_id
                      FROM s_customer);

해설 : 고객을 담당하고 있는 사원의 사번과 이름을 출력한다.

SELECT id, last_name
FROM s_emp
WHERE id IN ( SELECT id
                      FROM s_emp
                      MINUS
                      SELECT sales_rep_id
                      FROM s_customer);

해설 : 고객을 담당하고 있지 않은 사원의 사번과 이름을 출력


* Set Operators를 사용할 때에는 대응되는 data의 개수가 같고 type이 유사해야 한다.

SELECT id
FROM s_emp
UNION
SELECT name
FROM s_customer

위 query문은 error가 발생한다.

 

 

Comments