-
SQL 집합 연산자Data Base_Oracle/SQL 2020. 1. 8. 23:30
집합 연산자
서로 다른 두 개의 SQL문장의 실행결과를 하나로 합쳐서
보여줄 수 있게 하는 연산자종류 설명 union 합집합, 중복을 제거한 결과의 합을 검색 union all 합집합, 중복을 포함한 결과의 합을 검색 intersect 교집합, 양쪽 모두에서 포함된 행을 검색 minus 차집합, 첫 번째 검색 결과에서 두 번째 검색 결과를 제외한 나머지를 검색 ※ 두 SQL문장의 select ~ from 사이에 나오는 필드 개수와 자료형이 같아야 함
테이블과 필드명은 다를 수 있음# 예제
{ 문제 1 }
▷ emp 테이블에서 업무가 MANAGER인 사원의 사번, 이름 출력▶ [ SQL> select empno, ename from emp where job='MANAGER'; ]
EMPNO ENAME 7566 JONES 7698 BLAKE 7782 CLARK { 문제 2 }
▷ emp 테이블에서 사원명이 A자로 시작하는 사원의 사번, 이름 출력▶ [ SQL> select empno, ename from emp where ename like 'A%'; ]
EMPNO ENAME 7499 A 7876 ADAMS { UNION }
▷ 위의 두 결과의 합집합을 출력, 중복 데이터는 제외
▶ [ SQL> select empno, ename from emp where job='MANAGER'
union
select empno, ename from emp where ename like 'A%'; ]EMPNO ENAME 7499 ALLEN 7876 ADAMS 7566 JONES 7698 BLAKE 7782 CLARK ※ 두 개의 SQL결과를 계산한 뒤 정렬해서 보여줌
~ job='MANAGER' 가 SQL문장에서는 먼저 쓰였으나 아래에 출력{ UNION ALL }
▷ 위의 두 문제를 동시에 출력, 중복 데이터를 포함
▶ [ SQL> select empno, ename from emp where job='MANAGER'
union all
select empno, ename from emp where ename like 'A%'; ]EMPNO ENAME 7566 JONES 7698 BLAKE 7782 CLARK 7499 ALLEN 7876 ADAMS ※ 두 개의 SQL 실행 결과를 섞지 않고 있는 그대로 합쳐서 보여줌
~ job='MANAGER' 가 SQL문장에서 먼저 쓰였기 때문에 위에 출력{ INTERSECT }
▷ 위의 두 문제에 공통으로 포함되는 레코드를 출력
▶ [ SQL> select empno, ename from emp where job='MANAGER'
intersect
select empno, ename from emp where ename like 'A%'; ]→ '선택된 레코드가 없습니다.'
※ 두 SQL문장의 실행결과에 동시에 속하는 레코드가 없음
{ MINUS }
▷ 위의 두 문제에서 첫 번째 SQL문장의 결과에서
두 번째 SQL문장의 결과를 제외한 뒤 출력▶ [ SQL> select empno, ename from emp where job='MANAGER'
minus
select empno, ename from emp where ename like 'A%'; ]EMPNO ENAME 7566 JONES 7698 BLAKE 7782 CLARK ※ 두 SQL문장의 실행결과에 교집합이 없기 때문에 먼저 작성된 SQL문장의 결과만 출력
# 에러
{ 필드의 개수가 맞지 않을 때 발생하는 에러 }
▶ [ SQL> select empno, ename, sal from emp where job='MANAGER'
union all
select empno, ename from emp where ename like 'A%';
1행에 오류:
ORA-01789: 질의 블록은 부정확한 수의 결과 열을 가지고 있습니다. ]{ 자료형이 맞지 않을 때 발생하는 에러 }
▶ [ SQL> select sal, comm from emp where job='MANAGER'
union all
select empno, ename from emp where ename like 'A%' ;
1행에 오류:
ORA-01790: 대응하는 식과 같은 데이터 유형이어야 합니다 ]{ ※ 테이블과 필드명은 서로 달라도 결과가 출력됨 ※ }
▶ [ SQL> select empno, ename from emp where job='MANAGER'
union all
select deptno, dname from dept where dname like 'A%' ;EMPNO ENAME 7566 JONES 7698 BLAKE 7782 CLARK 10 ACCOUNTING
서로 다른 SQL문장의 결과를 합쳐서 출력하는 집합 연산자에 대해 알아보았습니다.
집합 개념이기 때문에 벤다이어그램을 생각하면 어렵지 않게 이해할 수 있습니다
'Data Base_Oracle > SQL' 카테고리의 다른 글
SQL 단순 VIEW 생성 (0) 2020.01.08 SQL_VIEW 개요 & USER_VIEWS (0) 2020.01.08 SQL_ROLLBACK (0) 2020.01.08 SQL_Sub Query_Update & Delete (0) 2020.01.08 SQL_Sub Query_Table 만들기 (0) 2020.01.07