| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- 여행
- GroundEffect
- 아비정전
- 쉐이더 기본개념
- 발없는 새
- effect
- SwordSlashEffect
- MeteorEffect
- sql
- EffectReel #UNITY
- 파티클시스템 #모듈
- 경주
- 언리얼 블루프린트
- sqld #sqld 개념정리
- Today
- Total
창작과 기록
SQLD 개념정리 08. 핵심 요약 본문
1과목 데이터 모델링의 이해
1장 데이터 모델링의 이해
1. 데이터 모델의 이해
모델링의 특징
- 추상화
- 단순화
- 명확화
모델링의 관점 : 데이터 관점, 프로세스 관점, 상관 관점
데이터 모델링이란
- 정보시스템을 구축하기 위한 데이터 관점의 업무 분석 기법
- 현실세계의 데이터에 대해 약속된 표기법에 의해 표현하는 과정
- 데이터베이스를 구축하기 위한 분석/설계의 과정
데이터 모델링의 중요성
- 파급효과
- 복잡한 정보 요구사항의 간결한 표현
- 데이터 품질
데이터 모델링 유의점
- 중복 : 중복 없어야함
- 비유연성 : 유연해야함
- 비일관성 : 일관성있어야함
데이터 모델링 단계 (개. 논. 물)
- 개념적 모델링 : 추상적, 요구사항 분석, 업무중심적이고 포괄적
- 논리적 모델링 : 가장 핵심, 정규화, key 속성 관계등 표현, 재사용성 높음
- 물리적 모델링 : 구체적, 하드웨어적, 실제 데이터베이스에 어떻게 표현할것인가
데이터 독립성의 필요성
- 유지보수 비용
- 데이터 복잡도
- 데이터 중복성
- 요구사항 대응
데이터 독립성 요소 (외. 개. 내) _ 논리적, 물리적
- 외부스키마 : 사용자 관점, 뷰 관점, 개개인의 사용자나 프로그래머
- 개념스키마 : 모든 사용자 관점 통합, 조직 전체 DB, 통합 관점
- 내부스키마 : 물리적 저장장치에 실제 저장
- 논리적 독립성 : 개념 스키마가 변경되어도 외부 스키마에 영향 X
- 물리적 독립성 : 내부 스키마가 변경되어도 개념 스키마에 영향 X, 저장장치의 구조 변경
ERD : 피터첸이 만든 데이터 모델 표기법
ERD 작성 순서 : 엔티티 그리기 → 엔티티 배치 → 엔티티간 관계 설정 → 관계명 기술 → 참여도 기술 → 필수여부 기술
- 가장 중요한 엔티티를 왼쪽 상단에
- 선택 여부는 ㅇ로 표현
2. 엔티티
엔티티 : 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 집합적인 것, 인스턴스의 집합
엔티티의 특징
- 반드시 해당 업무에서 필요하고 관리하고자 하는 정보여야함
- 유일한 식별자에 의해 식별가능
- 영속적으로 존재하는 인스턴스의 집합 → 인스턴스가 2개 이상
- 업무 프로세스에 의해 이용되어야함
- 반드시 속성이 있어야함
- 다른 엔티티와 최소 1개 이상의 관계가 있어야함
엔티티의 종류, 분류

