# [sqld] 요약

[https://signon.oracle.com/signin](https://signon.oracle.com/signin)

[CBT 모의고사](https://cbt.youngjin.com/exam/index.php?no=73)

[sqld 스피드 퀴즈](https://www.youtube.com/watch?v=JWxwg0ikYm4)

[https://velog.io/@rlaensk/SQL-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%ED%95%84%EC%88%98%EA%B0%9C%EB%85%90](https://velog.io/@rlaensk/SQL-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%ED%95%84%EC%88%98%EA%B0%9C%EB%85%90)

데이터 모델링에서 중요한 세가지

* <mark>성격</mark>
    
* <mark>행위</mark>
    
* <mark>관계</mark>
    

기본키를 참조하는 것 = <mark>외래키</mark>  
유일성과 최소성 = <mark>후보키</mark>

SQL 실행순서 = <mark>파실인(PEF)</mark>

이행 함수 종속성 제거 = <mark>제3정규화</mark>

그룹함수 중에서 결합 가능한 모든 집계를 계산하는 것은? = <mark>CUBE</mark>

문자열 결합 = <mark>|| 혹은 CONCAT</mark>

내부 스키마 = <mark>물리적 저장 구조</mark>

Entity를 도출하고 <mark>그린다</mark> → Entity를 <mark>배치한다</mark> → Entity 간 <mark>관계를 설정</mark>한다 → <mark>관계명을 서술</mark>한다 → 관계 <mark>참여도</mark>를 표현한다 → <mark>관계의 필수 여부</mark>를 표현한다

^ = 문자열 <mark>시작</mark>  
$ = 문자열 <mark>끝</mark>

계층형 조회에서 가장 상위 레벨 값 = <mark>1</mark>

카디널리티 계산식 = <mark>선택도 * 전체 레코드 수</mark>

<mark>논리적 모델링</mark>은 <mark>정규화</mark>를 무조건 해야 된다

<mark>cress join 은 카데시안 곱 발생</mark>

주식별자와 관계가 <mark>낮은 단계는? 제3정규화</mark>

인조식별자 = 최대한 <mark>범용적인 값 사용</mark>

%1 = 마지막이 1로 끝나는

DDL = create , alter , drop , rename , truncate  
DML = insert , update , delete , select  
DCL = grant , revoke  
TCL = commit , rollback , savepoint

## 데이터 모델링의 특징

| 특징 | 설명 |
| --- | --- |
| 추상화 | 현실 세계를 간략하게 표현한다 |
| 단순화 | 누구나 쉽게 이해할 수 있도록 표현한다 |
| 명확성 | 명확하게 의미가 해석되어야 하고 한 가지 의미를 가져야 한다 |

## 데이터 모델링 단계

### 개념적 모델링

* <mark>전사적 관점</mark>에서 기업의 데이터를 모델링한다
    
* <mark>추상화 수준이 가장 높은 수준의 모델링</mark>이다
    
* 계층형 데이터 모델, 네트워크 모델, 관계형 모델에 관계없이 <mark>업무 측면에서 모델링</mark>한다
    

### 논리적 모델링

* 특정 데이터베이스 모델에 종속한다
    
* 식별자를 정의하고 관계, 속성 등을 모두 표현한다
    
* 정규화를 통해서 <mark>재사용성을 높인다</mark>
    

### 물리적 모델링

* 구축할 데이터베이스 관리 시스템에 테이블, 인덱스 등을 생성하는 단계이다
    
* <mark>성능, 보안, 가용성, 등을 고려하여 database를 구축</mark>한다
    

## 데이터 모델링 관점

### 데이터

* 비즈니스 프로세스에서 사용되는 데이터를 의미한다
    
* 구조 분석 , 정적 분석
    

### 프로세스

* 비즈니스 프로세스에서 수행하는 작업을 의미함
    
* 시나리오 분석, 도메인 , 동적 분석
    

### 데이터와 프로세스

* 프로세스와 데이터 간의 관계를 의미함
    
* CRUD(Create , Read , Update , Delete) 분석
    

## 3층 스키마의 독립성

### 논리적 독립성

* 개념 스키마가 변경되더라도 외부 스키마가 영향을 받지 않는 것이다
    

### 물리적 독립성

* 내부 스키마가 변경되더라도 개념 스키마가 영향을 받지 않는 것이다
    

## 3층 스키마 구조(p52)

### 외부 스키마

* 사용자 관점, 업무상 관련이 있는 data 접근이다
    
* 관련 Database의 <mark>View</mark>를 표시한다
    
* <mark>응용 프로그램이 접근하는 Database를 정의</mark>한다
    

### 개념 스키마

* 설계자 관점, 사용자 전체집단의 Database 구조이다.
    
* 전체 Database 내의 규칙과 구조를 표현한다.
    
* <mark>통합 database 구조</mark>이다
    

### 내부 스키마

* 개발자 관점, Database의 <mark>물리적 저장 구조</mark>이다
    
* data 저장 구조 , 레코드 구조 , 필드 정의 , 인덱스 등을 의미함
    

## Entity(p53)

Entity는 업무에서 관리해야 하는 <mark>데이터 집합</mark>을 의미하며 저장되고 관리되어야 하는 데이터이다  
Entity는 <mark>개념 , 사건 , 장소 등을 의미하는 명사</mark>이다

## Entity의 특징(p54)

| 엔터티 특징 | 설명 |
| --- | --- |
| 식별자 | Entity는 <mark>유일한 식별자</mark>가 있어야 한다 ex) 회원ID , 계좌번호 |
| 인스턴스 집합 | <mark>2개 이상의 인스턴스</mark>가 있어야 한다 즉, 고객정보는 2명 이상 있어야 한다 |
| 속성 | Entity는 <mark>반드시 속성</mark>을 가지고 있다 ex) 고객 Entity에 회원ID , password , name , 주소 , 전화번호 |
| 관계 | Entity는 <mark>다른 Entity와 최소한 한 개 이상 관계</mark>가 있어야 한다 ex) 고객은 계좌를 개설한다 |
| 업무 | Entity는 <mark>업무에서 관리되어야 하는 집합</mark>이다 ex) 고객 , 계좌 |

