SQLD 학습을 진행하며 기억할 내용을 간략히 기록합니다.
용어로 Entity(엔티티)를 엔터티라고 발음하지만 엔티티로 정리합니다.
집합 연산자를 사용한 SQL의 ORDER BY절은 최종 결과를 정렬하기 때문에 각각의 집합이 아닌 가장 마지막 줄에 한번만 사용할 수 있다.
CUBE와 ROLLUP은 함수의 인자가 2개 이상일 경우는 달라질 수 있지만 인자가 1개일 때는 결과가 같다.
서로 다른 행의 비교나 연산을 위해 만든 함수
GROUP BY 안쓰고 그룹 연산 가능
PARTITION BY: 출력할 총 데이터 수 변화 없이 그룹연산을 수행할 컬럼 지정
ORDER BY: RANK
는 필수
ROWS|RANGE BETWEEN A AND B: 연산 범위 설정, ORDER BY
필수
NTILE(n)
설명: 결과 집합을 n개의 균등한 그룹(버킷)으로 나누고, 각 행이 속한 그룹의 번호를 반환합니다. 예를 들어, NTILE(4)는 결과를 4개의 버킷으로 나누고 각 행에 버킷 번호를 할당합니다.
용도: 데이터의 분포를 일정한 수의 그룹으로 나누어 분석할 때 사용됩니다.
LEAD(column, offset, default) - 이후 값
설명: 현재 행에서 지정된 offset만큼 떨어진 후의 행의 값을 반환합니다. offset은 기본값 1을 가지며, default는 offset이 범위를 벗어날 때 반환할 기본값을 설정할 수 있습니다.
용도: 현재 행과 비교하여 후속 행의 값을 참조할 때 사용됩니다.
LAG(column, offset, default) - 이전 값
설명: 현재 행에서 지정된 offset만큼 이전 행의 값을 반환합니다. offset은 기본값 1을 가지며, default는 offset이 범위를 벗어날 때 반환할 기본값을 설정할 수 있습니다.
용도: 현재 행과 비교하여 이전 행의 값을 참조할 때 사용됩니다.
CUME_DIST()
설명: 현재 행의 값이 윈도우 내에서 전체 집합의 몇 퍼센트를 차지하는지 누적 분포 비율을 반환합니다. 즉, 현재 행보다 작거나 같은 값의 비율을 백분율로 나타냅니다.
용도: 데이터의 상대적 위치를 백분율로 표현할 때 사용됩니다.
RANK(): 1, 2, 2, 4, 5 ...
DENSE_RANK(): 1, 2, 2, 3, 4 ...
그룹별로 순위를 구해야 할 때
SELECT DEPT
, ENAME
, SAL
, COMM
, RANK() OVER (PARTITION BY DEPT ORDER BY SAL DESC, COMM DESC) RANK
FROM EMP
ORDER BY DEPT, SAL DESC, COMM DESC
START WITH: 데이터 출력을 시작할 행 지정 조건
CONNECT BY PRIOR: 그 다음 행이 나올 조건
ORDER SIBLINGS BY: 형제 노드 사이에서 정렬을 지정하는 구문 (같은 레벨에서)
오라클에서 루트 노드의 LEVEL값은 1이다.
SQL Server에서 계층형 질의문은 CTE를 재귀 호출함으로써 계층 구조를 전개한다.
SQL Server에서 계층형 질의문은 앵커 멤버를 실행하여 기본 결과 집합을 만들고 이후 재귀 멤버를 지속적으로 실행한다.
오라클의 계층형 질의문에서 WHERE절은 모든 전개를 진행한 이후 필터 조건으로서 조건을 만족하는 데이터만을 추출하는데 활용된다.
오라클 계층형 질의문에서 PRIOR 키워드는 SELECT, WHERE절에서도 사용할 수 있다, CONNECT BY 절에서만 사용할 수 있는게 아니다.
순환참조가 무한히 지속되는 경우가 있을 수 있음
EMPLOYEE_ID = 1000, MANAGER_ID = 2000
EMPLOYEE_ID = 2000, MANAGER_ID = 1000
SELECT EMPLOYEE_ID, NAME, LEVEL
FROM EMPLOYEES2
START WITH EMPOYEE_ID = 1000
CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID;
CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID;
CONNECT BY NOCYCLE PRIOR EMPLOYEE_ID = MANAGER_ID;
NOCYCLE을 붙여서 순환참조를 막는다.
SQL Server
에서는 지원하지 않는다.뷰는 단지 정의만을 가지고 잇으며, 실행 시점에 질의를 재작성하여 수행한다.
뷰의 장점 중 독립성은 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다.
뷰는 보안을 강화하기 위한 목적으로 활용 가능하다.
실제 데이터를 저장하고 있는 뷰를 생성하는 기능을 지원하는 DBMS도 있다.