💡합집합 (Union)
유니온(Union)은 합집합으로서 테이블을 더한 결과를 출력한다.
스키마가 동일한 결과셋끼리만 가능하다.
유니온의 사용
SELECT * FROM tblMen
UNION
SELECT * FROM tblWomen;
유니온은 테이블을 더한다고 했다.
따라서 두 테이블을 더한 데이터 20개가 출력된다.
언제 유니온을 사용할까?
SELECT * FROM 영업부게시판;
SELECT * FROM 총무부게시판;
SELECT * FROM 개발부게시판;
각 부서의 근황을 한 번에 알려고 할 때와 같이 다른 데에 있는 테이블들을 합쳐야 하는 일이 생긴다.
사장님이 모든 게시판의 글을 한 번에 보게 해달라고 요청하실 때 바로 유니온을 사용하면 된다.
유니온의 조건
같은 테이블의 구조
--ORA-01789: query block has incorrect number of result columns
SELECT * FROM tblStaff
Union
SELECT * FROM tblInsa;
--실행 O
SELECT name FROM tblStaff
Union
SELECT name FROM tblInsa;
유니온을 할 때에는 합치려는 테이블이 관계가 있고 없고가 중요한 게 아니다.
두 테이블에서 합치려는 데이터의 구조가 서로 다르기 때문에 더하기가 되지 않는다.
대신에 name만을 가지고 유니온을 하는 것은 실행이 된다.
같은 컬럼의 자료형
SELECT name, address, salary FROM tblStaff
Union
SELECT name, city, basicapay FROM tblInsa;
컬럼 이름이 달라도 유니온이 된다.
즉 컬럼 이름은 중요하지 않으며, 자료형이 중요하다.
UNION ALL
CREATE TABLE tblAAA (
name varchar2(30) NOT NULL
);
CREATE TABLE tblBBB (
name varchar2(30) NOT NULL
);
INSERT INTO tblAAA VALUES ('강아지');
INSERT INTO tblAAA VALUES ('고양이');
INSERT INTO tblAAA VALUES ('토끼');
INSERT INTO tblAAA VALUES ('거북이');
INSERT INTO tblAAA VALUES ('병아리');
INSERT INTO tblBBB VALUES ('강아지');
INSERT INTO tblBBB VALUES ('고양이');
INSERT INTO tblBBB VALUES ('호랑이');
INSERT INTO tblBBB VALUES ('사자');
INSERT INTO tblBBB VALUES ('코끼리');
-- union > 수학의 집합 > 중복값 제거
SELECT * FROM TBLAAA
UNION
SELECT * FROM TblBBB;
-- union all > 중복값 허용
SELECT * FROM TBLAAA
UNION ALL
SELECT * FROM TblBBB;
유니온은 수학의 집합으로서 중복을 제거한다는 특징이 있다.
중복값을 유지하기 위해서는 UNION ALL을 사용한다.
💡교집합 (Intersect)
SELECT * FROM TBLAAA
INTERSECT
SELECT * FROM TblBBB;
💡차집합 (Minus)
SELECT * FROM TBLAAA
MINUS
SELECT * FROM TblBBB;
SELECT * FROM TBLBBB
MINUS
SELECT * FROM TblAAA;
추가로 교집합과 차집합에 대해서도 알아두도록 하자.