[ORACLE] SQL DEVELOPER 4일차 - SET연산자(집합연산자)

jeong·2021년 6월 8일
0

Oracle(SQL) 오라클

목록 보기
11/16

4일차 : 서브쿼리(Subquery), SET연산자(집합연산자)

오늘 중요한 부분 : 서브쿼리(Subquery) 꼭 알아야하고 인서트, 업데이트, 딜리트 문법 알아야 한다

지난 포스팅 : '4일차 - 서브쿼리(Subquery)'

SET연산자(집합연산자)

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


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

CREATE TABLE SUPER_HERO(NAME VARCHAR2(20));

--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('스파이더맨');
COMMIT; 
SELECT * FROM SUPER_HERO;

--DELETE FROM SUPER_HERO WHERE NAME='슈퍼맨'; --하나만 삭제
--DELETE FROM SUPER_HERO; --행 전체 삭제
--테이블 완전 삭제 DROP TABLE SUPER_HERO;

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

CREATE TABLE MARVEL_HERO(NAME VARCHAR2(20),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);
COMMIT;
SELECT * FROM MARVEL_HERO;

합집합(UNION)

두 개의 SELECT 명령으로 검색된 행을 합한 결과를 제공 - 중복행 제외
--집합연산자를 사용할 경우 두 개의 SELECT 명령의 검색대상은 갯수와 자료형이 반드시 동일하도록 작성

UNION

SELECT NAME FROM SUPER_HERO
UNION
SELECT NAME FROM MARVEL_HERO;

UNION ALL
: 두 개의 SELECT 명령으로 검색된 행을 합한 결과를 제공 - 중복행 포함

SELECT NAME FROM SUPER_HERO
UNION ALL
SELECT NAME FROM MARVEL_HERO;

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

SELECT NAME FROM SUPER_HERO UNION SELECT GRADE FROM MARVEL_HERO; --자료형이 다름 
SELECT NAME FROM SUPER_HERO UNION SELECT NAME,GRADE FROM MARVEL_HERO; --갯수 다름

--집합연산자 사용시 검색대상의 갯수가 다른 경우 컬럼값 대신 동일한 자료형의 임의값 또는 NULL를 사용하여 집합 검색 결과 제공

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

--집합연산자 사용시 검색대상의 자료형이 다른 경우 변환함수를 사용하여 같은 자료형으로 변경하여 집합 검색 결과 제공

SELECT NAME FROM SUPER_HERO UNION SELECT TO_CHAR(GRADE,'0') FROM MARVEL_HERO;

교집합(INTERSECT)

두 개의 SELECT 명령으로 검색된 중복행의 결과를 제공 - 교집합

SELECT NAME FROM SUPER_HERO
INTERSECT
SELECT NAME FROM MARVEL_HERO;

차집합(MINUS)

첫번째 SELECT 명령의 검색 결과에서 두번째 SELECT 명령의 검색 결과를 제외한 행 제공 - 차집합

SELECT NAME FROM SUPER_HERO
MINUS
SELECT NAME FROM MARVEL_HERO;
profile
배우는 초보개발자

0개의 댓글