코딩 기록들
오라클 SQLD 정리 본문
UNION vs UNION ALL
-> union all 은 중복을 허용함
-> union = union all + distinct + orderby
GROUP BY
- 집계함수 결과는 NULL값 가진 행 제외하고 수행함
- GROUP BY 절에서는 ALIAS 사용불가능
- GROUP BY 절 보다 WHERE절이 먼저 수행됨
그룹함수 ( 집계함수 VS 분석함수 )
* 집계함수
- 여러 행, 테이블 전체 행으로부터 그룹별로 집계하여 결과 반환(그룹별 1개의 행을 반환)
EX) ROLL UP, CUBE, GROUPING
ROLLUP
GROUP BY ROLLUP(A, B)
- 맨 처음 명시한 컬럼인 A에 대해서만 소그룹 합계를 보여줌
- 소그룹 간의 합계를 계산한다.
- GROUP BY로 묶은 각각의 소그룹 합계와 전체합계 모두 구할 수 있음
- 보통 NULL로 표현된 부분이 ROLLUP 함수를 써서 나온 합계
- 가장 부담이 적음. 성능에 (-)영향 주지 않음 (GROUPING에 비해서)
CUBE
GROUP BY CUBE(A, B);
- GROUP BY절에 명시한 모든 컬럼에 대해 소그룹 합계를 계산해줌 (ROLLUP과의 가장 큰 차이)
- 성능에 (-)영향 주지 않음
GROUPING SETS
GROUPING SETS
- ROLLUP, CUBE보다 훨씬 결과가 단순함. 특정 항목에 대한 합계를 계산해줌
- 계층구조가 평등한 관계이므로, 인수의 순서가 바뀌어도 결과는 같다
SELECT DEPTNO, JOB, SUM(SAL) S_SAL, GROUPING(DEPTNO), GROUPING(JOB)
FROM SCOTT.EMP
GROUP BY GROUPING SETS(DEPTNO, JOB);
GROUPING : 0인 부분 : 그루핑에 사용되었다는 뜻
https://for-my-wealthy-life.tistory.com/44
* 분석함수
- 집계 결과를 각 행마다 보여줌 ( = 그룹별 결과를 각 행마다 보여주는것 )
EX) OVER (PARTITION BY ~~~)
- 반드시 OVER절을 함께 사용해야 하고
- OVER 절 내부에서 PARTITION BY 절을 사용하지 않을경우 결과 전체를 집계함 ( PARTITION BY 절을 사용하면 쿼리 결과에서 해당 칼럼을 그룹으로 묶어서 결과를 표시)
- 분석함수 종류 : 순위함수(RANK, DENSE_RANK, ROW_NUMBER, NTILE), 집계함수(SUM, MIN, MAX, AVG, COUNT), 기타함수(LAG, LEAD,=>하나의 쿼리에서 동시에 다른 ROW값에 접근할수있는 함수 RATION_TO_REPORT)
-- LAG (expr, offset, default) OVER (PARTITION BY 절)
- PARTITION_TO_REPORT : 계산대상 값 전체에 대한 현재 ROW의 상대적인 비율 값 반환
순위함수 (RANK, DENSE_RANK, ROW_NUMBER)
- 동일한 순위를 다르게 매겨야 하는 경우
-- 순위함수 사용시 ORDER BY 절 필수입력!
동일한 값 | 다음순위 | |
RANK | 중복순위 부여 | 중복순위 개수만큼 건너뛰고 반환 |
DENSE_RANK | 중복순위 부여 | 중복순위 상관없이 순차적으로 반환 |
ROW_NUMBER | 중복 관계 없이 순차적 순위 반환 |
JOIN
INNER JOIN
- 두 개의 테이블로 부터 조인조건 만족하는 데이터 '만' 반환
OUTER JOIN
- 기준이 아닌 테이블의 데이터 중 조인조건 만족하는 데이터는 출력 & 만족안하는 데이터는 NULL값 출력
CARTESIAN JOIN
- 조인조건 없이 테이블을 조인하는 것
-- CROSS JOIN (데이터를 만들어낼때 많이 사용)
SELF JOIN
- 관계형 DB모델에서 순환참조 관계로 표현된 개체를 참조할 때 주로 사용
- 복잡한 순환관계 구현을 위해 CTE(일반 상용 DBMS), CONNECT BY(오라클) 방식 사용함
ANSI JOIN
- FROM절 다음에 CROSS JOIN
- INNER JOIN ON 테이블명
- 두 테이블에 각각 조인을 정의한 컬럼 이름이 동일하다면
: USING(공통컬럼명) 으로 쓸수있음
: USING절에서 조인할 컬럼을 지정하여 구문 더 간단히 표현가능
ANSI VS ORACLE JOIN
서브쿼리
- 단일행 서브쿼리 : 수행결과가 오직 하나의 ROW 만 반화
- 다중행 서브쿼리 : 서브쿼리에서 반환되는 결과가 두개이상의 행일때 사용 : IN, ANY(뜻: OR), ALL(뜻: and), EXIST
-- 여기는 키워드 위주로만 접근하기~!
NESTED LOOP JOIN
- 가장 보편적으로 사용되는 조인방식
- 드라이빙 테이블(가장먼저 읽어야하는 테이블)선택에 따라 성능차이가 발생함(드라이빙 테이블의 선택이 매우중요)
- 조인조건으로 사용될 컬럼에 "인덱스가 존재하는지" 여부도 중요함 (꼭 인덱스 사용함)
- OLTP (온라인 처리, 부분처리, 소량처리)에 유리함
HASH JOIN
- 두 테이블중 하나를 "해테이블"로 선정하여, 해시알고리즘으로 비교 (메모리에서 조인하는 방식, '=' 비교를 통한 방식에서 사용가능)
- 대용량처리(많은데이터 처리) / 배치처리 할 때 빠름
- 인덱스를 사용하지 않음
- 정렬작업이 없음
- EQUAL JOIN에서'만' 해당 조인 방식을 사용할 수 있음
SORT MERGE JOIN
- 대량데이터 조인에 유리하고, NESTED ROOP와는 다름
- = 뿐만이 아닌 NOT EQ에서도 활용가능함
- 정렬하고, 합치는 방식 !
- ORDERBY를 통해서 데이터를 정렬한 후 조인
'Database Programming' 카테고리의 다른 글
[Database Programming] 10. 데이터베이스 구성 실습 (분석)1 (1) | 2024.02.27 |
---|---|
[Database Programming] 9. 데이터 삽입, 수정, 삭제(INSERT, UPDATE, DELETE) (0) | 2024.02.21 |
[Database Programming] 3. ER - Diagram (1) | 2024.02.16 |
[Database Programming] 2. SQL (SELECT, FROM, ORDER BY, WHERE) (0) | 2024.02.15 |
[Database Programming] 1. DBMS (1) | 2024.02.15 |