### TIP) relation and table , Instance

* relation과 table은 같은 의미라고 해석하면 된다. relation에 기본키 및 제약조건을 설명하면 table이 된다.
    
* 단, 릴레이션쉽은 릴레이션 간의 관계를 의미한다
    
* Instance는 릴레이션이 가질 수 있는 값을 의미한다. 간단하게 생각하면 행의 수를 의미한다
    

## Entity 종류(p55)

* Entity의 종류는 유형과 무형에 따른 종류, Entity가 발생하는 시점에 따른 종류로 나누어진다.
    
* Entity를 유형과 무형으로 분류하는 기준은 물리적 형태의 존재 여부이다.
    

### 유형 Entity

* 업무에서 도출되며 <mark>지속적으로 사용되는 Entity</mark>이다  
    ex) 고객 , 강사 , 사원 등
    

### 개념 Entity

* 유형 Entity는 물리적 형태가 있지만, <mark>개념 Entity는 물리적 형태가 없다.</mark>
    
* 개념적으로 사용되는 Entity이다  
    ex) 거래소 종목 , 코스닥 종목 , 생명보험 상품
    

### 사건 Entity

* <mark>비즈니스 프로세스를 실행하면서 생성</mark>되는 Entity이다.  
    ex) 주문 , 체결 , 취소주문 , 수수료 청구 등
    

## 발생 시점에 따른 Entity 종류

### 기본 Entity

* <mark>키 Entity</mark>라고도 한다
    
* 다른 Entity로부터 영향을 받지 않고 <mark>독립적으로 생성</mark>되는 Entity이다  
    ex) 고객 , 상품 ,부서 등
    

### 중심 Entity(메인 Entity)

* 기본 Entity와 행위 Entity 간의 중간에 있는 것이다
    
* 즉, 기본 Entity로부터 발생되고 행위 Entity를 생성하는 것이다  
    ex) 계좌 , 주문 ,취소 , 체결 등
    

### 행위 Entity

* 2개 이상의 Entity로부터 발생된다  
    ex) 주문 이력 , 체결 이력 등
    

## 속성

* 속성이라는 것은 업무에서 필요한 정보인 엔터티가 가지는 항목이다
    
* 속성은 더 이상 분리되지 않는 단위로, 업무에 필요한 data 를 저장할 수 있다
    
* 인스턴스의 구성요소이고 의미적으로 <mark>더 이상 분해되지 않는다</mark>
    

## 속성의 특징과 종류

* 속성은 업무에서 관리되는 정보이다
    
* 속성은 일반적으로 하나의 값만 가진다
    
* 주식별자에게 함수적으로 종속된다. 즉, 기본키가
    

## 분해 여부에 따른 속성의 종류(p57)

### 단일 속성

* <mark>하나의 의미</mark>로 구성된 것으로 회원ID , 이름 등이다
    

### 복합 속성

* 여러 개의 의미가 있는 것으로 대표적으로 <mark>주소</mark>가 있다
    
* 주소는 시, 군, 동 등으로 분해될 수 있다
    

### 다중값 속성

* 속성에 <mark>여러 개의 값</mark>을 가질 수 있는 것으로 예를 들어 상품 리스트가 있다
    
* 상품
    
* 다중값 속성은 엔터티로 분해된다
    

