[SQLD] JOIN / 집합연산자 / 그룹함수
JOIN
NATURAL JOIN
, USING
→ 중복된 컬럼이 하나로만 출력됨. 중복된 컬럼이 가장 앞에 등장함. Alias 사용 불가능
A LEFT OUTER JOIN B
= A.col1 = B.col1(+)
- ON(조건) 사용 시 조건에 맞는 값들만 가져오고 나머지는 NULL로 채움
FROM A, B, C
→ A, B로 조인한 후 그 결과로 다시 C와 조인
CROSS JOIN
: Catesian Product 수행
- 1:M 조인의 M쪽에서 출렫된 행이 하나씩 단일행 함수의 입력값으로 사용 됨
다중행 함수도 단일행 함수와 동일하게 단일 값만 반환
- 단일행 함수: SUBSTR, TRIM, ABS, SYSDATE, NVL, …
다중행 함수: 집계함수, 그룹함수, 윈도우함수
집합연산자
UNION
: 합집합. 정렬 작업 있음
INTERSECT
: 교집합. 정렬 작업 있음
MINUS
(SQL Sever에서는 Except): 차집합. 정렬 작업 있음
UNION ALL
: 합집합에서 중복 데이터가 두 번 출력됨. 중복 데이터 존재. 정렬 작업 없음. 빠름
- ~ UNION ALL ~ UNION ~ 수행 시 UNION이 마지막에 수행되므로 중복 제거됨
그룹함수 ⭐️
- 모두 일반 그룹함수를 사용해 동일한 결과 추출 가능
- 집계된 레코드에서 집계 대상 컬럼 이외의 GROUP 대상 컬럼의 값은 NULL을 반환
ROLLUP
: 총합행 존재. 한쪽만 결과가 나와서 계층 구조
- 일반적인 누적에 대한 총계를 구할 때 편리
- ROLLUP(A, B)와 ROLLUP(B, A)의 결과는 같지 않음
CUBE
: 총합행 존재. 양쪽 다 결과가 나옴. 행의 수가 많음
- Cross-Tab에 대한 Summary를 추출하는데 사용
- Item Total값과 Column Total값을 나타 낼 수 있음
- CUBE(A, B)와 CUBE(B, A)의 결과는 같음
GROUPINGSETS
- 특정 항목에 대한 소계 계산. 총합행 없음
- 각각의 컬럼으로 GROUP BY한 값을 UNION ALL 한 것과 동일
- 함수 인자 컬럼의 순서는 결과에 영향을 미치지 않음
GROUPING
- ROLLUP, CUBE에 모두 사용 가능
- 그룹함수에 의해 소계나 총합 등 집계된 데이터일 경우 1을 반환, 아니면 0을 반환