반응형

집합연산자

 
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;
반응형

'[ORACLE]' 카테고리의 다른 글

[ORACLE] PL/SQL - LOOP, FOR LOOP, WHILE LOOP  (0) 2024.01.25
[ORACLE] PL/SQL - ANOYMOUS BLOCK,  (0) 2024.01.24
[ORACLE] MERGE  (0) 2024.01.23
[ORACLE] PSEUDO - ROWNUM  (0) 2024.01.23
[ORACLE] 계정 비밀번호 만료기간 해제 및 변경  (0) 2024.01.23

+ Recent posts