이번 포스팅에서는 이전 포스팅에 이어서 SQL 자격검정 실전문제 책을 보며 익힌 내용들을 정리하는 시간을 가져보도록 하겠습니다.
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
와 ROWS CURRENT ROW
는 SQL에서 윈도우 함수의 사용을 지정하는 구문입니다. 이 구문은 주로 집계 함수와 함께 사용되어, 데이터의 특정 범위에 대한 계산을 수행하는데 도움을 줍니다.
이 구문은 현재 행과 그 이전의 모든 행을 포함하는 범위를 정의합니다. 즉, 윈도우 함수는 현재 행을 포함하여 그 이전의 모든 행에 대해 계산을 수행합니다.
SELECT
employee_id,
salary,
SUM(salary) OVER (ORDER BY employee_id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_salary
FROM
employees;
해당 쿼리는 employee_id
로 정렬된 각 직원의 salary
에 대해 누적 합계를 계산합니다. ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
구문 덕분에 첫 번째 행부터 현재 행까지의 모든 행의 salary
가 합산됩니다.
ROWS CURRENT ROW
구문은 윈도우 함수가 계산을 수행할 때, 오직 현재 행만 포함하도록 합니다. 즉, 윈도우 함수는 현재 행의 값만을 사용하여 계산을 수행합니다.
SELECT
employee_id,
salary,
SUM(salary) OVER (ORDER BY employee_id ROWS CURRENT ROW) AS current_salary
FROM
employees;
해당 쿼리는 employee_id
로 정렬된 각 직원의 salary
를 단순히 현재 행의 salary
값으로 반환합니다. ROWS CURRENT ROW
구문은 현재 행의 값만을 포함하기 때문에 결과는 salary
와 동일하게 나옵니다.
GROUPING
함수는 GROUP BY
절의 결과에서 열이 실제 값인지 아니면 집계된 값인지 확인하는 데 사용됩니다. 집계된 값일 경우 1을, 그렇지 않으면 0을 반환합니다.
SELECT
CASE
WHEN GROUPING(region) = 1 THEN 'All Regions'
ELSE region
END AS region,
CASE
WHEN GROUPING(product) = 1 THEN 'All Products'
ELSE product
END AS product,
SUM(amount) AS total_amount
FROM
sales
GROUP BY
ROLLUP(region, product);
region | product | total_amount |
---|---|---|
North | Product1 | 100.00 |
North | Product2 | 150.00 |
North | All Products | 250.00 |
South | Product1 | 200.00 |
South | Product2 | 250.00 |
South | All Products | 450.00 |
All Regions | All Products | 700.00 |
결과는 GROUP BY ROLLUP(region, product)
로 생성된 부분 합계와 총합계를 포함합니다. CASE
문과 GROUPING
함수를 사용하여 각 부분 합계와 총합계 행을 적절히 표시할 수 있습니다.
LAG
함수를 이용해 파티션별 윈도우에서 이전 몇 번째 행의 값을 가져올 수 있습니다. 인자 값이 하나이면 이전 1번째 행의 값을 가져오게 됩니다.
LEAD
함수를 이용해 파티션별 윈도우에서 이후 몇 번째 행의 값을 가져올 수 있습니다. 인자 값이 하나이면 이후 1번째 행의 값을 가져오게 됩니다. SQL Server
에서는 지원하지 않는 함수입니다.
REVOKE
문을 사용하여 권한을 취소하면 권한을 취소당한 사용자가 WITH GRANT OPTION
을 통해서 다른 사용자에게 허가했던 권한들도 모두 연쇄적으로 취소됩니다.
RESTRICT
는 SQL 데이터베이스에서 주로 외래 키 제약 조건을 설정할 때 사용되는 옵션입니다. RESTRICT
옵션은 특정 동작이 제한되어야 함을 지정합니다. 특히, 외래 키가 참조하는 데이터가 삭제되거나 업데이트될 때 참조 무결성을 유지하기 위한 옵션으로 사용됩니다.
RESTRICT
는 스키마가 공백인 경우에만 삭제가 됩니다.