본문 바로가기
Oracle/View

데이터 베이스_ 오라클 VIEW [view 종류, 관리] Union, Union all 시큐어 코딩

by Super Santj 2019. 7. 2.

집합 연산자(Union, Union all, minus) -> 시큐어 코딩

                서로다른 두개의 SQL 문장의 실행 결과를 하나로 합쳐서 보여준다.

문제_

emp테이블에서 업무가 MANAGER 인 사원인 사번, 이름을 출력하시오.

해설_

select empno,ename from emp

where job='MANAGER';    --> SQL문장 첫번째

     EMPNO ENAME
---------- ----------
      7566 JONES
      7698 BLAKE
      7782 CLARK

ed  문 안에 이렇게 서로 다른 조건을 주게되었을때 두개를 합치는 방법이 곧 union 기본 개념이다

select empno,ename from emp
where job='MANAGER'
                            <-- 여기에 union 삽입하면 완성 두개의 조건이 나온다 즉 서로다른 결과를 합쳐서 보여주는 역할
select empno,ename from emp
where ename like '%A%'

아래와 같다

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select empno,ename from emp
  2  where job='MANAGER'
  3  union
  4  select empno,ename from emp
  5* where ename like '%A%'
SQL> /

     EMPNO ENAME
---------- ----------
      7499 ALLEN
      7521 WARD
      7566 JONES
      7654 MARTIN
      7698 BLAKE
      7782 CLARK
      7876 ADAMS
      7900 JAMES

추가 내용_

union 의 반대 즉 차집합은 minus 이다 정 반대되는 결과가 나온다. 제외한 결과값을 출력

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select empno,ename from emp
  2  where job='MANAGER'
  3  minus         ---------------------->  차집합(A 범위 - B 범위)
  4  select empno,ename from emp         -------------->  해당되는 SQL 구문만 출력
  5* where ename like '%A%'
SQL> /

     EMPNO ENAME
---------- ----------
      7566 JONES

이렇게 나온다.

그렇다면 union 과 union all 의 차이는 무엇일까

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select empno,ename from emp
  2  where job='MANAGER'
  3  union all
  4  select empno,ename from emp
  5* where ename like '%A%'
SQL> /

     EMPNO ENAME    => union all -> 합집합인데 둘다 있는 그대로를 다 보여준다. 순서가 뒤섞이지않음
---------- ----------
      7566 JONES
      7698 BLAKE
      7782 CLARK
      7499 ALLEN
      7521 WARD
      7654 MARTIN
      7698 BLAKE
      7782 CLARK
      7876 ADAMS
      7900 JAMES

10 개의 행이 선택되었습니다.

ㄴ Union all을 실행한 결과.

추가 실행 결과.

     EMPNO JOB
---------- ----------
      7566 MANAGER
      7698 MANAGER
      7782 MANAGER
      7499 ALLEN
      7876 ADAMS

** 중요 **

집합 연산자의 주의할점

1. 서로 다른 필드를 사용해도 상관없다. 필드명이 달라도 상관없다.

2. 합쳐지는 필드의 자료형은 반드시 같아야 한다.

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select empno,sal from emp
  2  where job='MANAGER'
  3  union all
  4  select empno,ename from emp
  5* where ename like 'A%'
SQL> /
select empno,sal from emp
             *
1행에 오류:
ORA-01790: 대응하는 식과 같은 데이터 유형이어야 합니다

sal 는 숫자형이기때문에 ename과 서로 다른 자료형으로 출력이 되지 않는다.

3. 합쳐지는 필드의 갯수는 서로 같아야 한다.

** 중요 **

 

댓글