본문 바로가기

Study/SQLD

[SQLD] SQLD 정리 (1)

1. 기본 테이블이 삭제되면 그 테이블 참조해 만든 뷰 역시 삭제

2. 뷰 참조해 또 다른 뷰 생성 가능

3. 원본 테이블 노출되지 않으므로 데이터 안전하게 보호 가능

4. 가상의 테이블이므로 물리적으로 구현되지 않아 저장공간 차지 X


속성

1. 파생속성은 가급적 적게 정의하는 것이 좋음

2. 파생속성은 다른 속성에 영향 받아 발생하는 속성

3. 설계속성은 업무상 필요한 데이터 외 업무를 규칙화하기 위해 기본 속성 변형하는 속성


데이터베이스 트랜잭션

1. 원자성 (atomicity) : 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행 or 전혀 실행되지 않은 상태로 남아야 함

2. 일관성 (consistency) : 트랜잭션의 작업 처리 결과는 항상 일관성 있어야 함

43. 고립성, 독립성 (isolation) : 트랜잭션이 실행되는 도중 른 트랜잭션의 영향 받아 잘못된 결과 만들어서는 안됨

4. 지속성 (durability) : 트랜잭션이 성공적으로 완료되었으면, 결과는 영구적으로 반영되어야 함


성능 데이터 모델링

1. 성능 비용 감소시킬 수 있음

2. 성능 향상 위해 튜닝 수행하면 데이터베이스 모델링 변경될 수 있음

3. 배치 통해 입력되는 데이터 용량이 크면 클수록 성능 튜닝 위한 비용 증가

4. 애플리케이션 트랜잭션 유형 파악함


비식별자 관계

: 부모 엔터티로부터 속성을 받았지만 자식 엔터티의 주식별자로 사용하지 않고 일반적인 속성으로만 사용하는 것

 

대체 여부에 따른 식별자

본질 식별자 : 업무에 의해 만들어지는 식별자

인조 식별자 : 인위적으로 만들어지는 식별자


ERD IE표기법, Barker표기법

ERD IE표기법, Barker표기법


윈도우 함수

1. 서브쿼리는 사용 가능하지만, 중첩쿼리는 사용 불가능

3. GROUP BY와 Window Function 병행 사용 X

3. 집계 Window Function 사용할 때 Window 절과 함께 사용하면 집계의 대상이 되는 레코드 범위 지정 가능

4. 결과 건수 줄이지 X (집계되지만 원본 레코드는 그대로 유지)

5. 사용자가 명시적으로 튜닝해줘야 하는 경우 있음

 

윈도우 함수 종류

1. 순위함수

RANK :  공동 순위 개수 만큼 건너뛰고 다음 순위 반환

DENSE_RANK : 건너뛰는 것 없이 순위 구함

ROW_NUMBER : 행 출력되는 위치 순위 제공 함수

 

2. 행순서 함수

FIRST_VALUE : 윈도우 별 처음 나온 값 반환

LAST_VALUE : 윈도우 별 가장 마지막에 나오는 값 반환

LAG  : 파티션 별 지정한 수 만큼 앞에 있는 행 가져옴 (출력할 행, 앞 행 개수, null일 경우 반환값)

LEAD : 파티션 별 지정한 수 만큼 뒤에 있는 행 가져옴

 

3. 비율함수

PERCENT_RANK : 파티션 별 윈도우에서 제일 먼저 나오는 것을 0, 제일 늦게 나오는 것을 1로 해서 행의 순서를 기준으로 백분율 구함

CUME_DIST : 현재 행보다 작거나 같은 데이터에 대해 누적 백분율 구함

NTILE : 인자로 전달된 개수 만큼 그룹으로 나눔


단일행 함수

sign(숫자) : 숫자가 양수인지, 음수인지, 0인지 부호 판정 (양수 -> 1, 0 -> 0, 음수 -> -1)

mod(숫자1, 숫자2) : 숫자1을 숫자2로 나눠 나머지 값 리턴

ceil / ceiling(숫자) : 숫자보다 크거나 같은 최소 정수 리턴 (-12.345 -> -12)

floor(숫자) : 숫자보다 작거나 같은 최대 정수 리턴 (-12.345 -> -13)


DECODE

SELECT DECODE(테이블명, 조건, 참일 때 출력될 값, 거짓일 때 출력될 값) FROM 테이블명;

CASE

SELECT CASE WHEN 조건1 THEN 결과1
		WHEN 조건2 THEN 결과2
		...
		ELSE 결과
	END
FROM 테이블명;

조건1이면 결과1 출력, 조건2면 결과2출력, 만족하는 조건 없으면 결과 출력

 

SEARCHED_CASE_EXPRESSION

SELECT 컬럼명,
	CASE WHEN 컬럼명 = '데이터값' THEN '결과'
		ELSE '결과'
	END [AS 별칭명]
FROM 테이블명;

 

SIMPLE-CASE_EXPRESSION

SELECT 컬럼명,
	CASE 컬럼명 WHEN '데이터값' THEN '결과'
    			ELSE '결과2'
	END [AS 별칭명]
FROM 테이블명;