본문 바로가기
데이터베이스/Sql Quiz

SQLD 자격증대비 정리 - 1

by 베어그릴스 2023. 5. 25.
반응형

JOIN에 대한 설명

방법 설명
중첩 반복 조인
(Nested Loop Join)
- 좁은 범위에 유리
- 유리순차적으로 처리하며, Random Access 위주
- 후행(Driven) 테이블에는 조인을 위한 인덱스가 생성되어 있어야 함
- 실행속도 = 선행 테이블 사이즈 * 후행 테이블 접근횟수
색인된 중첩 반복 조인, 단일 반복 조인
(Single Loop Join)
- 후행(Driven) 테이블의 조인 속성에 인덱스가 존재할 경우 사용
- 선행 테이블의 각 레코드들에 대하여 후행 테이블의 인덱스 접근 구조를 사용하여 직접 검색 후 조인하는 방식
정렬 합병 조인
(Sort Merge Join)
- Sort Merge 조인은 해당 테이블의 인덱스가 없을때 수행이 된다.
- 테이블을 정렬(Sort) 한 후에 정렬된 테이블을 병합(Merge) 하면서 조인을 실행한다.
- 조인 연결고리의 비교 연산자가 범위 연산( >, < )인 경우 Nested Loop 조인보다 유리
- 두 결과집합의 크기가 차이가 많이 나는 경우에는 비효율적
해시 조인
(Hash Join)
- 해시(Hash)함수를 사용하여 두 테이블의 자료를 결합하는 조인 방식
- Nested Loop 조인과 Sort Merge 조인의 문제점을 해결
- 대용량 데이터 처리는 상당히 큰 hash area를 필요로 함으로, 메모리의 지나친 사용으로 오버헤드 발생 가능성

 

[TIP]

NULL 값은 비교에서 애초에 제외된다. where 조건의 IN() 연산자 안에 NULL이 있어도 비교연산을 수행하지 않는다.

 

방법 설명
ROLLUP - 전체합계와 소그룹 간의 소계를 계산하는 ROLLUP 함수

예)
GROUP BY ROLLUP (DEPTNO);
→ DEPTNO 합계(소계), 전체 합계를 조회
CUBE - CUBE는 제시한 칼럼에 대해서 결합 가능한 모든 집계를 계산한다.
- 다차원 집계를 제공하여 다양하게 데이터를 분석할 수 있다.

예)
GROUP BY CUBE(DEPTNO, JOB);
→ DEPTNO 합계, JOB 합계, DEPTNO & JOB 합계, 전체 합계를 조회
조합할 수 있는 모든 경우의 수가 조합된다.  *시스템에 부하를 많이 주는 단점이 있음
GROUPING SET - 원하는 부분의 소계만 손쉽게 추출하여 계산할 수 있는 GROUPING SETS 함수
[TEST18]
DNAME        JOB        SAL
----------------------------
ACCOUNTING   CLERK      1000
ACCOUNTING   MANAGER    2000
ACCOUNTING   PRESIDENT  3000
RESEARCH     CLERK      4000
RESEARCH     MANAGER    5000
RESEARCH     PRESIDENT  6000
SALES        CLERK      7000
SALES        MANAGER    8000
SALES        PRESIDENT  9000


SQL> 
SELECT DNAME
     , JOB
     , SUM(SAL) 
  FROM TEST18 
 GROUP BY 
       CUBE(DNAME,JOB)
;   

DNAME		     JOB		    SUM(SAL)
-------------------- --------------------
					       45000
		     CLERK		       12000
		     MANAGER		       15000
		     PRESIDENT		       18000
SALES					       24000
SALES		     CLERK			7000
SALES		     MANAGER			8000
SALES		     PRESIDENT			9000
RESEARCH				       15000
RESEARCH	     CLERK			4000
RESEARCH	     MANAGER			5000
RESEARCH	     PRESIDENT			6000
ACCOUNTING					6000
ACCOUNTING	     CLERK			1000
ACCOUNTING	     MANAGER			2000
ACCOUNTING	     PRESIDENT			3000

16 rows selected.

SQL> 
SELECT DNAME
     , JOB
     , SUM(SAL) 
  FROM TEST18 
 GROUP BY 
       ROLLUP(DNAME,JOB)
 ; 

DNAME		     JOB		    SUM(SAL)
-------------------- --------------------
SALES		     CLERK			7000
SALES		     MANAGER			8000
SALES		     PRESIDENT			9000
SALES					       24000
RESEARCH	     CLERK			4000
RESEARCH	     MANAGER			5000
RESEARCH	     PRESIDENT			6000
RESEARCH				       15000
ACCOUNTING	     CLERK			1000
ACCOUNTING	     MANAGER			2000
ACCOUNTING	     PRESIDENT			3000
ACCOUNTING					6000
					       45000

13 rows selected.

SQL> 
SELECT DNAME
     , JOB
     , SUM(SAL) 
  FROM TEST18 
 GROUP BY 
       GROUPING SETS(DNAME,JOB)
;

DNAME		     JOB		    SUM(SAL)
-------------------- -------------------- ----------
ACCOUNTING					6000
RESEARCH				       15000
SALES					       24000
		     CLERK		       12000
		     PRESIDENT		       18000
		     MANAGER		       15000

6 rows selected.

SQL> 
SELECT DNAME
     , JOB
     , SUM(SAL) 
  FROM TEST18 
 GROUP BY CUBE(DNAME)
;

 

인덱스 생성 / 삭제

인덱스 생성
CREATE INDEX [인덱스 명] ON [테이블 명] [칼럼명]

복한 인덱스 생성
CREATE INDEX [인덱스 명] ON [테이블 명](칼럼명A, 칼럼명B)

유니크(UNIQUE) 인덱스 생성
CREATE UNIQUE INDEX [인덱스 명] ON [테이블 명](칼럼명A, 칼럼명B)

인덱스 삭제
DROP INDEX [인덱스 명]

 

반응형

'데이터베이스 > Sql Quiz' 카테고리의 다른 글

SQLD 노랭이 책 암기 - 1  (0) 2023.06.08

댓글