- 유무형에 따른 분류
- 유형 엔티티 : 물리적 형태 O, 안정적이고 지속적 사용 → ex) 사원, 물품, 강사
- 개념 엔티티 : 물리적 형태 X, 관리해야할 개념적 정보 → ex) 조직, 보험상품
- 사건 엔티티 : 업무를 수행함에 따라 발생되는 엔티티 → ex) 주문, 청구, 미납
- 발생시점에 따른 분류
- 기본 엔티티 : 업무에 원래 존재하는 정보, 독립적, 부모 역할
- 중심 엔티티 : 기본엔티티로부터 발생, 중심적 역할
- 행위 엔티티 : 두개 이상의 부모엔티티로부터 발생
- 엔티티의 명명
- 현업업무에서 사용하는 용어
- 약어 X
- 단수명사
- 유일성
- 생성의미대로 이름 부여
3. 속성
속성 : 업무에서 필요로 하는 인스턴스로 관리하고자 하는 의미상 더 이상 분리되지 않는 최소의 데이터 단위
- 한 개의 엔티티는 두 개 이상의 인스턴스의 집합
- 한 개의 엔티티는 두 개 이상의 속성을 가짐
- 한 개의 속성은 한 개의 속성값을 가짐
속성 분류
특성에 따른 분류
- 기본속성 : 업무로부터 추출한 모든 속성, 가장 일반적이고 많음
- 설계속성 : 업무상 필요한 데이터 이외에 데이터 모델링을 위해, 규칙화를 위해 새로 만든 속성
- 파생속성 : 계산된 값
엔티티 구성방식에 따른 분류
- PK 속성 / FK 속성 / 일반 속성 → PK, FK에 해당 안될시
- 복합 속성 / 단순 속성
- 다중값 속성 / 단일값 속성
속성의 명명
- 해당 업무에서 사용하는 이름 부여
- 서술식 속성명 사용 X
- 약어 사용 X
- 전체 데이터모델에서 유일성 확보
도메인 : 속성이 가질 수 있는 값의 범위
4. 관계
관계 분류
| 존재에 의한 관계 | 행위에 의한 관계 | |
| UML 관계 | 연관관계 : 항상 이용하는 관계 | 의존관계 : 상대방 클래스의 행위에 의해 관계가 형성 |
| 소스코드 | 멤버변수 | 메소드에서 파라미터 |
| 클래스 다이어그램에서의 표현 | 실선 | 점선 |
ERD에서는 실선과 점선 구분 X
관계 표기법
- 관계명 → 애매한 동사를 피한다, 현재형
- 관계차수 : 1대1, 1대M 등..
- 관계선택사양 : 필수 / 선택
관계 체크사항
- 두 엔티티 사이에 관심있는 연관규칙이 존재하는가?
- 두 엔티티 사이에 정보의 조합이 발생되는가?
- 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가?
- 업무기술서, 장표에 관계연결을 가능하게 하는 동사가 있는가?
5. 식별자
식별자의 특징
- 유일성 : 주식별자에 의해 엔티티내의 모든 인스턴스들이 유일하게 구분되어야함
- 최소성 : 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수
- 불변성 : 주식별자의 값은 자주 변하지 않는 것이여야 함
- 존재성 : 주식별자가 지정이 되면 반드시 값이 들어와야함 → null X
식별자의 분류
| 대표성 여부 | 주식별자 | 각 튜플 구별가능한 구분자, 타 엔티티와 참조 관계 연결가능 |
| 보조 식별자 | 각 튜플 구별가능한 구분자이지만 타 엔티티와 참조관계 연결 불가 | |
| 생성 방식 | 내부식별자 | 엔티티 내부에서 스스로 만들어짐 |
| 외부식별자 | 타 엔티티와의 관계를 통하여 타 엔티티로부터 받아오는 식별 ( A.사원번호(PK) 가 B.사원번호(FK) ) | |
| 속성의 수 | 단일식별자 | 하나의 속성 |
| 복합식별자 | 둘 이상의 속성 | |
| 대체여부 | 본질식별자 | 실제 업무에 필요하여 만들어짐 |
| 인조식별자 | 관계 구성을 위해 인위적으로 만들어짐 |
식별자 관계, 비식별자 관계
| 구분 | 식별자 관계 | 비식별자 관계 |
| 목적 | 강한 연결관계 표현 | 약한 연결관계 표현 |
| 자식 주식별자 관계 | 자식 주식별자의 구성에 포함 | 자식 일반속성에 포함 |
| 표기법 | 실선 | 점선 |
| 기타 고려사항 | 반드시 부모 엔티티에 종속 SQL 조인 최소화 |
약한 종속관계 자식 주식별자 구성 독립적 부모쪽의 관계 참여 선택적 부모없이 자식 생성가능 부모가 먼저 소멸할 경우에도 사용 가능 |
2장 데이터 모델과 SQL
1. 정규화
정규화 : 입력/수정/삭제/ 성능은 향상, 조회성능은 향상될수도 저하될수도
- 1차 : 모든 속성은 반드시 하나의 값을 가져야함 → 원자값
- 2차 : 엔티티의 일반속성은 주식별자 전체에 종속 → 완전 종속 = 부분 함수 종속 제거
- 3차 : 엔티티의 일반속성 간에는 서로 종속 X → 이행 종속 제거
- BCNF : 결정자 후보키가 아닌 종속 제거
- 후보키란 기본키에 속하는 키를 말함 → 즉, 기본키에 속하지 않는 속성이 다른 속성을 결정하면 안됨
- 4차 : 다치 종속 제거
- 5차 : 조인 종속 제거
반정규화 : 정규화된 엔티티, 속성, 관계에 대해 성능향상과 개발운영의 단순화를 위해 중복, 통합 분리 등을 수행하는 기법 → 조회시 성능 향상
2. NULL 속성의 이해
- null: 모르는 값 → 0이나 공백과는 다름
- not null, pk로 정의되지 않은 데이터 유형은 null 값 포함 가능
- null + 연산자 결과 → null
- null 비교 결과 → unknown 또는 false
- NVL(oracle) = ISNULL(sql server) _같은 의미
2과목 SQL 기본 및 활용
1장 SQL 기본
1. 관계형 데이터베이스 개요
- DML 데이터 조작어 : select / insert / update / delete
- DDL 데이터 정의어 : create / alter / drop / rename / truncate
- DCL 데이터 제어어 : grant / revoke
- TCL 트랜잭션 제어어 : commit / rollback
2. SELECT 문
순서 : FROM → WHERE → GROUP BY → HAVING → ORDER BY
구문 : SELECT [ALL/DISTINCT] 컬럼 FROM 테이블
뒤에 나오는 WHERE 부터는 선택이나 SELECT, FROM은 필수
SELECT List에 서브쿼리 사용가능
3. 함수(FUNCTION)
문자형
- LOWER : 문자열을 소문자로
- UPPER : 문자열을 대문자로
- ASCII : 문자나 숫자의 ASCII 값 반환
- CHR : ASCII 값에 해당하는 문자 반환
- CONCAT : 문자열1, 2를 연결
- ex) CONCAT(‘RDBMS’,‘ SQL’) → ‘RDBMS SQL’
- || : 문자 연결
- e.g. A || 2 = A2
- SUBSTR : 문자열 중 m위치에서 n개의 문자 반환 → 이때 0부터시작아님 주의!
- e.g. SUBSTR(‘SQL Expert’,5,3) → ‘Exp’
- LENGTH : 문자열 길이를 숫자 값으로 반환
- LTRIM : 왼쪽부터 확인해서 지정문자 나타나면 제거
- ex) LTRIM(‘xxxYYZZxYZ’,‘x’) → ‘YYZZxYZ’
- TRIM : 양 끝 확인해서 지정문자 나타나면 제거
- ex) (‘x’ FROM ‘xxYYZZxYZxx’) → ‘YYZZxYZ’
- REPLCAE(문자열, 찾는문자열, [변경할문자열]) : 변경할문자 미입력시 제거
- <> 비교 → is not 같은 느낌
숫자형
- SIGN(숫자) : 숫자가 양수면1 음수면-1 0이면 0 반환
- MOD(숫자1, 숫자2) : 숫자1을 숫자2로 나누어 나머지 반환 → 숫자2가 0이면 숫자1반환
- CEIL(숫자) : 올림
- FLOOR(숫자) : 내림
- ROUND(38.5235,3) -> 38.524 다음 자리에서 반올림
- TRUNC(38.5235,3) -> 38.523 해당자리까지 남기고 버림
날짜형
- SYSDATE : 현재날짜와 시각 출력
- EXTRACT : 날짜에서 데이터 출력
- TO_DATE(’날짜’, ‘YYYY.MM.DD HH24:MI:SS’) → 문자를 날짜로 변환.
- 만약 MM까지만 있거나 하면 뒤는 자동으로 1일, 0시, 0분..이런식으로 바뀜
- 1 = 하루, 1/24 = 1시간, 1/24/60 = 1분
집계함수
- COUNT
- SUM
- AVG
- MIN
- MAX
- VARIANCE 분산
- STDDEV 표준편차
NULL 함수 및 치환함수
- NVL(인수1, 인수2) : 인수1이 NULL일 경우 인수2반환, 아니면 인수1 → SQL Sever의 ISNULL과 동일
- NVL2(a,b,c) : a가 null이 아니면 b 맞으면 c 반환
- NULLIF(인수1, 인수2) : 인수1==인수2이면 NULL반환, 아니면 인수1
- COALESCE(인수1, 인수2, 인수3…) : NULL이 아닌 최초의 인수 반환
- CASE 구문 & WHEN 조건 THEN & ELSE 처리 : 별도의 ELSE가 없으면 NULL이 ELSE의 디폴트가됨
[CASE 구문 예시]
CASE WHEN 조건 = ‘a’ THEN ‘b’
== CASE 조건 WHEN ‘a’ THEN ‘b’ (단순표현, =만 있는 경우)
== DECODE (조건, ‘a’, ‘b’) : ELSE NULL 생략 → (값1, 리턴1, 값2, 리턴2…., ELSE값)
(CASE문에서는 alias 쓸수없음: SELECT 절 이전에 처리되는 부분에서는 alias 사용x)
4. WHERE 절
구성요소
- 컬럼명
- 비교연산자
- 문자, 숫자, 표현식
- 비교 컬럼명(JOIN 사용시)
특징
- ISNULL, IS NOT NULL 사용하여 NULL 비교
- 처리 우선순위 : AND > OR
- 집계함수 사용 x
5. ORDER BY 절
ORDER BY 절에 칼럼명 대신 alias 나 컬럼 순서 나타내는 정수도 사용 가능
오름차순(ASC) 기본값으로 적용. DESC 명시하여 내림차순 정렬 처리 가능.
c.f. Oracle에서는 NULL을 가장 큰 값으로 취급
SQL Server에서는 NULL을 가장 작은 값으로 취급
6. GROUP BY, HAVING 절
GROUP BY 절을 통해 소그룹별 기준을 정한 후, SLECT 절에 집계합수 사용
NULL값도 그룹화 가능.
GROUP BY 절에서는 SELECT 절과 달리 ALIAS 사용 불가
집계 함수는 WHERE 절에는 올 수 없음.
WHERE절이 GROUP BY보다 선행하여 실행
GROUP BY 절에 의해 그룹화된 데이터 중 HAVING 절 만족하는 내용만 출력
WHERE 조건절은 GROUP BY 의 HAVING 조건보다 선행하여 실행한다.
7. 조인 (JOIN)
두 개 이상의 테이블들을 연결 또는 결합하여 데이터 출력하는 것
일반적인 경우 PK나 FK 값의 연관에 의해 조인 성립 → 관계가 없어도 조인 성립하는 경우도 존재
DBMS 옵티마이저는 항상 2개씩 테이블 짝을 지어 조인함 → ex) A join B joind C는 에러
N개의 테이블로부터 원하는 데이터를 조회하려면 최소 N-1개의 조인 조건이 필요하다
- USING 조건절 : JOIN 컬럼에 대해서 ALIAS 나 테이블 이름 붙일 수 없음 → equi, natural등에서 사용

