티스토리 뷰
집합 연산자
두 개 이상의 테이블을 사용해서 결과를 얻기 위해서 조인을 사용하는 방법을 8장에서 알아봤었습니다. 그런데 조인 말고도 집합 연산자를 사용하는 방법을 통해서도 테이블을 연결해나가는 것이 가능합니다.
집합 연산자는 총 4 가지가 있습니다. 위의 다이어그램 처럼 두 집합의 합집합을 출력하는 경우, 교집합만 출력하는 경우, 차집합을 출력하는 경우로 나눌 수 있고 그 중 합집합은 중복이 제거된 경우와 제거되지 않은 경우로 나눌 수 있습니다.
집합 연산자를 사용할 때 주의할 점은 열의 개수와 각 열에 담을 수 있는 데이터 형식이 일치해야하며 ORDER BY 절은 쿼리의 맨 끝에만 위치할 수 있다는 점 입니다.
UNION, UNION ALL
SELECT EMPNO, ENAME, JOB, SAL FROM EMPWHERE SAL <= 3000;SELECT EMPNO, ENAME, JOB, SAL FROM EMPWHERE SAL >= 2000;
EMP 테이블에서 3000 이하의 월급을 받는 사원의 집합 1 과 2000 이상의 월급을 받는 사원의 집합 2 로 EMP 테이블을 재구성 해서 예제를 진행해보겠습니다.
5명의 사원이 2000 에서 3000 사이의 월급을 받고 있는 것을 알 수 있습니다. 이 두 테이블에 대해 UNION 과 UNION ALL 연산자를 사용해보면 다음과 같은 결과를 얻을 수 있습니다.
SELECT EMPNO, ENAME, JOB, SAL FROM EMPWHERE SAL <= 3000UNION ALLSELECT EMPNO, ENAME, JOB, SAL FROM EMPWHERE SAL >= 2000;
SELECT EMPNO, ENAME, JOB, SAL FROM EMPWHERE SAL <= 3000UNIONSELECT EMPNO, ENAME, JOB, SAL FROM EMPWHERE SAL >= 2000;
UNION ALL 은 19행 UNION 은 14 행으로 결과값이 출력된 걸 확인할 수 있습니다. UNION ALL 같은 경우는 정렬 없이 위 테이블 밑에 다음 테이블을 붙인 형태로 나타난 것을 확인할 수 있습니다. UNION 같은 경우는 두 테이블의 결과를 합친 뒤 중복을 제거하고 첫 번째 열을 기준으로 정렬한 뒤에 결과값을 출력한 것을 알 수 있습니다.
INTERSECT, MINUS
SELECT EMPNO, ENAME, JOB, SAL FROM EMPWHERE SAL <= 3000INTERSECTSELECT EMPNO, ENAME, JOB, SAL FROM EMPWHERE SAL >= 2000;
SELECT EMPNO, ENAME, JOB, SAL FROM EMPWHERE SAL <= 3000MINUSSELECT EMPNO, ENAME, JOB, SAL FROM EMPWHERE SAL >= 2000;
INTERSECT 결과 에는 SAL 이 2000 에서 3000 까지의 결과가 출력되었고, MINUS 결과 에는 SAL 이 3000 이하인 사원들 중에 2000 에서 3000 까지의 사원이 제외된 결과가 출력된 것을 알 수 있습니다.
ORDER BY
집합연산자를 사용한 쿼리에서 ORDER BY 절은 맨 마지막 에만 사용할 수 있습니다. 매 SELECT 쿼리마다 ORDER BY 절을 사용하면 에러가 발생합니다.
SELECT EMPNO, ENAME, JOB, SAL FROM EMPWHERE SAL <= 3000MINUSSELECT EMPNO, ENAME, JOB, SAL FROM EMPWHERE SAL >= 2000;ORDER BY SAL;
ORDER BY SAL 절을 넣은 뒤의 결과 입니다. 집합 연산자를 사용한 쿼리의 열 이름은 첫테이블의 열이름을 기본으로 하며, ORDER BY 절을 사용하지 않은 경우 첫 열을 기준으로 정렬합니다.
부족한 블로그에 방문해 주셔서 감사합니다.
잘못된 부분이나 질문이 있으시면
댓글로 말씀해주세요.
금방 확인하고 피드백 드리겠습니다.
좋은 하루 되세요. ^^
'#Archive' 카테고리의 다른 글
1003. 피보나치 함수 - 메모이제이션 (0) | 2018.01.14 |
---|---|
반드시 알아야하는 알고리즘 top 8 - 8. 몬테 카를로 알고리즘 (0) | 2018.01.04 |
[SQL] 9. 쿼리안의 쿼리 - 서브쿼리 (0) | 2018.01.02 |
[ORACLE] ORA-12560 : TNS 프로토콜 어댑터 오류 해결법 (9) | 2018.01.01 |
반드시 알아야하는 알고리즘 top 8 - 7. 최단거리 알고리즘 (7) | 2017.12.30 |
- Total
- Today
- Yesterday
- 글램핑
- bukhansannationalpark
- 강원도캠핑
- 반려견캠핑
- 가평캠핑
- 가족여행
- 여름휴가
- 백준
- 커플여행
- 카카오
- 알고리즘
- 여름캠핑
- 영월여행
- Koreancuisine
- 서울근교캠핑
- 머신러닝
- 영월캠핑
- 가족캠핑
- 파이썬
- Oracle
- 여름휴가추천
- 자연힐링
- python
- 캠핑장추천
- SeoulTravel
- 계곡캠핑
- 가평여행
- 강원도여행
- sql
- 캠핑초보
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |