Database/Oracle

[SQL-Oracle]집합연산자(SET 연산자)- UNION, INTERSECT, MINUS

sukii 2023. 12. 1. 16:45
반응형

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

 

1) SUPER_HERO 테이블 만들기

--SUPER_HERO 테이블 생성 - 속성 : 이름(문자형)
CREATE TABLE SUPER_HERO(NAME VARCHAR2(20) PRIMARY KEY);

--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;

 


2) MARVEL _HERO 테이블 만들기

--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 검색대상,... FROM 테이블명1 UNION SELECT 검색대상,... FROM 테이블명2

--두 개의 SELECT 명령으로 검색된 행은 검색대상의 갯수와 자료형이 반드시 일치하도록 검색
SELECT NAME FROM SUPER_HERO UNION SELECT NAME FROM MARVEL_HERO;

 

🔘 UNION ALL : 두 개의 SELECT 명령으로 검색된 행을 합친 결과를 제공하는 연산자 - 중복행 포함
형식) SELECT 검색대상,... FROM 테이블명1 UNION ALL SELECT 검색대상,... FROM 테이블명2

SELECT NAME FROM SUPER_HERO UNION ALL SELECT NAME FROM MARVEL_HERO;



🔘 INTERSECT : 두 개의 SELECT 명령으로 검색된 행에서 중복된 행을 제공하는 연산자
형식) SELECT 검색대상,... FROM 테이블명1 INTERSECT SELECT 검색대상,... FROM 테이블명2
SELECT NAME FROM SUPER_HERO INTERSECT SELECT NAME FROM MARVEL_HERO;

SELECT NAME FROM SUPER_HERO INTERSECT SELECT NAME FROM MARVEL_HERO;

 

🔘 MINUS : 첫번째 SELECT 명령으로 검색된 행에서 두번째 SELECT 명령으로 검행된 행을 제외한 결과를 제공하는 연산자
형식) SELECT 검색대상,... FROM 테이블명1 MINUS SELECT 검색대상,... FROM 테이블명2

SELECT NAME FROM SUPER_HERO MINUS SELECT NAME FROM MARVEL_HERO;

 


🔸발생 가능한 에러와 해결 방법

-에러

--SET 연산자를 사용할 때 검색대상의 갯수 또는 자료형이 다른 경우 에러 발생
SELECT NAME FROM SUPER_HERO UNION SELECT NAME,GRADE FROM MARVEL_HERO;--검색대상의 갯수가 다르므로 에러 발생
SELECT NAME FROM SUPER_HERO UNION SELECT GRADE FROM MARVEL_HERO;--검색대상의 자료형이 다르므로 에러 발생

 

-해결방법

--SET 연산자를 사용할 때 검색대상의 갯수가 다른 경우 동일 자료형의 임의값을 사용하거나 NULL을 사용하여 검색 가능
SELECT NAME,0 AS GRADE FROM SUPER_HERO UNION SELECT NAME,GRADE FROM MARVEL_HERO;
SELECT NAME,NULL AS GRADE FROM SUPER_HERO UNION SELECT NAME,GRADE FROM MARVEL_HERO;

--SET 연산자를 사용할 때 검색대상의 자료형이 다른 경우 변환함수를 사용하여 검색 가능
SELECT NAME FROM SUPER_HERO UNION SELECT TO_CHAR(GRADE,'0') FROM MARVEL_HERO;

 

반응형