개발자 항해

집합 연산자 본문

DB/Oracle

집합 연산자

리치Y 2022. 9. 8. 11:16

1. union

 

쿼리구문 마다 select 해온 값을 중복 제외하고 모두 출력함

 

 

 

- 사용시 유의점

 

1) select 절이 컬럼 갯수가 맞아야한다.

emp_id, dept_id가 유형이 같아야하고 last_name과 d_name이 유형이 같야야한다.

왜냐하면 같은 컬럼에 나오기때문이다.

 

 

select emp_id, last_name

from   emp

where d_id=50

union

select dept_id, d_name

from   dept;

 

2) 이어서 쓸수 있고 이럴때는 우선 순위가 동등하다.

 

select emp_id, last_name

from   emp

where d_id=50

union

select dept_id, d_name

from   dept

minus

select dept_id, d_name

from   dept

union all 

select dept_id, d_name

from   dept;

 

3) 괄호로 묶으면 우선순위를 변경할수 있다. () 안을 먼저 연산

 

select emp_id, last_name

from   emp

where d_id=50

union

select dept_id, d_name

from   dept

minus

(select dept_id, d_name

from   dept

union all 

select dept_id, d_name

from   dept);

 

 

 

 

5) 가장 마지막에 order by 절 적음

 

 

select emp_id, last_name

from   emp

where d_id=50

union

select dept_id, d_name

from   dept

minus

(select dept_id, d_name

from   dept

union all 

select dept_id, d_name

from   dept)

order by .... 

 

5) 이런 연산의 경우 제목은 어떻게 되는가?

 

==> 첫번째 쿼리 구문의 컬럼명(emp_id, last_name)이나 alias 명이 출력된다.

        정렬도 첫번째 컬럼기준.(emp_id나 last_name)

 

select emp_id, last_name

from   emp

where d_id=50

union

select dept_id, d_name

from   dept;

 

 

 

 

 

 

 

 

2. union all

 

 

중복값 포함하고 모두 출력한다.

(자동정렬 안됨)

 

 

 

3. intersect

 

 

양쪽 구문에 공통된 데이터를 출력

( 양쪽에 같은 데이터가 있는데 한번만 출력하므로 중복된 데이터를 제거하고 한번만 출력한다고 볼수있다. 

  그래서 자동정렬기능 포함)

 

 

 

4.  minus

 

A쿼리 값에  B쿼리 값을 제외한 값을 출력시키겠다.

 

 

※ intersect, minus 비교

 

 

 

 

 

 

 

'DB > Oracle' 카테고리의 다른 글

EXISTS 및 NOT EXISTS 연산자 사용  (0) 2022.09.13
Scalar Subquery  (0) 2022.09.08
순위 함수  (0) 2022.09.02
Top-N 관련 예제 문제  (0) 2022.09.02
Default DB에 접속, Default DB바꿔서 접속(리눅스)  (0) 2022.09.02