advanced

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을 리턴