Home SQLD(SQL Developer) 취득기
Post
Cancel

SQLD(SQL Developer) 취득기

SQLD

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
### 모델링이란
  - 현실세계를 

### 데이터 모델링의 특징
  1) 추상화(Abstraction) 2) 단순화(Simplification) 3) 명확화(Clarity)

### 데이터 모델링의 관점
  1) 데이터 관점 2) 프로세스 관점 3) 데이터와 프로세스의 상관 관점

### 데이터 모델링의 단계
  1) 개념적 데이터 모델링 : 전사적 데이터 모델링 수행, 추상화 레벨이 가장 높음
  2) 논리적 데이터 모델링 : 데이터베이스 모델에 대한 Key, 속성, 관계 등을 모두 표현
  3) 물리적 데이터 모델링 : 실제 데이터베이스로 구현할  있도록 성능이나 가용성  물리적 성격을 고려하여 표현

### 데이터 독립성
  - DB 사용자의 관점과 DB 실제로 표현되는 물리적인 방식을 분리하기 위해

### 3 스키마 구조
  1) 외부 스키마(External Schema) :  사용자가 보는 DB 스키마를 정의
  2) 개념 스키마(Conceptual Schema) : 모든 사용자가 보는 DB 스키마를 통합하여 조직 전체 관점의 정의
      - 논리적 독립성 : 개념 스키마가 변경되어도 외부 스키마(응용프로그램) 영향 받지 않는다.
  3) 내부 스키마(Internal Schema) : 물리적인(Physical Representation)단계, 실질적인 저장구조, 인덱스 
      - 물리적 독립성 : 내부 스키마가 변경되어도 외부/개념 스키마는 영향 받지 않는다.

###엔티티의 분류
  1) /무형 : 유형(물리적 실체있음), 개념(추상적 개념), 사건(행위를 함으로 발생)
  2) 발생시점 : 기본(독립적으로 생성), 중심(기본에서 파생, 행위엔티티 생성), 행위(2 이상 엔티티로부터 파생)

### SQL 명령문 개괄

- from > where > group by > having > select > order by
- DML : select, insert, update, delete, merge
  - merge : insert, update 한번에 수행한다.
- DDL : alter, create, modift, truncate, drop
  - DELETE vs TRUNCATE vs DROP
  - DELETE(DML) : 데이터는 지워지지만 테이블 용량은 줄어 들지 않는다. 원하는 데이터만 지울  있다. 삭제  잘못 삭제한 것을 되돌릴  있다
  - TRUNCATE(DDL) : 테이블을 제외하고 용량이 줄어 들고, 인덱스, 데이터 등을 삭제한다. 삭제  절대 되돌릴  없다.
  - DROP(DDL) : 데이블 전체를 삭제, 공간, 객체를 삭제한다. 삭제  절대 되돌릴  없다.
- TCL : rollback, commit
  - rollback
  - commit
- DCL : grant, revoke
  - grant
  - revoke
  - role

### SELECT
- distinct(col1, col2)  한다면 col1, col2 동시에 본다.

- ALIAS
  - select 절에서 쓰는 경우: as 생략가능, "컬럼명에 띄어쓰기"
  - from 절에서 쓰는 경우 : as 사용불가

- CONCAT
  - CONCAT 인수가 무조건 2
  - 때문에 ORACLE 에서는 CONCAT 중첩되는 것을 피하고자 || 연산을 사용한다. MySQL 에서는 OR 연산에 해당된다.

### 논리연산자
- 연산순위 : not, and, or (nao)

### SQL 연산자
- between 1 and 2
- in (1,2,3)
- like
  - '_' : 미지의  글자
  - '%' : 0 이상 글자
  - escapse : 와일드카드인 _ , %  문자로 취급하는 방법
    - '^_^'  이런식으로 표현 '^@_^'  
- ROWNUM : where조건절에서 rownum=1 경우 포함한다.
- TOP : ( select ) top ( n ) 컬럼명 : 출력할  상위 n

### NULL
- NULL 정의 : 부재, 모르는 
- NULL 산술연산값 [ex) NULL + 2]  : NULL
- NULL 비교연산값 [ex) NULL = 2]  : FALSE
- 정렬순서
  - Oracle : NULL 최대값(무한대)
  - SQLServer : NULL 최소값(-무한대)

