December 18, 2023
Analytic SQL - 집계(Aggregate) Analytic과 Window 상세 # Aggregate Functions vs Window Functions # Aggregate Functions Group by는 원본 데이터 집합의 레벨을 변경하여 적용 Window Functions Analytic SQL은 원본 데이터 집합의 레벨을 그대로 유지하면서 적용 Window를 이용하여 Row 단위의 집합 연산 수행 가능 원본 데이터의 레벨을 그대로 유지하면서, 그룹핑 레벨에서 자유롭게 Window의 이동과 크기를 조절하면서 Analytic을 수행 Analytic SQL 적용 로직 # <Analytic function> (인자1, ...) OVER ( [Partition절] [Sorting절] [Window절] ) 자유로운 window 설정에 따른 analytic 구사가 가능하므로, SQL의 Analytic 함수를 window 함수로도 지칭한다.
...
December 18, 2023
섹션 8. 서브 쿼리(Sub-query) # 서브쿼리(Sub-query) # 서브쿼리는 하나의 쿼리 내에 또다른 쿼리가 포함되어있는 쿼리를 의미 서브 쿼리는 메인 쿼리(Main Query) 내에 포함되어있는 관계 Where절에 사용될 경우 복잡한 업무적인 조건을 직관적인 SQL로 표현하여 필터링하는데 주로 사용됨 서브쿼리 유형 # Where절에 사용되는 서브쿼리 -- 평균 급여 이상의 급여를 받는 직원 select * from hr.emp where sal >= (select avg(sal) from hr.emp); -- 가장 최근 급여 정보 select * from hr.emp_salary_hist a where todate = (select max(todate) from hr.
...
December 17, 2023
조인(Join) - 조인 기반 메커니즘 # 조인 # 2개 이상의 테이블을 서로 연결하여 데이터 추출 관계형 DB에서는 조인을 통해 서로 다른 테이블간의 정보를 원하는 대로 가져올 수 있음 중요한 부분 # 1:M 조인시, 결과 집합은 M 집합의 레벨을 그대로 유지한다. 조인 결과 : M 집합 Left Outer Join # Right Outer Join은 사용하지 말자. -> 테이블 위치를 바꾸면 Left Outer join처럼 사용 가능 Left Outer Join 또다른 표기 (+) # SELECT * FROM TEST1 A, TEST2 B WHERE A.
...
December 17, 2023
Date, Timestamp, Interval 다루기 # Date 일자로서 년, 월, 일 정보를 가짐. YYYY-MM-DD Timestamp 일자를 시간 정보까지 같이 가짐. YYYY-MM-DD HH24:MI:SS Time 오직 시간 정보만 가짐. HH24:MI:SS Interval N days HH24:MI_SS pattern # hh24 하루중 시간(00-23) hh12 하루중 시간(01-12) mi 분(00-59) ss 초(00-59) yyyy 년도 mm 월(01-12) dd 일(월중 일자 01-31) month 월 이름 day 요일 이름 w 월의 주(1-5) ww 년의 주(1-52) d 요일. 일요일(1) ~ 토요일(7) am 또는 pm AM 또는 PM 표시 tz 시간대 interval 활용 # Date 타입에 숫자값을 더하거나/빼면 숫자값에 해당하는 일자를 더하거나/빼서 날짜 계산 곱셈/나눗셈은 불가능 -- DATE 타입에 곱하기나 나누기는 할 수 없음.
...
December 17, 2023
Group by 와 집계 함수(Aggregate Function) # Group by절 # Group by 절에 기술된 컬럼 값(또는 가공 컬럼값)으로 그룹화 한 뒤 집계(Aggregation) 함수와 함께 사용되어 그룹화된 집계 정보를 제공 Group by 절에 기술된 컬럼 값으로 반드시 1의 집합을 가지게 됨 Select 절에는 Group by 절에 기술된 컬럼(또는 가공 컬럼)과 집계 함수만 사용될 수 있음 Null을 계산하지 않음 case~when 사용한 pivoting # Group by 시 행 레벨로 만들어진 데이터를 열 레벨로 전환할 때 Aggregate와 case when을 결합하여 사용 -- DEPTNO로 GROUP BY하고 JOB으로 PIVOTING SELECT SUM(CASE WHEN JOB = 'SALESMAN' THEN SAL END) AS SALES_SUM , SUM(CASE WHEN JOB = 'MANAGER' THEN SAL END) AS MANAGER_SUM , SUM(CASE WHEN JOB = 'ANALYST' THEN SAL END) AS ANALYST_SUM , SUM(CASE WHEN JOB = 'CLERK' THEN SAL END) AS CLERK_SUM , SUM(CASE WHEN JOB = 'PRESIDENT' THEN SAL END) AS PRESIDENT_SUM FROM HR.
...