INNER JOIN (EQUI JOIN)
구문: SELECT - FROM - WHERE 테이블1.컬럼1 = 테이블2.컬럼2;
→ ANSI/ISO SQL 표준 : SELECT FROM A. INNER JOIN B. ON A.컬럼 = B.컬럼
두 테이블의 중복되는 속성이 같은것만 남기는 조인 → 이때 속성이 두번나오게 되므로 하나를 제거하면 natural join
(내추럴은 중복속성 제거의미)
‘=’ 연산자 이외의 연산자 사용시 모두 NON EQUI JOIN
OUTER JOIN
LEFT / RIGHT / FULL
1. LEFT OUTER JOIN: 좌측 테이블 먼저 가져오고 우측 테이블에서는 조인된 데이터만 불러옴.
만약 우측테이블에 데이터가 없는 경우에는 NULL로 채운다.
2. RIGHT OUTER JOIN: LEFT OUTER JOIN의 반대로 실행
3. FULL OUTER JOIN: 모든 데이터를 읽어 조인하여 결과 생성
(INNER JOIN 가능한 것들 + 불가능한 것들은 NULL로 채운 값 _ 합집합)
NATURAL JOIN
두개 테이블에 공통인 행만 남기는것
NATURAL JOIN은 ON절 사용 불가
오라클에서는 JOIN, USING으로 NATURAL JOIN 가능 e.g. FROM A JOIN B USING (컬럼1);
[ORACLE, SQL Server 비교]
1. ORACLE
1) 공백은 null로 인식. ' ' = null
2) NVL
3) 오라클에서는 OUTER JOIN을 (+) 기호로도 처리가능
→ ANSI 문장으로 변경하려면 left/right 명시와 on절을 추가해줘야함
4) auto commit mode: off
예시 구문)
where A.ID = B.ID(+) -- (+)붙은 반대쪽이 주대상이됨
AND B.이름(+) = 'K' -- (+)가 붙은 조건은 ON절에 포함
== (동일)
FROM A LEFT OUTER JOIN B
ON (A.ID = B.ID AND B.이름 = 'K')
2. SQL Server
1) 공백 ' ' 은 null x
2) ISNULL
3) DML, DDL auto commit 기본값
DUAL 테이블
사용자 SYS가 소유하며 모든 사용자가 액세스 가능한 테이블
SELECT ~ FROM ~의 형식을 갖추기위한 일종의 더미 테이블
DUMMY라는 문자열 유형의 칼럼에 ‘x’라는 값이 들어있는 행을 1건 포함
SELECT 문장 실행 순서
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY (ALIAS 사용가능)
2장 SQL 활용
1. 서브쿼리
서브 쿼리 : 하나의 SQL문안에 포함되어 있는 또 다른 SQL문, 알려지지 않은 기준을 이용한 검색에 사용.
- 서브쿼리를 괄호로 감싸서 사용한다.
- 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능하다. 단일 행 비교 연산자는 서브쿼리의 결과가 반드시 1건 이하여야 하고 복수행 비교 연산자는 결과 건수와 상관없다.
- 서브쿼리에서 ORDER BY 사용 불가
- SELECT, FROM, WHERE, HAVING, ORDER BY, INSERT-VALUES, UPDATE-SET 절에서 사용 가능
스칼라 서브쿼리 : 컬럼을 반환하는 서브쿼리. 주로 SELECT에서 사용 → FROM절에는 올수없다.
인라인 뷰 (다이나믹 뷰) : FROM 절에서 사용되는 서브쿼리 → 메인쿼리에서 사용가능. ORDER BY를 사용 가능
중첩 서브 쿼리 → WHERE, HAVING
동작 방식에 따른 서브쿼리 분류
- 비연관 서브쿼리 : 서브쿼리가 메인쿼리 칼럼 안가짐. 메인쿼리에 값 제공 목적
- 연관 서브쿼리 : 서브쿼리가 메인쿼리 칼럼 가짐
반환 데이터에 따른 서브쿼리 종류
- 단일행 서브쿼리 : 실행결과 1건 이하
- → 단일 행 비교 연산자 : =,<,>,<> 등
- 다중행 서브쿼리 : 실행결과 여러 건
- WHERE COL1 IN(’A’, ‘B’)는 COL1 = ‘A’ or COL1 = ‘B’를 의미함. 그래서 IN안에 null이 와도 무시됨
- WHERE COL1 NOT IN(a, b) 은 col1 ≠ a and col1 ≠ b의미. 그래서 NULL 포함되면 항상 거짓
- EXIST는 True / False 반환 → WHERE EXIST (서브쿼리)
- WHERE COL1 = ALL (서브쿼리)
- → 다중 행 비교 연산자 : IN, ALL, ANY, SOME 등 → 단일 행 비교 연산자로도 사용가능
- 다중컬럼 서브쿼리 : 실행결과 컬럼 여러 개 → SQL Server에서는 X
뷰 View
뷰는 정의만 갖고있으며 실행 시점에 쿼리 재작성
실제 데이터를 저장하고 있는 뷰를 생성하는 기능을 지원하는 DBMS도 있다
장점
- 독립성 : 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다
- 편리성 : 복잡한 질의를 뷰로 생성하여 질의 단순하게 가능. 또한 해당 SQL 자주 사용시 뷰를 이용하면 편리
- 보안성 : 직원의 급여정보같이 숨기고 싶은 정보 빼고 뷰 생성 가능
2. 집합 연산자
UNION: 중복행 제거. 합집합
UNION ALL: 중복행 포함 모든 행 반환
INTERSECT: 교집합
EXCEPT (ORACLE: MINUS): 첫번째 SELECT 문의 결과에서 두번째 SELECT문을 뺀 차집합
3. 그룹 함수
ROLLUP: 소계와 총계 생성을 위한 함수. 컬럼 순서에 따라 결과값이 달라질 수 있음. (c.f. cube, grouping set은 순서상관 x)
SELECT COL1, SUM(COL2)
FROM T1
GROUP BY ROLLUP(COL1)
-- COL1 별 그룹핑 + 총계
GROUP BY ROLLUP(COL1, COL2)
-- COL1, COL2 별 그룹핑 + COL1별 그룹핑 + 총계
GROUP BY ROLLUP(COL1, COL2, COL3)
-- COL1, COL2, COL3 별 그룹핑 + COL1, COL2별 그룹핑 + COL1 별 그룹핑 + 총계
GROUP BY ROLLUP((COL1, COL2), COL3)
-- COL1, COL2, COL3 별 그룹핑 + COL1, COL2별 그룹핑 + 총계
CUBE: 모든 경우의 수에 대해 소계와 총계 생성. ROLLUP에 비해 시스템 부하 심함
SELECT COL1, SUM(COL2)
FROM T1
GROUP BY CUBE(COL1)
-- COL1 별 그룹핑 + 총계
GROUP BY ROLLUP(COL1, COL2)
-- COL1, COL2 별 그룹핑 + COL1별 그룹핑 + COL2별 그룹핑 + 총계
GROUP BY ROLLUP(COL1, COL2, COL3)
-- COL1, COL2, COL3 별 그룹핑 + COL1, COL2별 그룹핑 + COL2, COL3 + COL1, COL3 + COL1 + COL2 + COL3 + 총..
GROUP BY ROLLUP((COL1, COL2), COL3)
-- COL1, COL2, COL3 별 그룹핑 + COL1, COL2별 그룹핑 + COL3별 그룹핑 + 총계
GROUPING SETS: 각 대상 마다 그룹핑한 결과값 출력 (총계 x)
GROUPING SETS(COL1) -- GROUP BY COL1과 동일
GROUPING SETS(COL1, COL2) -- COL1 그룹 + COL2 그룹
GROUPING SETS(COL1, COL2, ())
GROUPING SETS(COL1, ROLLUP(COL2))
-- 위의 두개 동일
-- COL1 그룹 + COL2 그룹 + 총계
GROUPING 함수: 시행에 참여하지 않은(NULL) 값은 1, 그렇지 않은 경우는 0 으로 치환.
→ NULL로 되어있는 값들을 소계, 총계로 표시해주기 위한 방안 (CASE문 활용)
4. 윈도우 함수
순위 관련
- RANK : 동일한 값에 대해서는 동일한 순위를 부여 (1,2,2,4)
- DENSE_RANK : 동일한 순위를 하나의 등수로 간주 (1,2,2,3)
- ROW_NUMBER : 그냥 처음 ~ 마지막까지 고유한 순위 부여, 중복 X
행 순서 관련 - SQL Server 지원 X
- FIRST_VALUE : 파티션별 윈도우의 처음 값
- LAST_VALUE : 파티션별 윈도우의 마지막 값
- LAG : 파티션별 윈도우에서 이전 몇 번째 행의 값
- LEAD : 파티션별 윈도우에서 이후 몇 번째 행의 값
비율 관련
- RATIO_TO_REPORT : 파티션 내 전체 SUM에 대한 행별 칼럼 값의 백분율을 소수점으로 구할 수 있다. >0, <=1
- PERCENT_RANK : 파티션별 윈도우에서 처음 값을 0, 마지막 값을 1로 하여 행의 순서별 백분율을 구한다. 값은 상관 X. 0>=,<=1
- CUME_DIST : 현재 행보다 작거나 같은 건수에 대한 누적백분율을 구한다. >0, <=1. 이것도 값은 상관 X
- NTILE : (그룹을 나눠주기 위한 함수) 파티션별 전체 건수를 인수 값으로 N등분한 결과를 구할 수 있다. → 예를 들어 NTILE(5)이고 전체 행 수가 12개이면 1이 3개, 2가 3개, 3,4,5가 2개씩 배분.
- 총 행의 수가 명확하게 나눠지지 않을 때 앞 그룹의 크기가 더 크게 분리
ROWS, RANGE
ROWS는 행 단위, RANGE는 집합(PARTITON) 단위라고 보면됨

