UNION, UNION ALL - 합집합 INTERSECT - 교집합 MINUS - 차집합
집합연산자의 제한 조건 - 두 테이블의 컬럼 갯수와 자료형, 나열순서가 같아야 한다. - ORDER BY절(첫번째 쿼리문 기준)은 모든 쿼리문을 다 기술한 뒤 맨 마지막에 한 번만 기술가능하다. - LOB(BLOB, CLOB, BFILE)자료형, LONG자료형에는 사용할 수 없다.
SELECT DEPTNO, ENAME FROM EMP UNION SELECT DEPTNO, DNAME FROM DEPT ORDER BY ENAME;
1. UNION : 합집합 - 두 개의 테이블의 데이터를 모두 포함한 결과를 반환함 - 중복을 허용하지 않는다. 중복값은 1개만 표현함.
1-2. UNION ALL : 합집합 - UNION과 거의 다 동일하지만 중복을 허용하여 모두 출력한다.
SELECT GOODS FROM GOODS_KOR UNION SELECT GOODS FROM GOODS_JAP;
2. INTERSECT - 교집합 - 두 개의 테이블의 데이터 중 공통된 항목만 반환함. - 중복을 허용하지 않는다.
SELECT GOODS FROM GOODS_KOR INTERSECT SELECT GOODS FROM GOODS_JAP;
3. MINUS - 차집합 - 두 개의 테이블의 데이터 중 공통된 항목을 제외한 데이터만 반환하는데, 단 먼저 처리된 테이블의 항목만 반환한다. 나중에 처리된 테이블의 결과는 제외. - 중복을 허용하지 않는다.
SELECT GOODS FROM GOODS_KOR MINUS SELECT GOODS FROM GOODS_JAP;
[UNION]
--TABLE
CREATE TABLE GOODS_KOR (
SEQ NUMBER PRIMARY KEY,
COUNTRY VARCHAR2(10),
GOODS VARCHAR2(80) NOT NULL
);
CREATE SEQUENCE KOR_SEQ NOCACHE;
INSERT INTO GOODS_KOR (SEQ, COUNTRY, GOODS) VALUES (KOR_SEQ.NEXTVAL, '한국', '원유제외 석유류');
INSERT INTO GOODS_KOR VALUES (KOR_SEQ.NEXTVAL, '한국', '자동차');
INSERT INTO GOODS_KOR VALUES (KOR_SEQ.NEXTVAL, '한국', '전자집적회로');
INSERT INTO GOODS_KOR VALUES (KOR_SEQ.NEXTVAL, '한국', '선박');
INSERT INTO GOODS_KOR VALUES (KOR_SEQ.NEXTVAL, '한국', 'LCD');
INSERT INTO GOODS_KOR VALUES (KOR_SEQ.NEXTVAL, '한국', '자동차부품');
INSERT INTO GOODS_KOR VALUES (KOR_SEQ.NEXTVAL, '한국', '휴대전화');
COMMIT;
SELECT * FROM GOODS_KOR;
--TABLE
CREATE TABLE GOODS_JAP (
SEQ NUMBER PRIMARY KEY,
COUNTRY VARCHAR2(10),
GOODS VARCHAR2(80) NOT NULL
);
CREATE SEQUENCE JAP_SEQ NOCACHE;
INSERT INTO GOODS_JAP VALUES (JAP_SEQ.NEXTVAL, '일본', '자동차');
INSERT INTO GOODS_JAP VALUES (JAP_SEQ.NEXTVAL, '일본', '자동차부품');
INSERT INTO GOODS_JAP VALUES (JAP_SEQ.NEXTVAL, '일본', '화물차');
INSERT INTO GOODS_JAP VALUES (JAP_SEQ.NEXTVAL, '일본', '건설기계');
INSERT INTO GOODS_JAP VALUES (JAP_SEQ.NEXTVAL, '일본', '다이오드');
INSERT INTO GOODS_JAP VALUES (JAP_SEQ.NEXTVAL, '일본', '트랜지스터');
INSERT INTO GOODS_JAP VALUES (JAP_SEQ.NEXTVAL, '일본', '반도체웨이퍼');
COMMIT;
SELECT * FROM GOODS_JAP;
--[UNION]
SELECT GOODS FROM GOODS_KOR
UNION
SELECT GOODS FROM GOODS_JAP;
GOODS_KOR
GOODS_JAP
SELECT COUNTRY, GOODS FROM GOODS_KOR
UNION
SELECT COUNTRY, GOODS FROM GOODS_JAP;
UPDATE GOODS_JAP SET COUNTRY ='한국';
SELECT COUNTRY, GOODS FROM GOODS_KOR
UNION
SELECT COUNTRY, GOODS FROM GOODS_JAP;
[UNION ALL]
--[UNION ALL]
SELECT COUNTRY, GOODS FROM GOODS_KOR
UNION ALL
SELECT COUNTRY, GOODS FROM GOODS_JAP ORDER BY COUNTRY, GOODS;
--EMPLOYEE_ID별 HISTROY 내역 출력
SELECT EMPLOYEE_ID, JOB_ID FROM EMPLOYEES
UNION
SELECT EMPLOYEE_ID, JOB_ID FROM JOB_HISTORY ORDER BY EMPLOYEE_ID;
--[INTERSECT]
UPDATE GOODS_KOR SET GOODS='자동차' WHERE SEQ=3;
UPDATE GOODS_KOR SET GOODS='자동차부품' WHERE SEQ=4;
ROLLBACK;
SELECT GOODS FROM GOODS_KOR
INTERSECT
SELECT GOODS FROM GOODS_JAP;
UPDATE GOODS_JAP SET COUNTRY ='한국' WHERE SEQ=1;
UPDATE GOODS_JAP SET COUNTRY ='한국' WHERE SEQ=2;
SELECT COUNTRY, GOODS FROM GOODS_KOR
INTERSECT
SELECT COUNTRY, GOODS FROM GOODS_JAP;
--[MINUS]
SELECT GOODS FROM GOODS_KOR
MINUS
SELECT GOODS FROM GOODS_JAP;