## 특성에 따른 속성의 종류 (p58)

### 기본 속성

비즈니스 프로세스에서 도출되는 <mark>본래의 속성</mark>이다  
ex) 회원ID , 이름 , 계좌번호 , 주문 일자 등

<mark>업무로 부터 축출</mark>한 속성으로 <mark>제일 많이 발생</mark>

### 설계 속성

* <mark>데이터 모델링 과정에서 발생</mark>되는 속성이다
    
* <mark>유일한 값을 부여</mark>한다
    

ex) <mark>상품코드</mark> , <mark>일련번호</mark> , 지점 코드 등

설계시 규칙화 등이 필요해 만든 속성 <mark>코드성이나 일련번호</mark> 등

### 파생 속성

<mark>다른 속성에 의해서 만들어지는 속성</mark>이다  
ex) 합계 , 평균 등

### TIP) Domain이란?

Domain은 <mark>속성</mark>이 가질 수 있는 <mark>값의 범위</mark>이다  
ex) 성별이라는 속성의 Domain은 남자와 여자이다

## 주식별자(기본키, PK)

<mark>=&gt;최대유불존</mark>

최소성  
대표성  
유일성  
불변성  
존재성

## 키의 종류(p63)

| 데이터베이스 키 | 설명 |
| --- | --- |
| 기본키 | 후보키 중에서 엔터티를 대표할 수 있는 키이다 |
| 후보키 | 호보키는 <mark>유일성과 최소성</mark>을 만족하는 키이다 |
| 슈퍼키 |  |
| 대체키 |  |
| 외래키 | 하나 혹은 다수의 다른 테이블의 기본 키 필드를 가리키는 것으로 참조 <mark>무결성</mark>을 확인하기 위해서 사용되는 키이다 즉, 허용된 데이터 값만 데이터베이스에 저장하기 위해서 사용된다 ex) 부서코드 , 상품코드 |

## 대표성 여부에 따른 식별자의 종류

### 주식별자

* 유일성
    
* 다른 엔터티
    

### 보조 식별자

* 유일성
    

## 생성 여부에 따른 식별자의 종류

### 내부 식별자

### 외부 식별자

## Multi row Subquery(p135)

Multi row Subquery는 서브쿼리 결과가 여러 개의 행을 반환하는 것으로 다중 행 연산자를 사용해야 한다

### 다중 행 비교 연산자

| 다중 행 연산 | 설명 |
| --- | --- |
| IN | Main query의 비교조건이 <mark>Subquery의 결과 중 하나만 동일하면 참</mark>이 된다(OR 조건) |
| ALL | Main query와 Subquery의 <mark>결과가 모두 동일하면 참</mark>이 된다 &lt;ALL : 최솟값을 반환한다 &gt;ALL : 최댓값을 반환한다 |
| ANY | Main query |
| EXISTS | Main query와 <mark>Subquery의 결과가 하나라도 존재하면 참</mark>이 된다 |

## 차집합을 만드는 MINUS(p148)

MINUS 연산은 두 개의 테이블에서 차집합을 조회함  
먼저 쓴 SELECT문에는 있고 뒤에 쓰는 SELECT문에는 없는 집합을 조회하는 것이다  
MS-SQL에서는 <mark>MINUS</mark>와 동일한 연산이 <mark>EXCEPT</mark>이다<mark>(MINUS = EXCEPT)</mark>

## EQUI(등가) & JOIN(교집합)

조인은 여러 개의 릴레이션을 사용해서 새로운 릴레이션을 만드는 과정이다

## 윈도우 함수 구조(p159)

### ARGUMENTS(인수)

* 윈도우 함수에 따라서 0 ~ N개의 인수를 설정한다
    

### PARTITION BY

* <mark>전체 집합을 기준에 의해 소그룹</mark>으로 나눈다
    

### ORDER BY

* 어떤 항목에 대해서 정렬한다
    

### WINDOWING

* 행 기준의 범위를 정한다
    
* <mark>ROWS: 물리적 결과의 행 수</mark>
    
* <mark>RANGE: 논리적인 값에 의한 범위</mark>
    

## GROUP BY와 윈도우 함수 차이점(p159)

| 구분 | GROUP BY | 윈도우 함수 |
| --- | --- | --- |
| 기능 | 자르기와 집약 | 자르기 |
| 특징 |  |  |
| 차이점 | 행 수가 감소 | 행 수는 유지 |

## WINDOWING(p160)

### ROWS

* 부분집합인 윈도우 크기를 물리적
    

### RANGE

* 논리적인 주소에 의해 행 집합을 지정한다
    

### BETWWEN ~ AND

* 윈도우
    

### UNBOUNDED PRECEDING

### UNBOUNDED FOLLOWING

### CURRENT ROW

