집합 연산자
SQL문의 집합간의 비교를 하기 위해서는 연산자로 연결된 SELECT문의 결과 SET이 같은 구조를 가져야 한다.
따라서 집합 연산자로 연결된 SELECT문들은 컬럼의 수와, 데이터 형이 순서대로 일치해야 된다.
UNION : 합집합(중복자료 배제)
UNION ALL : 합집합(중복자료 포함)
MINUS : 차집합
INTERSECT : 교집합
4개의 집합 연산자 중에 sort가 발생하지 않는것은 UNION ALL뿐이다.
UNION 연산자는 두 DATASET의 합집합을 보여주며, 중복된 ROW가 있으면 그 중 하나의 ROW만을 포함 시킨다.
이러한 작업을 하기 위해 내부적으로 정렬 작업을 한다.
UNION ALL 연산자는 DATASET의 합집합을 보여주며 중복된 ROW가 있더라도 결과를 모두 보여준다.
대신 정렬이 발생하지 않으므로 UNION보다 빠른 응답을 보여준다.
// UNION을 이용하여 TEMP와 TCOM의 자료중 EMP_ID, SALARY, COMM을 보여주는 SQL을 만들어라
이때 SALARY, COMM이 모두 존재하는 사번은 두줄로 나와야 한다,
SALARY와 COMM을 모두 나타내주기 위해서 TEMP에서는 0 COMM을
TCOM 에서는 0 SALARY를 하여 없는값은 0으로 나타나게 해주었다.
UNION ALL 을 사용한 SQL문은 정렬이 발생하지 않았기 때문에 ORDER BY 를 통해서 정렬이 필요하다. 두 SELECT문의 실제 컬럼명이 같으면 컬러명을 통해서 정렬하면되지만 대개 다르므로 순서를 이용하는게 좋다.
정렬시 ORDER BY 1 의 경우는 테이블의 컬럼순서 번호이다.
여기서 1을 EMP_ID로 정렬을 한다는 의미이다.
INTERSECT : 교집합을 구해준다.
MINUS : 두 결과간의 차집합을 구해준다.(첫번째 쓰는 쿼리문에서 두번째 쓰는 쿼리문을 제외한다)
(A MINUS B) = (A - B)
'dev > DB' 카테고리의 다른 글
[DB/Oracle] SQL 모음 (0) | 2022.04.28 |
---|---|
[DB/Oracle] ORACLE 개념 (0) | 2022.02.22 |
[DB/Oracle] SUB QUERY (0) | 2022.02.22 |
[DB/Oracle] JOIN (0) | 2022.02.19 |
[DB/Oracle] sqlplus 한글깨짐 조치 및 system 계정 PWD분실시 (0) | 2022.01.13 |