[Oracle/오라클] 집합연산자
집합연산자
- 집합이론에서 제공하는 합집합 ( UNION, UNION ALL ) , 교집합 ( INTERSECT ), 차집합 ( MINUS ) 연산자 제공
- UNION ALL : 중복해서 결과 반환, UNION : 중복을 허락하지 않음
SELECT 컬럼LIST -- A집합
FROM 테이블명
[ WHERE 조건 ]
UNION | UNION ALL | INTERSECT | MINUS
SELECT 컬럼LIST -- B집합
FROM 테이블명
[ WHERE 조건 ]
[ UNION | UNION ALL | INTERSECT | MINUS
SELECT 컬럼LIST -- C집합
FROM 테이블명
[ WHERE 조건 ]]
:
- 각 SELECT 절의 컬럼의 갯수와 순서 및 TYPE이 같아야 함. (컬럼명과 데이터 크기는 달라도 됨.)
- ORDER BY 절은 마지막 SELECT 문에서만 사용 가능
- CLOB , BLOB, BFILE 등은 사용 불가
- 출력의 기준은 첫번재 SELECT 문임
1. UNION, UNION ALL
- 합집합의 결과 반환
- UNION : 중복되지 않은 결과 반환
- UNION ALL : 중복된 결과 반환
ex) 2005년 4월과 6월에 판매된 상품정보를 중복하지 않게 조회하시오.
Alias는 상품코드, 상품명, 판매수량합계이다.
--(2005년 4월에 판매된 상품조회)
SELECT DISTINCT A.cart_prod AS 상품코드,
B.prod_name AS 상품명
FROM cart A, prod B
WHERE A.cart_prod = B.prod_id
AND A.cart_no LIKE '200504%'
UNION
--(2005년 6월에 판매된 상품조회)
SELECT DISTINCT A.cart_prod AS 상품코드,
B.prod_name AS 상품명
FROM cart A, prod B
WHERE A.cart_prod = B.prod_id
AND A.cart_no LIKE '200506%'
ORDER BY 1;
2. INTERSECT : 합집합
ex) 2005년 4월과 6월 두달에 모두 판매된 상품정보를 조회하시오.
Alias는 상품코드 , 상품명, 판매수량합계이다.
SELECT DISTINCT A.cart_prod AS 상품코드,
B.prod_name AS 상품명
FROM cart A, prod B
WHERE A.cart_prod = B.prod_id
AND A.cart_no LIKE '200504%'
INTERSECT
SELECT DISTINCT A.cart_prod AS 상품코드,
B.prod_name AS 상품명
FROM cart A, prod B
WHERE A.cart_prod = B.prod_id
AND A.cart_no LIKE '200506%'
ORDER BY 1;
3. MINUS : 차집합
- A MINUS B : 집합 A에서 집합 B에 속한 요소를 제거한 결과 반환
- B MINUS A : 집합 B에서 집합 A에 속한 요소를 제거한 결과 반환
ex) 2005년 4월에 판매된 상품 중 6월에는 판매되지 않은 상품정보를 조회하시오.
Alias는 상품코드, 상품명, 판매수량합계이다.
--2005년 4월에 판매된 상품
SELECT DISTINCT A.cart_prod AS 상품코드,
B.prod_name AS 상품명
FROM cart A, prod B
WHERE A.cart_prod = B.prod_id
AND A.cart_no LIKE '200504%'
MINUS
--2005년 6월에 판매된 상품
SELECT DISTINCT A.cart_prod AS 상품코드,
B.prod_name AS 상품명
FROM cart A, prod B
WHERE A.cart_prod = B.prod_id
AND A.cart_no LIKE '200506%'
ORDER BY 1;