RANGE BETWEEN start_point AND end_point
- CURRENT ROW 현재행
- UNBOUUNDED PRECEDING : 첫번째 행. (end point에서 사용불가)
- UNBOUUNDED FOLLOWING : 마지막 행. (start point에서 사용불가)
맨 처음 행과 맨 마지막 행을 설정하는 것.
*기본값: RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
5. Top N 쿼리
ROWNUM: 번호를 매기는 내장함수.
현재 저장된 데이터를 그대로 두면서 각 행에 순차적인 번호를 부여
테이블 첫 행부터 차례대로 순회. 중간에 건너뛰는것 X
단, WHERE절에 ROWNUM 사용한 조건식이 FALSE가 되면 순회를 멈추고 결과를 반환함
e.g. SELECT ROWNUM, EMPNO, ENAME, SAL
FROM EMP
WHERE ROWNUM = 5;
→ 결과값은 아무것도 출력 되지 않는다.
ROWNUM은 1부터 순차적으로 전개되야 하는데, WHERE 조건에 ROWNUM = 5 라고 선언했기 때문.
ORDER BY와 ROWNUM와 함께 사용할 때는 서브쿼리를 사용해야 함.
→ ORDER BY가 ROWNUM 실행 이후에 적용되기 때문에 순서가 뒤죽박죽 됨.
FETCH 절
출력될 행의 수를 제한하는 절
ORDER BY 절 뒤에 사용
[구문]
OFFSET: 건너뛸 행의 수 (필수 X)
N: 출력할 행의 수
FIRST: OFFSET 쓰지 않았을때 처음부터 N 행 출력 명령
NEXT: OFFSET 썼을때 제외한 행 다음부터 N개 행 출력
TOP N 쿼리
SQL Server 에서의 상위 N개 행 추출 문법
WITH TIES 사용하여 동순위 함께 출력 -> 출력 개수가 지정 등수보다 많을 수 있음
WITH TIES
6. 계층형 쿼리
계층형 쿼리: 테이블 내 두개의 컬럼 간에 계층 관계가 존재하는 경우 데이터를 조회하기 위해 사용
프. 자. 부. 순: prior 자식 = 부모 의 경우 순방향 전개
프. 부. 자. 역: prior 부모 = 자식 의 경우 역방향 전개
START WITH -- 계층 구조 전개의 시작 위치 지정. 루트(ROOT) 결정
CONNECT BY -- 다음에 전개될 자식 데이터 지정
PRIOR
-- CONNECT BY 절에 사용되며, 현재 읽은 칼럼을 지정한다.
-- PRIOR 자식 = 부모 형태를 사용하면 (부모->자식) 방향으로 전개하는 순방향 전개를한다.
-- PRIOR 부모 = 자식은 역방향
-- PK항목(not null, 유니크)과 부모항목(null가능)으로 구성됨
NOCYCLE -- 동일한 데이터가 전개되지 않음
ORDER SIBLINGS BY -- 형제 노드간의 정렬 수행 순서
WHERE -- 모든 전개를 수행한 후에 지정된 조건을 만족하는 데이터만 추출한다.(필터링)
7. PIVOT 절과 UNPIVOT 절
[배경] 실제 업무에서 사용하는 가시성있는 테이블(보고서에 자주쓰는 테이블)과 집계함수 사용 가능한 테이블은 다르기 때문에 사용.
PIVOT: 행(row, 속성값)을 열(column, 헤더)로 바꾼다. 지정된 컬럼의 각 행 속성값들이 새로운 컬럼 헤더가 되고 이에 맞게 전체 속성값들이 재배치 → e.g. 각 직책이 부서별로 몇 명씩 있는지 etc
[구문 예시]
SELECT *
FROM (SELECT E.JOB, D.DNAME
FROM EMP E.DEPTNO = D.DEPTNO)
PIVOT (COUNT(*) FOR DNAME IN ('ACCOUNTING' AS ACCOUNTING,
'RESEARCH' AS RESEARCH,
'SALES' AS SALES));
*PIVOT 절은 내부적으로 첫번째 컬럼에 대하여 GROUP BY 연산을 포함하고 있음
각 속성값들이 PIVOT을 거치면 각각의 컬럼으로 지정된다.
UNPIVOT: PIVOT과 반대로 열을 행으로 바꾼다. 컬럼 헤더들이 한 컬럼의 각 행 속성값이 되고 이에 맞게 전체 속성값들이 재배치
[구문 예시]
SELECT 계절, 연도, 기온
FROM (SELECT * FROM 평균기온)
UNPIVOT (기온 FOR 연도 IN (Y2018 AS '2018년'
Y2019 AS '2019년'
Y2020 AS '2020년'
Y2021 AS '2021년'
Y2022 AS '2022년' ));
c.f. IN 연산자
id IN (1, 2);
==
id = 1 OR id = 2;
8. 정규표현식 (Regular Expression)
- 문자열의 공통된 규칙을 보다 일반화 하여 표현하는 방법
메타문자: 문자가 가진 본래 의미가 아니라 문법적인 특별한 의미로 사
리터럴 문자: 문자 그대로의 의미를 가짐
정규표현식 정의: 메타, 리터럴 문자로 된 형식을 갖고 문자열의 특정 패턴을 찾아 내는 것
주요 메타 문자
[] : 대괄호 속 문자 중 하나와 일치
- : 연속 문자의 범위
[^] : 대괄호 속 문자들을 제외한 나머지 문자들중 하나와 일치
^ : 문자열 시작 지점
$ : 문자열 끝 지점
. : 임의의 한 문자 e.g. a.b: acb, a-b, a1b etc..


