DATA/Oracle data bace (DBeaber)

오라클 데이터 베이스 6일차 (#2 집합 연산자)

yuns94 2021. 11. 21. 12:16

/*

집합 연산자
1. 집합 연산자로 연결되는 각 SELECT  문의 SELECT 리스트 갯수와 데이터 타입은 일치해야한다.
2. 집합 연산자로 SELECT 문을 연결할 때 ORDER BY 젊은 맨 마지막 문장에서만 사용할 수 있다.
3. BLOB , CLOB , BFILE 타입의 칼럼에 대해서는 집합연산자를 사용할 수 없다.
4. UNION , INTERSECT , MINUS 연산자 LONG형 칼럼을 사용할 수 없다.

*/

/*
UNION
합집합을 의미, 예를 들어 두개의 데이터 집합이 있으면 각 집합 원소를 
모두 포함한 결과가 반환됨
UNION 은 중복된 결과는 하나만 출력된다.
*/

SELECT 'A' FROM DUAL
UNION
SELECT 'B' FROM DUAL;

-- 중복된 결과는 하나만 출력되는 것을 확인 
SELECT 'A' FROM DUAL
UNION
SELECT 'A' FROM DUAL;

-- 데이터 타입이 같지않아 에러가 발생됨
SELECT 1 FROM DUAL
UNION
SELECT 'A' FROM DUAL;

-- 데이터의 갯수가 다르기 떄문에 에러가 발생됨
SELECT 'A' FROM DUAL
UNION
SELECT 'C' , 'D' FROM DUAL;


-- 전체 조회한 결과로 ORDER BY절을 통해 정렬을 확인  // 
SELECT 'C' FROM DUAL
UNION
SELECT 'A' AS "H" FROM DUAL
ORDER BY "H" ;

SELECT TEAM_ID FROM TEAM;

SELECT TEAM_ID AS "TEAM_ID" 
UNION
SELECT HOMETEAM_ID AS "TEAM_ID" FROM STADIUM;


/*
UNION ALL
합집합을 의미, 예를 들어 두개의 데이터 집합이 있으면 각 집합 원소를 
모두 포함한 결과가 반환됨
UNION ALL은 중복된 결과도 모두 출력함.
*/

-- 중복된 결과를 모두 출력함

SELECT TEAM_ID FROM TEAM
UNION ALL
SELECT HOMETEAM_ID AS "TEAM_ID" FROM STADIUM
ORDER BY TEAM_ID;

/*
MINUS
차집합을 의미, 공통된 항목을 제외한 결과를 추출
*/
SELECT TEAM_ID FROM TEAM
MINUS
SELECT 'K01' AS TEAM_ID FROM DUAL;

/*
INTERSECT
교집합을 의미 공통된 항목을 추출 
*/

SELECT TEAM_ID FROM TEAM
INTERSECT
SELECT 'K01' AS TEAM_ID FROM STADIUM;

-- NULL값은 TEAM테이블에 없어서 NULL 제외한 공통된 항목만 추출되는것을 확인
SELECT TEAM_ID FROM TEAM
INTERSECT
SELECT HOMETEAM_ID AS TEAM_ID FROM STADIUM;