- NVL : (v1, v2) : v1  NULL이면 v2, 아니면 v1
- NVL2 : (v1, v2, v3) : v1  NULL이면 v3, 아니면 v2
- ISNULL : (v1, v2) : v1 NULL이면 v2, 아니면 v1
- NULLIF : (v1, v2) : 같으면 NULL, 아니면 v1
- COALEASE : NULL 아닌 첫번쨰  

### 정렬
- 특성 : 정렬은 가장 마지막에 실행된다.
- 컬럼 번호 정렬 : 출력되는 컬럼 수보다  값이 안됨 
- 인수 두개 정렬 : A desc B asc : A 같으면 B 오름차순
- select 인수에 없어도 정렬 가능

### 숫자함수
- ROUND(13.89) : ROUND("값", "자리수"), "자리수" 만큼 표현
- CEIL/CEILING : 올림

### 문자열 함수
- UPPER, LOWER
- LPAD(123, 5, '0') : 00123
- RPAD(123, 5, '0') : 12300
- LTRIM, RTRIM : 문자열 왼쪽 혹은 오른쪽 공백을 제거
- SUBSTR/SUBSTRING(A, B, C) : A 컬럼의 B번째 문자부터 C번째 문자까지
- INSTR : 찾고자 하는 문자열이 몇번쨰 위치에 있는지 위치를 알려준다.

### 날짜 함수
- TO_CHAR ,TO_DATE : TO_CHAR(SYSDATE, 'YYYYMMDD')
- SYSDATE(oracle)
- GETDATE(sql server)
- 날짜 데이터 + 100 에서 숫자는 day 의미한다.

### DECODE / CASE
- CASE : CASE WHEN 조건 전부 안맞는 경우 NULL 출력됨
- DECODE : DECODE(gender, 'M', '남자', 'F', '여자', '기타')

### 집계함수
- NULL과의 관계 - sum : sum() 경우는 NULL 전부 제외
- NULL과의 관계 - count : count(*) 경우는 전부 포함
- SUM(A) + SUM(B) + SUM(C) != SUM(A + B + C)

### GROUP BY
- 집약기능
- 그룹수준으로 정보를 바꾼다

### JOIN
- natural join , using : 중복된 컬럼이 제일 앞에 등장, 중복 컬럼 하나만 
  - using  경우 alias 사용 안됨
- left outer join 
  - a left outer join b 
    == a.col1 = b.col1(+)
  - 뒷쪽 join key 칼럼에 붙인다

### 서브쿼리
- scalar subquery : select, order by 절에서 사용됨. 하나의 
- inline view : from 절에서 사용됨. 하나의 임시 테이블
- subquery : where , having  에서 사용됨
+ group by 에서는 서브쿼리 사용할  없음

### 집합 연산자
- union : 합집합
- union all : 중복데이터 있고, 정렬 작업 없고 빠르다
- intersect : 교집합
- minus : 여집합

### 제약조건
- pk : unique + not null
- unique
- not null

### VIEW
- 독립성
- 편리성
- 보안성

### 그룹함수
- rollup :  소그룹의 합계 + 전체 합계를  그룹 마지막에 나타내줌
  - GROUP BY ROLLUP(상품ID, ) 하면 상품ID(첫컬럼) 기준으로만 합계 구함
- cube : ROLLUP 달리 GROUP BY절에 명시한 모든 컬럼에 대해 소그룹 합계를 계산
  - GROUP BY CUBE(상품ID, ) 하면 상품ID 합계도 구하고 월별 합계도 구함
- groupingsets : 항목에 대한 소계만 계산해 출력
  - GROUP BY GROUPING SETS(상품ID, ) 하면  컬럼별 합계'만' 컴팩트하게 보여줌
- grouping : 집계가 계산된 결과에 대해서는 1 값을 갖고 그렇지 않은 결과에 대해서는 0 가짐
  - 위의 집계함수들을 지원하는 함수
- https://for-my-wealthy-life.tistory.com/44

### 윈도우 함수
- ROWS, RANGE : 
  - ROWS : 조회된 데이터를 물리적 위치(ROWNUM) 구분하여 모든 행이 1개의 행으로 인식
  - RANGE : 집합으로 묶인 그룹이 1개의 행으로 인식