3장 관리 구문
1. DML
DELETE / DROP / TRUNCATE 차이점
| DROP | TRUNCATE | DELETE |
| DDL | DDL | DML |
| Rollback X | Rollback X | Rollback O |
| Auto Commit | Auto Commit | 사용자 commit |
| 테이블이 사용했던 Storage 모두 Release | 최초 테이블 생성시 할당된 Storage만 남기고 Release | 데이터를 모두 삭제해도 Storage Release 안됨 |
| 데이터와 구조 동시 삭제 | 데이터만 초기화 | 데이터 일부 또는 전체 삭제 |
| UNDO 데이터생성X → 빠름 | UNDO 데이터생성 → 느림 |
DISTINCT: 동일한 데이터 중복으로 처리하여 제거
- DISTINCT (A || B) : A와 B를 중복제거하여 붙여서 문자열로 만듬 → 합성 연산자
DELETE(MODIFY) 액션
- CASCADE : 연쇄
- RESTRICT(디폴트)
- NO ACTION : restrict랑 같음
- SET NULL : 참조하고 있는 테이블 삭제될시 값 Null로
- SET DEFAULT
INSERT 액션 : 자식테이블에 FK 입력시 부모테이블에 PK가 없는 경우
- AUTOMATIC : MASTER PK 생성 후 child 입력
- SET NULL : Child 키를 null로
- SET DEFAULT
- DEPENDENT : 부모테이블에 PK가 존재할때만 child 입력허용
- NO ACTION
2. TCL
COMMIT, ROLLBACK, SAVEPOINT
트랜잭션 : 데이터베이스 시스템에서 하나의 논리적 기능을 정상적으로 수행하기위한 작업의 기본 단위
- Atomicity 원자성 : All or Nothing
- Consistency 일관성 : 트랜잭션 실행전에 DB 내용이 잘못되어있지않으면 실행후에도 잘못된 내용이 있으면 안됨
- Isolation 고립성 : 트랜잭션 실행 도중에 다른 트랜잭션 영향받으면 X
- Durability 영속성 : 트랜잭션이 성공하면 갱신한 내용이 데이터베이스에 영구 저장
3. DDL
CREATE, ALTER, DROP, TRUNCATE, RENAME
[제약조건의 종류]_ 참조 무결성

[기타 참고사항]
SQL 표준 데이터타입
- VARCHAR, CHAR, VARCHAR2 → TEXT는 없음
- VARCHAR은 비교시 서로 길이가 다를경우 다른 내용으로 판단
- CAHR은 길이가 다르면 짧은쪽에 공백 추가해서 비교
- DATE : SYSDATE, ‘20240812’ (O), 20240812 (X) → 숫자 입력 불가
테이블 생성 후 복제(CTAS) → 제약조건 중 NOT NULL만 가져올수있음
SQL : 구조적, 집합적, 선언적 → 절차적 X
NULLS LAST : 널값을 가장 큰것으로
count(*)는 null값도 센다 c.f. count(A.컬럼)의 경우 null 카운트 x
'SQL' 카테고리의 다른 글
| SQLD 개념정리 07. SQL 기본 (1) | 2023.11.13 |
|---|---|
| SQLD 개념정리 06. 정규화/ 반정규화 (1) | 2023.11.13 |
| SQLD 개념정리 05. 식별자 (Identifiers) (0) | 2023.11.10 |
| SQLD 개념정리 04. 관계 (Relationship) (0) | 2023.11.10 |
| SQLD 개념정리 03. 속성 (Attribute) (0) | 2023.11.10 |