SQL 활용
집합 연산자
- 종류: UNION, UNION ALL, INTERSECT, EXCEPT (or MINUS)
- 각각의 집합에 ORDER BY를 사용할 수 없다.
- 위에서부터 실행된다.
- ex) 위에서 UNION ALL 했어도 아래에서 UNION 하면 다 중복 제거 됨
Window Function
- 종류
- RATIO_TO_REPORT(칼럼): 대상 칼럼에서 해당 행의 비율을 리턴
- LAG(칼럼, n): n개 앞의 값, (SQL SERVER엔 지원 안 함)
- LEAD(칼럼, n): n개 뒤의 값, (SQL SERVER엔 지원 안 함)
- 집계
- SUM, AVG, MIN, MAX
- 집계 함수에서는 ORDER BY 하면 1~현재 행까지만 적용됨
- rank
- ROW_NUMBER: 중복 x
- RANK: 중복 o, 건너뜀 o
- DENSE_RANK: 중복 o, 건너뜀 x
- PERCENT_RANK: 1등을 0, 마지막을 1로 percent로 리턴
- CANE_DIST: 누적 분포도 (현재 행보다 작거나 같은 값을 가진 행의 비율)
- NTILE(n): 전체를 n개로 나눠서 1~n으로 등수를 매김
- ROWS(행으로 제한) & RANGE(값으로 제한)
- n PRECEPING: n칸 앞
- n FOLLOWING: n칸 뒤
- UNBOUNDED PRECEPING: 맨 앞
- CURRENT ROW: 현재 행
계층형 질의문
START WITH C2 IS NULL -- root의 조건
CONNECT BY PRIOR C1 = C2 -- PRIOR 붙은 쪽이 부모의 속성, SELECT, WHERE 절에서도 PRIOR 키워드를 사용해서 부모 항에서 값을 받아올 수 있음
ORDER SIBLINGS BY C3 DESC -- 형재간의 정렬
- 특징
- SQL SERVER:
- CTE를 재귀적으로 호출
- 앵커 맴버를 실행하여 기본 결과를 만들고 지속적으로 재귀 실행
- ORACLE:
- Where 절은 모든 전개를 하고 추출할 때 사용함
- PRIOR 키워드를 SELECT, WHERE 절에서 사용 가능
서브쿼리
- 다중 칼럼 서브 쿼리는 SQL Server에서 지원하지 않음
- inline view: From에 있는 서브 쿼리
- scala 서브쿼리: select에 있는 1행 1열 서브쿼리
GROUP BY
- GROUP BY 없어도 HAVING 문 사용 가능
- Grouping Functions
- Rollup (A, B, ...): 오른쪽부터 제외하며 Grouping
- Cube (A, B, ...): 인자들의 모든 조합으로 Grouping
- Grouping Sets ((A, B), B): 각각 조합으로 Grouping
- Grouping(칼럼)
- Grouping의 조건이 아니라 값이 null 일 때 (즉 합계 행일 때) 1을 리턴
- 아니면 0을 리턴