제2절_집합_연산자(SET_OPERATOR)
2012.03.19 07:27
제2절 집합 연산자(SET OPERATOR)
집한 연산자
- 두개 이상의 연관된 테이블에서 데이터를 조회하는 방법
- 여러개의 질의의 결과를 연결하여 하나로 결합
- 튜닝관점에서 실행계획을 분리하고자 할때
![SQL_204.jpg](http://bysql.net/files/attach/images/22118/073/023/5129d6be753df9e885c15bde8f03b5e0.jpg)
![SQL_205.jpg](http://bysql.net/files/attach/images/22118/073/023/c9e2c0892a80f4c042989f0a034b70b9.jpg)
--UNION
SELECT DEPARTMENT_ID, EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE DEPARTMENT_ID=10
UNION
SELECT DEPARTMENT_ID, EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE DEPARTMENT_ID=20
ORDER BY LAST_NAME;
![이미지 17.png](http://bysql.net/files/attach/images/22118/073/023/c6dcaa5b9a20c2e70c5f58c4720c1a58.png)
--같은 컬럼에 대한 IN연산자 대체 UNION 효과
SELECT DEPARTMENT_ID, EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN (10, 20);
![이미지 19.png](http://bysql.net/files/attach/images/22118/073/023/42d54e0bb842fae058f36d0fb309d17d.png)
UNION ALL
UNION ALL은 UNION과 다르게 집합내에서 중복이 생길수 있음(단순 결합)
--UNION ALL
SELECT DEPARTMENT_ID, EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN (10, 20)
UNION ALL
SELECT DEPARTMENT_ID, EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN (10, 20)
ORDER BY LAST_NAME;
![이미지 20.png](http://bysql.net/files/attach/images/22118/073/023/0a1d6acd57bb15f8eaaa4eb8da1f63cc.png)
--MINUS
SELECT DEPARTMENT_ID, EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE DEPARTMENT_ID IN (10, 20)
MINUS
SELECT DEPARTMENT_ID, EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE DEPARTMENT_ID =10
ORDER BY LAST_NAME;
![이미지 21.png](http://bysql.net/files/attach/images/22118/073/023/8f1d0d61b8e9072c7440e189f77aa90d.png)
--NOT IN를 이용한 MINUS효과
SELECT DEPARTMENT_ID, EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM EMPLOYEES A
WHERE DEPARTMENT_ID IN (10, 20)
AND EMPLOYEE_ID NOT IN
(SELECT EMPLOYEE_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 10);
![이미지 22.png](http://bysql.net/files/attach/images/22118/073/023/983b78774bae076ef0e1b3e51281ac39.png)
--NOT IN를 이용한 MINUS효과
SELECT DEPARTMENT_ID, EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM EMPLOYEES A
WHERE DEPARTMENT_ID IN (10, 20)
INTERSECT
SELECT DEPARTMENT_ID, EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM EMPLOYEES A
WHERE DEPARTMENT_ID = 10;
![이미지 24.png](http://bysql.net/files/attach/images/22118/073/023/b4717d978884c040184626d8e2e30213.png)
--IN연산자를 이용한 INTERSECT효과
SELECT DEPARTMENT_ID, EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM EMPLOYEES A
WHERE DEPARTMENT_ID IN (10, 20)
AND EMPLOYEE_ID IN
(SELECT EMPLOYEE_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 10);
![이미지 25.png](http://bysql.net/files/attach/images/22118/073/023/01a4c98128d7cd3a82229187ce7c1722.png)
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
58 | Week1_승대수 | 보라빛고양이 | 2012.07.17 | 3054 |
57 | 제3절_조인_기본_원리 | 보라빛고양이 | 2012.05.31 | 3847 |
56 | Week1_이주영 | suspace | 2012.07.17 | 5027 |
55 | 제2절_쿼리변환 | ljw | 2012.05.14 | 5615 |
54 | 제4절_파티션_활용 | 오예스 | 2012.06.26 | 5755 |
53 | 문제작성 | 실천하자 | 2012.07.16 | 5796 |
» |
제2절_집합_연산자(SET_OPERATOR)
![]() | ljw | 2012.03.19 | 5800 |
51 | 제3절_데이터베이스_Call과_네트워크_부하 | 오예스 | 2012.04.30 | 5907 |
50 | 제4절_데이터베이스_IO_원리 | 운영자 | 2012.04.30 | 5968 |
49 | 제3절_동시성_제어 | 운영자 | 2012.05.08 | 6038 |
48 | 제5절_데이터베이스_구조와_성능 | 오예스 | 2012.03.08 | 6100 |
47 | 제1절_고급_SQL_활용 | 실천하자 | 2012.06.11 | 6292 |
46 | 제2절_인덱스_기본 | 실천하자 | 2012.04.12 | 6501 |
45 | 제8절_절차형_SQL | 보라빛고양이 | 2012.04.02 | 6544 |
44 | 제2절_SQL_파싱_부하 | ljw | 2012.04.23 | 6548 |
43 | 제8절_ORDER_BY_절 | 실천하자 | 2012.03.20 | 6751 |
42 | 제3절_DML(DATA_MANIPULATION_LANGUAGE) | balto | 2012.03.09 | 6855 |
41 | 제5절_배치_프로그램_튜닝 | 보라빛고양이 | 2012.07.04 | 6913 |
40 | 제6절_분산_데이터베이스와_성능 | 오예스 | 2012.03.15 | 6968 |
39 | 제3절_조인_수행_원리 | 실천하자 | 2012.04.12 | 6969 |