티스토리 뷰

반응형


집합 연산자 

  • 두 개 이상의 테이블을 사용해서 결과를 얻기 위해서 조인을 사용하는 방법을 8장에서 알아봤었습니다. 그런데 조인 말고도 집합 연산자를 사용하는 방법을 통해서도 테이블을 연결해나가는 것이 가능합니다.



  • 집합 연산자는 총 4 가지가 있습니다. 위의 다이어그램 처럼 두 집합의 합집합을 출력하는 경우, 교집합만 출력하는 경우, 차집합을 출력하는 경우로 나눌 수 있고 그 중 합집합은 중복이 제거된 경우와 제거되지 않은 경우로 나눌 수 있습니다.

  • 집합 연산자를 사용할 때 주의할 점은 열의 개수와 각 열에 담을 수 있는 데이터 형식이 일치해야하며 ORDER BY 절은 쿼리의 맨 끝에만 위치할 수 있다는 점 입니다.



UNION, UNION ALL 


SELECT EMPNO, ENAME, JOB, SAL FROM EMP 
WHERE SAL <= 3000;
SELECT EMPNO, ENAME, JOB, SAL FROM EMP 
WHERE SAL >= 2000;

  • EMP 테이블에서 3000 이하의 월급을 받는 사원의 집합 1 과 2000 이상의 월급을 받는 사원의 집합 2 로 EMP 테이블을 재구성 해서 예제를 진행해보겠습니다.


  • 5명의 사원이 2000 에서 3000 사이의 월급을 받고 있는 것을 알 수 있습니다.  이 두 테이블에 대해 UNION 과 UNION ALL 연산자를 사용해보면 다음과 같은 결과를 얻을 수 있습니다.

SELECT EMPNO, ENAME, JOB, SAL FROM EMP 
WHERE SAL <= 3000
UNION ALL
SELECT EMPNO, ENAME, JOB, SAL FROM EMP
WHERE SAL >= 2000;

SELECT EMPNO, ENAME, JOB, SAL FROM EMP 
WHERE SAL <= 3000
UNION
SELECT EMPNO, ENAME, JOB, SAL FROM EMP
WHERE SAL >= 2000;


  • UNION ALL 은 19행 UNION 은 14 행으로 결과값이 출력된 걸 확인할 수 있습니다. UNION ALL 같은 경우는 정렬 없이 위 테이블 밑에 다음 테이블을 붙인 형태로 나타난 것을 확인할 수 있습니다. UNION 같은 경우는 두 테이블의 결과를 합친 뒤 중복을 제거하고 첫 번째 열을 기준으로 정렬한 뒤에 결과값을 출력한 것을 알 수 있습니다.



INTERSECT, MINUS 


SELECT EMPNO, ENAME, JOB, SAL FROM EMP 
WHERE SAL <= 3000
INTERSECT
SELECT EMPNO, ENAME, JOB, SAL FROM EMP
WHERE SAL >= 2000;


SELECT EMPNO, ENAME, JOB, SAL FROM EMP 
WHERE SAL <= 3000
MINUS
SELECT EMPNO, ENAME, JOB, SAL FROM EMP
WHERE SAL >= 2000;


  • INTERSECT 결과 에는 SAL 이 2000 에서 3000 까지의 결과가 출력되었고, MINUS 결과 에는 SAL 이 3000 이하인 사원들 중에 2000 에서 3000 까지의 사원이 제외된 결과가 출력된 것을 알 수 있습니다.



ORDER BY 

  • 집합연산자를 사용한 쿼리에서 ORDER BY 절은 맨 마지막 에만 사용할 수 있습니다. 매 SELECT 쿼리마다 ORDER BY 절을 사용하면 에러가 발생합니다.

SELECT EMPNO, ENAME, JOB, SAL FROM EMP 
WHERE SAL <= 3000
MINUS
SELECT EMPNO, ENAME, JOB, SAL FROM EMP
WHERE SAL >= 2000;
ORDER BY SAL;


  • ORDER BY SAL 절을 넣은 뒤의 결과 입니다. 집합 연산자를 사용한 쿼리의 열 이름은 첫테이블의 열이름을 기본으로 하며, ORDER BY 절을 사용하지 않은 경우 첫 열을 기준으로 정렬합니다.








부족한 블로그에 방문해 주셔서 감사합니다.

잘못된 부분이나 질문이 있으시면 

댓글로 말씀해주세요.


금방 확인하고 피드백 드리겠습니다.


좋은 하루 되세요. ^^


반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함