- RANK(중복 건너띄고 순위메김) vs DENSERANK(중복 건너띄지 않고 순위메김)
- PARTITION BY : 
  - 분석함수([칼럼]) OVER(PARTITION BY 칼럼1, 칼럼2... [ORDER BY ] [WINDOWING ])

### 계층형 질의
- prior 자식데이터 = 부모데이터 ()
- 부모에서 자식으로 가면 순방향 ()

### 절차형 PL/SQL
- EXCEPTION : 
- procedure, trigger, userdefined function 차이 :

### 데이터 모델링


### 속성
  - 기본속성 : 업무 프로세스 분석을 통해 바로 정의가 가능한 속성
  - 설계속성 : 업무에 존재하지는 않지만 설계하다보니 도출된 속성
  - 파생속성 : 다른 속성의 속성값을 계산하거나 특정한 규칙으로 변형하여 생성한 속성
  -> 기설파

### 도메인
  데이터 유형, 크기, 제약조건

### 관계
  IE 표기법
    - 식별자(강한관계), 비식별자(약한관계)
  BARKER 표기법

### 식별자, 비식별자 관계
- 식별자 : 각각의 인스턴스를 구분 가능하게 만들어주는 대표 격인 속성을 의미
  - 주식별자 (Primary Key) <=> 보조식별자 (주식별자와 같이 식별은 가능하나 대표 식별자는 아니다)
    1) 유일성
    2) 최소성
    3) 불변성
    4) 존재성(not null)
  - 내부식별자(내부에서 만들어진 ) <=> 외부식별자(외부에서  )
  - 단일식별자(1) <=> 복합식별자(n)
  - 원조식별자(가공되지않는 날것의 식별자) <=> 주식별자 속성이 두개 이상인 경우, 하나로 묶은 인조 식별자)
- 식별자(강한관계, 부모엔티티 필수, 실선) | 비식별자(약한관계, 부모엔티티 선택, 점선)

### ERD 작성순서
- 엔티티를 그린다
- 엔티티를 적절하게 배치한다
- 엔티티간의 관계를 나타낸다
- 관계명을 정의한다
- 관계의 참여도를 나타낸다
- 관계의 필수여부를 나타낸다
-> 그배관명참필

### 성능 데이터 모델링
- 아키텍쳐
- SQL 명령문
    - 조인수행원리
    - Optimizer
    - 실행계획

### 정규화

- 1 정규형 : 모든 속성은 하나의 값만 가져야 한다.
- 2 부분함수종속 : 모든 속성은 반드시 주식별자의 일부가 아닌 전체에 종속되어야 한다.
- 3 이행함수종속 : 주식별자가 아닌 모든 속성간에는 서로 종속될  없다.

### 반정규화
- 데이터 무결성 해침

- 대량범위
- 범위처리
- 통계처리

### 대량 데이터에 따른 성능
- row migration, chaining
- list partitioning
- range partitioning : 관리 쉬움
- hash partitioning : 관리 어려움

### 슈퍼/서브타입
용량 작은 경우 : 
용량  경우 : 
  - 트랜젝션 공통, 차이 : plus type
  - 트랜젝션 전체 통합 : single

### 분산데이터베이스
- 데이터 무결성을 해친다.

### 조인 수행 원리
- NL JOIN : 랜덤 엑세스, 대용량 소트작업 유지
- Sort Merge : 조인키 정렬, 
- Hash : 등가 only, 선행 테이블 작음, Hash처리를 위한 별도 공간 필요

### 옵티마이저
- CBO : cost based opt - 경로
- RBO : rule based opt - 규칙

### 인덱스
- 언제 사용되는지
  - 부정형, 형변환, LIKE 등에서는 쓰지 않는다.
- 인덱스 사용시 성능감소되는 경우
  - DML (insert, delete, update) 사용하는 경우

### 실행순서
- 들여쓰기와 순서로 판단.
  1) 들여쓰기는 안할수록 순서 .
  2) 들여쓰기 동일한 경우 뭉터기로 순서대로 처리하되
    - 내부 순서는 1)  동일

This post is licensed under CC BY 4.0 by the author.