[Oracle 4-1] 집합 연산자 - 합집합(UNION), 교집합(INTERSECT), 차집합(MINUS)

임승현·2022년 10월 25일

Oracle

목록 보기
10/20
post-thumbnail

🐧집합 연산자(SET 연산자)

: 두개의 SELECT 명령에 대한 검색결과를 이용하여 집합 결과값을 제공하는 연산자
◈ 집합 연산자 종류
→합집합(UNION), 교집합(INTERSECT), 차집합(MINUS)

◈ SUPER_HERO 테이블 생성 - 속성 : 이름(문자형)

CREATE TABLE SUPER_HERO(NAME VARCHAR2(20) PRIMARY KEY);


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

DROP TABLE SUPER_HERO PURGE;


───────────────────────────────────────
◈ SUPER_HERO 테이블에 행 삽입

INSERT INTO SUPER_HERO VALUES('수퍼맨');
INSERT INTO SUPER_HERO VALUES('아이언맨');
INSERT INTO SUPER_HERO VALUES('배트맨');
INSERT INTO SUPER_HERO VALUES('앤트맨');
INSERT INTO SUPER_HERO VALUES('스파이더맨');


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

SELECT * FROM SUPER_HERO;


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

COMMIT;

◈ MARVEL_HERO 테이블 속성 - 속성 : 이름(문자형),등급(숫자형)

CREATE TABLE MARVEL_HERO(NAME VARCHAR2(20) PRIMARY KEY,GRADE NUMBER(1)


───────────────────────────────────────
◈ MARVEL_HERO 테이블에 행 삽입

INSERT INTO MARVEL_HERO VALUES('아이언맨',3);
INSERT INTO MARVEL_HERO VALUES('헐크',1);
INSERT INTO MARVEL_HERO VALUES('스파이더맨',4);
INSERT INTO MARVEL_HERO VALUES('토르',2);
INSERT INTO MARVEL_HERO VALUES('앤트맨',5);


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

SELECT * FROM MARVEL_HERO;


─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

COMMIT;

🐧UNION

: 두개의 SELECT 명령으로 검색된 행을 합한 결과를 제공하는 키워드 - 중복행 제외
◈ 두개의 SELECT 명령은 검색대상의 갯수와 자료형이 반드시 일치하도록 검색
형식) SELECT 검색대상,... FROM 테이블명 UNION SELECT 검색대상,... FROM 테이블

SELECT NAME FROM SUPER_HERO UNION SELECT NAME FROM MARVEL_HERO;

◈ UNION ALL : 두개의 SELECT 명령으로 검색된 행을 합한 결과를 제공하는 키워드 - 중복행 포함
형식) SELECT 검색대상,... FROM 테이블명 UNION ALL SELECT 검색대상,... FROM 테이블

SELECT NAME FROM SUPER_HERO UNION ALL SELECT NAME FROM MARVEL_HERO;

🐧INTERSECT

: 두개의 SELECT 명령으로 검색된 행에서 중복된 결과를 제공하는 키워드
형식) SELECT 검색대상,... FROM 테이블명 INTERSECT SELECT 검색대상,... FROM 테이블

SELECT NAME FROM SUPER_HERO INTERSECT SELECT NAME FROM MARVEL_HERO;

🐧MINUS

: 첫번째 SELECT 명령으로 검색된 행에서 두번째 SELECT 명령의 검색행을 제외한 결과를 제공하는 키워드
형식) SELECT 검색대상,... FROM 테이블명 MINUS SELECT 검색대상,... FROM 테이블

SELECT NAME FROM SUPER_HERO MINUS SELECT NAME FROM MARVEL_HERO;

🐧집합 연산자 사용시 주의점

◈ 집합 연산자 사용시 두개의 SELECT 명령에 대한 검색대상의 갯수 도는 자료형이 서로 다른 경우 에러 발생

SELECT NAME FROM SUPER_HERO UNION SELECT GRADE FROM MARVEL_HERO;


※ 에러발생 : 검색대상의 자료형 불일치
※ NAME : 문자형, GRADE : 숫자형

─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

SELECT NAME FROM SUPER_HERO UNION SELECT NAME,GRADE FROM MARVEL_HERO;


※ 에러발생 : 검색대상의 갯수 불일치

◈ 집합 연산자 사용시 두개의 SELECT 명령에 대한 검색대상의 자료형이 다른 경우 변환함수를 사용하여 자료형을 일치시켜 검색

SELECT NAME FROM SUPER_HERO UNION SELECT TO_CHAR(GRADE) FROM MARVEL_HERO;


※ TO_CHAR(GRADE) : 숫자형 → 문자형

◈ 집합 연산자 사용시 두개의 SELECT 명령에 대한 검색대상의 갯수가 다른 경우 동일한 자료형의 임의값 또는 NULL을 사용하여 집합 처리

SELECT NAME,0 FROM SUPER_HERO UNION SELECT NAME,GRADE FROM MARVEL_HERO;


※ NAME,0
─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

SELECT NAME,NULL FROM SUPER_HERO UNION SELECT NAME,GRADE FROM MARVEL_HERO;


※ NAME,NULL

0개의 댓글