## 순위 관련 윈도우 함수(p164)

RANK = <mark>동일한 순위는 동일한 값이 부여</mark>  
<mark>ex) 1 2 2 4</mark>

DENSE\_RANK = <mark>동일한 순위를 하나의 건수로 계산</mark>  
<mark>ex) 1 2 2 3</mark>

ROW\_NUMBER = <mark>고유의 순위를 부여</mark>  
<mark>ex) 1 2 3 4</mark>

## 집계 관련 윈도우 함수(p166)

SUM : 파티션 별로 <mark>합계</mark>를 계산한다  
AVG : 파티션 별로 <mark>평균</mark>을 계산한다  
COUNT : 파티션 별로 <mark>행 수</mark>를 계산한다  
MAX & MIN : 파티션 별로 <mark>최댓값</mark>과 <mark>최솟값</mark>을 계산한다

## 행 순서 관련 윈도우 함수(p167)

FIRST\_VALUE : 파티션에서 <mark>가장 처음에 나오는 값</mark>을 구한다  
<mark>MIN 함수</mark>를 사용해서 같은 결과를 구할 수 있다

LAST\_VALUE : 파티션에서 <mark>가장 나중에 나오는 값</mark>을 구한다  
<mark>MAX 함수</mark>를 사용해서 같은 결과를 구할 수 있다

LAG : <mark>이전 행</mark>을 가지고 온다

LEAD : 윈도우에서 <mark>특정 위치의 행</mark>을 가지고 온다  
<mark>기본값이 1</mark>이다

## Inline view(p172)

Inline view는 SELECT문에서 FROM절에 사용되는 서브쿼리를 의미한다

## partition 기능(p184)

* 파티션은 대용량의 테이블을 여러 개의 데이터 파일에 분리해서 저장한다
    
* 테이블
    
* 파티션은
    
* partition은
    
* 데이터를 조회할 때 데이터의 범위를 줄여서 성능을 향상시킨다
    

### Range partition

* <mark>값의 범위를 기준</mark>으로 여러 개의 파티션으로 데이터를 나누어 저장하는 것이다
    

### List partition

* <mark>특정 값을 기준</mark>으로 분할하는 방법이다
    

### Hash partition

* database 관리 시스템이 내부적으로 Hash 함수를 사용해서 data를 분할한다
    
* database 관리 시스템이 <mark>알아서 분할하고 관리</mark>하는 것이다
    

### Composite partition

* 여러 개의 파티션 기법을 조합해서 사용하는 것이다
    

## Oracle 정규표현식

| 구분 | 의미 |
| --- | --- |
| REGEXP\_LIKE | LIKE문과 유사하고 정규표현식을 검색한다 |
| REGEXP\_REPLACE | 정규표현식을 검색한 후에 <mark>문자열을 변경</mark>한다 |
| REGEXP | 정규표현식을 검색하고 <mark>위치를 반환</mark>한다 |
| REGEXP | 정규표현식을 검색하고 |
| REGEXP | 정규표현식을 검색하고 |

## 테이블의 모든 데이터 삭제(p197)

### DELETE FROM 테이블명;

* 테이블의 모든 데이터를 삭제한다
    
* 데이터가 삭제되어도 테이블의 용량은 감소하지 않는다
    

### TRUNCATE TABLE 테이블명;

* 테이블의 모든 데이터를 삭제한다
    
* 데이터가 삭제되면 <mark>테이블의 용량은 초기화</mark>된다
    

## TCL(p200)

### COMMIT

* COMMIT은 INSERT
    

### ROLLBACK

* ROLLBACK을 실행하면 데이터에 대한 변경 사용을 모두 취소하고 트랜잭션을 종료한다
    

### SAVEPOINT(저장점)

* SAVEPOINT는 트랜잭션을 작게 분할하여
    

## view 장단점(p211)

view란? (view = 가상 테이블)

장점: 보안 기능 , 데이터 관리 간단 , SELECT문이 간단  
단점: 연산이 제약 , 구조를 변경할 수는 없다

## GRANT(p212)

* GRANT문은 DB 사용자에게 <mark>권한을 부여한다</mark>
    
* DB 사용을 위해서는 권한이 필요하며 연결 , 입력 , 수정 , 삭제 , 조회를 할 수 있다.
    

## WITH GRANT OPTION과 ADMIN OPTION(p213)

### WITH GRANT OPTION

* <mark>특정 사용자</mark>에게
    
* 권한을 A 사용자가 B에 부여하고 다시 B가 다시 C를 부여한 후에 권한을 취소(Revoke)하면 모든 권한이 회수된다
    

### WITH ADMIN OPTION

* Table에 대한 <mark>모든 권한을 부여한다</mark>
    
* 권한을 A
