[Hexo와 깃허브로 블로그 만들기] Hexo 테마 적용

1. Hexo 테마 고르기

Hexo 이쁜 테마 고르러 가기

2. icarus 테마 적용하기

블로그 프로젝트 경로($ cd ~/blog/) 아래 blog/themes/icarus 폴더를 만들어 git 테마를 clone한다.

1
$ git clone https://github.com/ppoffice/hexo-theme-icarus.git themes/icarus

3. ~/blog/themes/icarus/_config.yml 파일에서 theme 설정을 icarus로 변경한다.

1
theme: icarus

4. hexo 서버 재시작 한다.

1
$ hexo s

localhost:4000에서 적용된 테마를 확인한다.

5. github에 배포한다.

1
2
$ hexo clean
$ hexo d -g

[SQL] 함수

1. 문자열 함수

LOWER(문자열)

  • 문자열 소문자로 변경

    UPPER(문자열)

  • 문자열 대문자로 변경

    ASCII(문자)

  • 문자, 숫자를 ASCII로 변경

    CONCAT(문자열1, 문자열2)

  • 문자열1과 문자열 2 합침(||와 같은 기능)

    SUBSTR(문자열, M [,N])

  • 문자열 중에 M부터 N개의 문자 리턴(N이 없으면 M부터 끝까지 리턴)

    LENGTH(문자열)

  • 문자열 개수 리턴

    LTRIM(문자열 [,지정문자])

  • 문자열의 첫 문자부터 지정문자를 제거함(지정문자 생략시 “”공백 제거)

    RTRIM(문자열 [,지정문자])

  • 문자열 제일 마지막부터 지정문자를 제거함(지정문자 생략시 “”공백제거)

    TRIM(지정문자 FROM 문자열)

  • 문자열의 양끝의 지정문자 제거

2. 숫자형 함수

ABS(숫자)

  • 숫자의 절대값 리턴

    SING(숫자)

  • 숫자의 양수, 음수, 0을 구분(결과값 -1 OR 0 OR 1)

    MOD(숫자1, 숫자2)

  • 숫자1/숫자2의 나머지 리턴

    CEIL(숫자)

  • 숫자보다 크거나 같은 최소 정수리턴

    FLOOR(숫자)

  • 숫자봗 작거나 같은 최대정수리턴

    ROUND(숫자 [,M])

  • 숫자를 M+1자리에서 반올림해서 리턴(M의 DEFAULT는 0)

    TRUNC(숫자[,M])

  • 숫자를 M+1자리에서 버림해서 리턴(M의 DEFAULT는0)

    EXP(),POWER(),SQRT(),LOG()

  • 지수, 거듭제곱, 제곱근, 로그값 리턴

3. 날짜형 함수

SYSDATE

  • 현재 날짜, 시각 출력

    EXTRACT(‘YEAR’ FROM d)

  • d 날짜에서 ‘YEAR’(년) 추출(YEAR에 MONTY, DAY 입력가능)

    TO_NUMBER(TO_CHAR(D,’YYYY’))

  • 날짜데이터에서 년도 출력

    TO_NUMBER(TO_CHAR(D,’MM’))

  • 날짜데이터에서 월도 출력

    TO_NUMBER(TO_CHAR(D,’DD’))

  • 날짜데이터에서 일 출력

4. 변환형 함수

TO_NUMBER(문자열)

  • 문자열을 숫자로 변환

    TO_CHAR(숫자|날짜 [,FOMAT])

  • 숫자나 날짜를 주어진 포맷형태로 문자열 타입으로 변환

    TO_DATE(문자열[,FOMAT])

  • 문자열을 주어진 포맷 형태로 날짜타입으로 변환

5.CASE표현

함수의 성질을 가지고 있어 중첨해서 사용할 수 있음

1
2
3
4
CASE
SIMPLE_CASE_EXPRESSION 조건
ESLE 표현절
END
  • 예제)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    --예제1
    SELECT ENAME,
    CASE WHEN SAL>2000
    THEN SAL
    ELSE 2000
    END REVISED_SALARY
    FROM EMP;

    --예제2)
    SELECT LOC,
    CASE LOC
    WHEN 'NEW YORK' THEN 'EAST'
    WHEN 'CHICAGO' THEN 'CENTER'
    ELSE 'ETC'
    END AS AREA
    FROM DEPT;

6.NULL관련함수

연산

NULL+숫자=NULL;(사칙연산 모두 포함)
NULL+문자열=NULL;

NVL(표현식1, 표현식2)

  • 표현식 1 이NULL이면 표현식 2를 출력(두 표현식의 데이터 타입이 같아야함)

    NULLIF(표현식1, 표현식2)

  • 표현식1이 표현식2와 같으면 NULL, 아니면 표현식1 출력

    COALESCE(표현식1,..,표현식N)

  • 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식 리턴,
  • 모든 표현식이 NULL이면 NULLD을 리턴

    NULL과 공집합

    테이블 안에 값이 NULL이면 NULL, 테이블 이 선택안되면 공집합
    공집합을 NULL로 바꾸기 위해 적절한 함수 사용 EX)MAX()

NULLIF

1
2
3
4
--사원 테이블에서 MGR과 7698이 같으면 NULL, 다르면 MGR 표시하라. 

SELECT ENAME, EMPNO, MGR, NULLIF(MGR, 7698) NUIF
FROM EMP;

COALESCE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
--사원테이블에서 커미션을 1차선택값, 급여를 2차 선택값으로 선택하되 
--두 칼럼 모두 NULL이면 NULL로 표시

SELECT ENAME, COMM, SAL, COALESCE(COMM, SAL) COAL
FROM EMP;

--다른방법
SELECT ENAME, COMM, SAL
CASE WHEN COMM IS NOT NULL
THEN COMM
ELSE (CASE WHEN SAL IS NOT NULL
THEN SAL
ELSE NULL
END)
END COAL
FROM EMP;

[Hexo와 깃허브로 블로그 만들기] jykell에서 hexo로 블로그 이전하기

hexo테마가 이쁜게 많아서 바꾸기로 함.

1. Node.js설치

nodejs 설치하러 가기

2. Git 설치

git 설치하러 가기

3. Hexo 설치

hexo 설치하러 가기

1
$ npm install -g hexo-cli

4. 블로그 시작하기

git bash쉘에서 블로그 프로젝트를 구성할 디렉터리 위치에 가서 아래와 같이 실행한다.

1
2
3
$ hexo init blog
$ cd blog
$ hexo server

hexo server가 http://localhost:4000 으로 실행됨.

5. blog/_config.yml 파일 수정하기

1
2
3
4
5
6
7

url: http://yoursite.com

deploy:
type: git
repo: https://github.com/crlo2/crlo2.github.io.git
branch: master

deploy 항목을 저렇게 수정하면 hexo가 명령어로 자동 배포 및 생성을 해준다.

6. hexo deployer 설치

1
$ npm install hexo-deployer-git --save

7. hexo 생성 및 git 레포지토리에 배포

1
2
$ hexo clean
$ hexo d -g

이렇게 배포를 해줘야만 https://clro2.github.io 주소로 접속하면 블로그 화면이 보인다.

[SQL] WHERE절

1. 연산자 종류

비교연산자

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

=
>
<=
>
>=
```

### SQL연산자
- BETWEEN a AND b
(a 이상, b이하의 값)
- IN(a,b,c)
(a,b,c중 하나라도 일치하는 값이 있으면 true)
- LKIE '비교문자열'
비교문자열과 형태일치(%, _)
- IS NULL
NULL인 경우(=NULL은 사용할 수 없음)

### 논리연산자
- AND
- OR
- NOT

### 부정비교연산자
- !=
(같지 않다)
- NOT 칼럼명= a
(칼럼명의 값과 a가 같지 않다)
- NOT 칼럼명 > a
(a보다 칼럼명의 값이 크다)

### 부정SQL연산자
- NOT BETWEEN a AND b
(a와 b사이에 있지 않다. a,b 포함하지 않음)
- NOT IN(a,b,c)
(a,b,c값과 일치 하지 않음)
- IS NOT NULL
(NULL 값을 갖지 않음, !=NULL 사용불가)

## 2.비교연산자

- STRING은 ''나 ""으로 묶어서 사용
- 숫자는 "",''사용 안 함

예제)

COFFEELIST 테이블에서 브랜드가 스타벅스 커피중에 가격이 5000원 이하이고 용량이 200m이상인 커피의 브랜드, 종류, 가격, 용량순으로 조회하시오.
```sql
SELECT 브랜드, 종류, 가격 FROM COFFEELIST
WHERE 브랜드 = '스타벅스' AND 가격 <=5000 AND 용량 >=200;
```

### 문자유형 비교방법
**CHAR VS CHAR**
- 길이가 다른 CHAR은 작은쪽에 SPACE추가하여 비교
- 서로 다른 문자가 나올때 까지 비교
- 달라진 첫 문자의 값에 따라 크기 결정
- BLANK 수만 다르면 서로 같은 값으로 결정

**VARCHAR2 VS CHAR**
- 서로다른 문자가 나올때까지 비교
- 길이다 다르면 짧은것이 끝날때까지만 비교 후 길이가 긴 것이 긴것으로 결정
- 길이가 같고 같은것이 없으면 같은것으로 결정
- VARCHAR2는 NOT NULL까지 길이를 말함(?)

**NUMVER VS 문자열**
- 상수를 변수 타입과 동일하겨 변경 후 비교
- 변수쪽이 CHAR 유형 타입이면 CAHR VS CHAR 적용
- 변수쪽이 VARCHAR2유형 타입이면 VARCHAR2 VS CHAR 적용

## 3. SQL 연산자
- 모든 데이터 타입에 적용가능한 연산자 소개
### IN(a,b,c) 연산자
- ()안에든 조건 중 하나와 일치하면 참


예제1)
COFFEELIST 테이블에서 브랜드가 스타벅스, 커피빈, 이디아인 데이터를 모두 조회하시오.
```sql
SELECT * FROM COFFEELIST
WHERE 브랜드 IN('스타벅스', '커피빈', '이디아');
```

예제2)
COFFEELIST 테이블에서 브랜드가 스타벅스이면서 가격이 5000원 이거나, 브랜드가 이디아이면서 가격이 3000원인 커피 데이터를 모두 조회 하시오.
* 결과 데이터 : 스벅 5000원커피 , 이디아 3000원 커피
```sql
SELECT * FROM COFFEELIST
WHERE (브랜드, 가격) IN(('스타벅스',5000),('이디아', 3000));
```

예제3)
COFFEELIST 테이블에서 브랜드가 스타벅스이거나 이디아이고, 가격이 5000원이거나 3000원인 데이터를 모두 조회하시오.
(예제2번과 결과가 다르다 비교하길)
* 결과 데이터 : 스벅 5000원 커피, 스벅 3000원커피, 이디아 5000원 커피, 이디아 3000원 커피
```sql
SELECT * FROM COFFEELIST
WHERE 브랜드 IN('스타벅스','이디아') OR 가격 IN(5000, 3000);
```

### LIKE 연산자
- %는 아무 데이터나 다 받음
- _는 한표시당 한 글자만 받음

예제)
COFFEELSIST테이블에서 종업원 성이 김 씨인 커피점 조회하시오.
```sql
SELECT * FROM COFFEELIST
WHERE 종업원 LIKE '김%';
```

### BETWEEN a AND b 연산자

예제)
COFFEELIST테이블에서 가격이 3000에서 5000원인 데이터 조회.
* 결과값 : 커피가격이 3000원이상 5000원이하인 커피 데이터 리스트

```sql
SELECT * FROM COFFEELIST
WHERE 가격 BETWEEN 3000 AND 5000;
```

### IS NULL 연산자
- NULL 과 수치 연산은 NULL값 리턴
- NULL과 비교연산은 FALSE리턴
- 특정값과 비교할 수 없고 크기 비교 불가

```sql
SELECT * FROM COFFEELIST
WHERE 브랜드 = NULL;
--결과값 : 선택된 레고드가 없음. (브랜드 = NULL)이 FALSE이기 때문

SELECT * FROM COFFEELIST
WHERE 브랜드 IS NULL;
--결과값 : 브랜드칼럼에 NULL이 들어가있는 데이터 조회
```

## 4. 논리연산자
### AND
해당되는 조건이 모두 참이어야 참
### OR
앞뒤의 조건 중 하나라도 참이면 참
### NOT
뒤에오는 조건과 반대되는 결과 리턴
- 연산자의 우선순위
(), NOT, AND, OR 순서이므로 ()를 적절히 사용하여 원하는 조건을 형성해야함

## 5. 부정연산자
### 논리부정연산자
### 부정 SQL연산자

## 6. ROWNUM
### ROWUNUM
- 임시로 부여되는 행 번호
- 테이블에서 원하는 행만 가져올때 WHERE절에서 행의 개수를 제한하는 목적으로 사용

```sql
--1행만 가져올때
SELECT * FROM COFFEELIST WHERE ROWNUM=1;
SELECT * FROM COFFEELIST WHERE ROWNUM<=1;
SELECT * FROM COFFEELIST WHERE ROWNUM<2;

--2행 이상 가져올때
SELECT * FROM COFFEELIST WHERE ROWNUM<=3;
SELECT * FROM COFFEELIST WHERE ROWNUM=3;--이건 사용불가(무조건 1행부터 데이터를 가져오기때문)
--고유한 키나 인덱스로 활용가능
UPDATE MY_TABLE SET COLUMN1 = ROWNNUM;

[SQL] TCL(TRANSACTION CONTROL LANGUAGE)

1.개요

  • 데이터베이스의 논리적 연산단위
  • 한 개 이상의 데이터베이스 조작단위(하나 이상의 SQL구문포함)
  • ALL OR NOTHING개념
  • 특성 :
    • 원자성(atomicity)-정의된 연산이 모두 성공해야함.하나라도 실패시 모두 실행하지 않음.
    • 일관성(consistency)-실행전에 내용잘못이 없다면 실행후 데이터베이스의 내용에 잘못이 있으면 안 됨
    • 고립성(isolation)-다른 트랜잭션의 영향을 받으면 안 됨
    • 지속성(durability)-성공한 트랜잭션이 생신한 데이터베이스내용은 영구적으로 저장

2.COMMIT

COMMIT

  • 입력이나 수정한 자료를 저장하고싶을때 COMMIT명령을 내려 저장
    (COMMIT전)
  • BUFFER에만 영향을 받았기에 데이터 변경 이전상태로 복구가능
  • 현재 사용자가 SELECT 문장으로 결과 확인 가능
  • 다른 사용자는 현재 사용자가 수행한 명령의 결과를 볼 수 없음
  • 변경된 행은 잠금(LOCKING)이 설정되어 다른 사용자가 변경할 수없음
    (COMMIT후)
  • 데이터 변경사항이 데이터베이스에 반영
  • 이전데이터 영구삭제
  • 모든 사용자가 결과 확인가능
  • 관련된 행의 잠금이 해제, 다른사용자들이 조작가능
1
2
-- 데이터 수정 변경 후
COMMIT;

AUTO COMMIT(SQL Sever방식)

  • DDL,DML이 수행될 때마다 DBMS가 트랜잭션 컨트롤하는방식,
    명령이 성공적으로 수행되면 자동으로 COMMTI,
    실패하면 ROLLBACK됨

암시적트랜잭션(ORACLE방식)

  • 트랜젝션 시작은 DBMS가, 끝은 사용자가 COMMIT, ROLLBACK으로 처리

명시적트랜잭션

  • 트랜젝션 시작과 끝을 사용자가 BEGIN TRANSACTION || COMMIT TRANSACTION ,
    ROLLBACK TRANSACTION으로 처리

3.ROLLBACK

ROLLBACK

  • 데이터 이전상태로 복구, 관련된 행에 대한 잠금이 풀림
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    --데이터 수정 변경 후
    ROLLBACK;
    ```

    ## 4.SAVEPOINT
    ### SAVEPOINT
    - ROLLBACK이 실행될 저장점을 지정
    - 복수저장점 정의가능
    - 먼저 정의된 SAVEPOINT로 롤백할 경우 이후 저장된 SAVEPOINT로 되돌릴 수 없음
    - DDL문장을 실행하면 자동커밋됨
    - DML 명령 후 DDL명령을 입력시 DML, DDL 명령모두 자동커밋
    - 데이터베이스 정상종료하면 자동 커밋
    - 어플리케이션 이상 종료는 자동 롤백
    ```sql
    SAVEPOINT SVPT1;
    ROLLBACT TO SVPT1;

    SAVE TRANSACTION SVPT2;
    ROLLBACK TRANSACTION SVPT2;

[JEKYLL과 깃허브로 블로그 만들기] 검색 메뉴(Search)만들기

1. /_config.yml 파일 수정하기

1
search: true

위의 내용 추가

2. 완성

캡쳐

[JEKYLL과 깃허브로 블로그 만들기] 네비게이션 메뉴 (Navigation)만들기

1. /_data/navigation.yml 파일 만들기

1
2
3
4
5
6
7
main:
- title: "TECHNOLOGY"
url: /tec/
- title: "WORLD-TRIP"
url: /trip/
- title: "OTHERS"
url: /posts/

위의 내용 추가

2. 완성

캡쳐

[SQL] DML(DATA MANIPULATION LANGUAGE)

생성된 테이블안에 데이터를 입력, 수정,삭제, 조회 하는 언어

  • AUTO COMMIT이 되질 않음
  • 입력후 COMMIT하면 저장, ROLLBACK하면 SAVEPOINT나 제일 최근 COMMIT전으로 돌아감

1. INSERT

INSERT

  • 한번에 한건의 행만 입력됨
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--원하는 칼럼에만 데이터 입력하는 방법
--칼럼명 입력하지 않은 칼럼은 NULL이나 DEFALUT값 입력됨
INSERT INTO 테이블명 (칼럼명1, 칼럼명2, ... , 칼럼명N)
VALUES (값1, 값2,..., 값N);

--테이블에 설정된 모든 컬럼에 데이터 입력하는 방법
--생성한 컬럼 순서대로 모든 값을 입력

INSERT INTO 테이블명
VALUES (값1, 값2, ...,값N);
```

## 2.UPDATE

### UPDATE
- 데이터 수정
- WHERE절을 사용하지 않으면 컬럼 전체가 수정할 값으로 변경됨


```sql
UPDATE 테이블명 SET 수정할값이있는컬럼명 = 수정할값 [WHERE 조건입력];

3.DELETE

DELETE

  • 데이터삭제
  • WHERE절 사용하지 않으면 컬럼전체 DATA가 삭제됨
1
DELETE [FROM] 테이블명 [WHERE 조건입력];

4. SELECT

SELECT

  • 사용자가 입력한 데이터 조회
  • DISTINCT옵션(ALL은 DEFAULT옵션임) : 중복된 데이터가 있으면 1번만 출력
  • *은 WILDCARD 모든 컬럼
  • ALIAS 컬럼에 별명붙이기: 컬럼바로 뒤에 옴, AS 생략가능
    ""는 공백, 특수문자를 포함할경우, 대소문자 구별이 필요할 경우 사용
    
  • 테이블에 있는 모든 데이터 조회(WILDCARD * 사용)
1
SELECT [ALL | DISTINCT]  * FROM 테이블명
  • 테이블에 있는 원하는 컬럼에 있는 데이터 조회(+별명붙이기)
1
2
SELECT 컬럼명1 [[AS] "벌명1"], 컬럼명2 [[AS] "별명2"], ..., 컬럼명3 [[AS] "별명3"] 
FROM 테이블명;
  • DISTINCT옵션
1
SELECT DISTINCT 칼럼명1 FROM 테이블명;

5.산술연산자 합성연산자

산술연산자(NUMBER자료형에 사용)

()연산자 우선순위 괄호
‘* ‘
‘/‘
‘+’
‘-‘

(CONCATENATION)합성연산자

  • 문자와 문자의 연결 ‘||’ 사용
  • CONCAT(STRING1, STRING2)
  • 칼럼과 문자 또는 다른 칼럼과 연결
  • 문자표현식의 결과의해 새로운 칼럼 생성
  • 산술연산자 예제
1
2
3
4
5
6
7
SELECT 칼럼명(숫자데이터타입)-칼럼명(숫자데이터타입) AS 차이 FROM 테이블명;
```

- 합성연산자 예제

```sql
SELECT 칼럼명(STRING데이터타입) || 칼럼명(STRING데이터타입) AS 문자열합 FROM 테이블명;

[JEKYLL과 깃허브로 블로그 만들기] 콜렉션(Collection)만들기

1. /_config.yml파일 수정하기

1
2
3
4
collections:
trip:
output: true
permalink: /:collection/:path/

위의 내용 추가

1
2
3
4
5
6
7
8
9
10
11

defaults:
# _trip
- scope:
path: ""
type: trip
values:
layout: single
author_profile: false
share: true
related: true

위의 내용 추가

2. _pages/trip-archive.md 파일 만들기

1
2
3
4
5
6
7
8
9
10

---
title: 여행
layout: collection
permalink: /trip/
collection: trip
entries_layout: grid
classes: wide

---

3._/trip/post1.md 파일 만들기

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

itle: "Trip1"
excerpt: "첫번째 여행글 입니다.."
header:
image: /assets/images/별그림.png
#teaser: assets/images/unsplash-gallery-image-1-th.jpg
sidebar:
- title: "Role"
image: /assets/images/별그림.png
image_alt: "logo"
text: "Designer, Front-End Developer"
- title: "Responsibilities"
text: "Reuters try PR stupid commenters should isn't a business model"
gallery:
- url: /assets/images/별그림.png
image_path: /assets/images/별그림.png
alt: "placeholder image 1"
- url: /assets/images/unsplash-gallery-image-2.jpg
image_path: /assets/images/별그림.png
alt: "placeholder image 2"
- url: /assets/images/unsplash-gallery-image-3.jpg
image_path: /assets/images/별그림.png
alt: "placeholder image 3"
categories: [아시아, 한국, korea]
tags: [hot, summer]

---

이사진은 별그림 입니다
{% include gallery caption="This is a sample gallery to go along with this case study." %}

이건 마지막 글입니다.
ude gallery caption="This is a sample gallery to go along with this case study." %}

4. 완성

참고:https://jekyllrb-ko.github.io/docs/collections/

[SQL] DDL(Data Definiation Language)

*자동으로 COMMIT됨(AUTO COMMIT)

1.자주쓰이는 데이터 유형

CHARCTER(s)

  • 고정길이 문자열정보
  • (s)만큼의 최대 고정길이를 갖고 할당된 변수값의 길이가 s보다 작을때는 공백으로 채움
  • ‘AA’=’AA ‘

VARCHAR2(s)

  • 가변길이 문자열정보
  • s만큼 최대값 입력가능, s이하의 변수길이값입력시 변수길이만큼 바이트적용
  • ‘AA’ != ‘AA ‘

NUMBER-정수, 실수 등 숫자정보

  • NUMBER(4,2) 8은 전체자리수, 2는 소수점 자리수(1234.56)를 나타냄

DATE-날짜와 시각정보

  • 1초돤위로 관리*

2.CREATE TABLE

테이블 생성식

1
2
3
4
5
6
CREATE TABLE TABLENAME(
COLUMNNAME1 DATATYPE [DEFAULT 형식] [NULL || NOT NULL],
COLUMNNAME2 DATATYPE [DEFAULT 형식] [NULL || NOT NULL],
...
COLUMNNAMEN DATATYPE [DEFAULT 형식] [NULL || NOT NULL]
);

테이블 생성시 주의사항

  • 벤더에서 정의한 예약어는 쓸 수 없음
  • A-Z(대소문자), 0-9, _, $, # 문자만 허용됨
  • 테이블명 칼럼명 첫 글자는 반드시 문자로 와야함

제약조건(CONSTRAINT)

  • 사용자가 원하는 조건의 데이터남 유지하기위한, 데이터 무결성을 유지하기위해 특정 칼럼에 설정하는 제약
  • 테이블 생성시 추가하거나 테이블 생성후 ALTER TABLE 이용해서 추가할 수 있음
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
ALTER TABLE MEMBERS ADD CONSTRAINT CK_MEMBERS_POINT CHECK(POINT<10) NOVALIDATE;#PRIMARY KEY(기본키)-각 행의 고유의 식별 데이터-하나의 테이블당 한개만 설정 가능-NULL 입력 불가능#UNIQUE KEY(고유키)-행데이터를 고유하게 식별하기 위한 키-테이블당 여러개 설정 가능-NULL 입력 가능--기본키 및 외래키(TABLENAME1이름의 테이블이 생성되어 있다고 가정) 입력방법1
CREATE TABLE TABLENAME(
COLUMNNAME1 DATATYPE [DEFAULT 형식] [NOT NULL],
COLUMNNAME2 DATATYPE [DEFAULT 형식] [NOT NULL],
...
COLUMNNAMEN DATATYPE [DEFAULT 형식] [NOT NULL],

CONSTRAINT PK_TABLENAME_COLUMNNAME1 PRIMARY KEY(COLUMNNAME1),
CONSTRAINT FK_TABLENAME_COLUMNNAME2 FOREGIN KEY(COLUMNNAME2)
REFERENCES TABLENAME2(COLMNUMNAME1)

);
--기본키 입력방법2
CREATE TABLE TABLENAME(
COLUMNNAME1 DATATYPE PRIMARYKEY [NOT NULL],
COLUMNNAME2 DATATYPE [DEFAULT 형식] [NOT NULL],
...
COLUMNNAMEN DATATYPE [DEFAULT 형식] [NOT NULL],

);

--기본키 및 외래키(TABLENAME1이름의 테이블이 생성되어 있다고 가정) 입력방법3
--테이블 생성 후(테이블 명 = TABLENAME)
ALTER TABLE TABLENAME
ADD CONSTRAINT PK_TABLENAME_COLUMNNAME1 PRIMARYKEY(COLUMNNAME1);

ALTER TABLE TABLENAME
ADD CONSTRAINT FK_TABLENAME_COLUMNNAME2 FOREGIN KEY(COLUMNNAME2)
REFERENCES TABLENAME2(COLMNUMNAME1)

--기본키 및 외래키 삭제
ALTER TABLE TABLENAME
DROP CONSTRAINT PK_TABLENAME_CONLUNMNAME1;

ALTER TABLE TABLENAME
DROP CONSTRAINT FK_TABLENAME_CONLUMNNAME2;

NOT NULL

  • NULL 값 입력금지
  • DEFAULT상태에서는 NULL 허가
  • NULL : 공백(“”), 숫자0이 아님, 정의되지 않은 미지의 값, 현재 데이터를 입력하지 못하는 경우
    NULL + 0 = NULL;
    NULL + ‘CHAR’ = NULL;

CHECK

  • 입력할수 있는 값의 범위를 제한

FOREIGN KEY(외래키)

  • 관계형데이터베이스에서 테이블간의 관계를 정의하기 위해 기본키를 다른 테이블의 외래키로 복사하는 경우 외래키 생성
  • 외래키 지정시 참조 무결성 제약옵선 선택가능

생성된 테이블 구조확인

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
DESCRIBE TABLENAME;
DESC TABLENAME;
```

### SELECT 문장을 통한 테이블 생성
TABLENAME과 같은 내용의 테이블 TABLENAME1을 복사해서 생성

```sql
CREATE TABLE TABLENAME1
AS SELECT * FROM TABLENAME;
```

## 3.ALTER TABLE

### ADD COLUMN
- 테이블에 컬럼 추가
- 추가된 칼럼은 테이블의 마지막 컬럼이 되고 컬럼위치를 지정하는것은 불가능

```sql
ALTER TABLE TABLENAME
ADD NEWCOLUMNNAME DATATYPE;
```

### DROP COLUNM
- 컬럼 삭제
- 데이터유무에 상관없이 삭제 가능
- 한번에 하나의 칼럼만 삭제가능
- 삭제후 최소 하나이상의 칼럼이 테이블에 존재해야함
- 삭제된 갈럼은 복구 불가능

```sql
ALTER TABLE TABLENAME
DROP COLUMN COLUMNNAME1;
```

### MODIFY COLUMN
- 칼럼 데이터 유형, 디폴트값(DEFAULT), NOT NULLL 제약조건 변경
- 칼럼의 크기를 늘릴 수는 있지만 줄일수는 없음(기존데이터 훼손방지)
- 칼럼이 NULL 값만 가지고 있으면 데이터 유형 변경가능\
- 칼럼에 행이 없거나 NULL값만 가지고 있으면 칼럼의 폭 줄이기 가능
- DEFALUT값 변경시, 변경작업 이후 발생하는 행 삽입에만 영향을 미침
- 칼럼에 NULL값이 없을 경우에만 NOT NULL 제약조건을 추가할 수 있음

```sql
ALTER TABLE TABLENAME
MONIFY (COLUMNNAME1 DATATYPE [DEFAULT] [NOT NULL],
COLUMNNAME2 DATATYPE [DEFAULT] [NOT NULL],
...
COLUMNNAMEN DATATYPE [DEFAULT] [NOT NULL]
);
```

### RENAME COLUMN
- 칼럼명 변경
- 해당 칼럼과 관계된 제약조건이 자동으로 변경

```sql
ALTER TABLE TABLENAME
RENAME COLUMN COLUMNNAME TO NEWCOLUMNNAME;

DROP CONSTRAINT

  • 테이블 생성시 부여했던 제약조건 삭제
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
ALTER TABLE TABLENAME
DROP CONSTRAINT PK_TABELNAME_COLUMNNNAME;
```

### ADD CONSTRAINT
- 제약조건 추가
- 외래키설정하면 참조된 테이블의 데이터 삭제가 불가능 할수도 있음

```sql
ALTER TABLE TALBENAME
ADD CONSTRAINT PK_TALBENAME_COLUMNNAME PRIMARY KEY(COLUMNNAME);

ALTER TABLE TABLENAME
ADD CONSTRAINT FK_TABLENAME_COLUMNNAME
FOREGIN KEY(COLUMNNAME) REFERENCES TABLENAME1(COLUMNNAME1);
```


## 4. RENAEM TABLE
### RENAME TABLE
- 테이블 이름변경

```sql
RENAME TABLE TABLENAME TO NEWTABLENAME;
```


## 5.DROP TABLE
### DROPT TABLE
- 테이블 삭제
- CASCADE CONSTRAINT는 해당 테이블과 관계있던 참조 제약조건도 삭제한다는 뜻

```sql
DROP TABLE TABLENAME [CASCADE CONSTRAINT];
```

## 6. TRUNCATE TABLE

### TURNCATE TABLE
- 테이블의 모든 행(데이터)삭제
- DML로 분류할수도 있지만 AOUTO COMMIT특성이 있어 DDL로도 구분가능
- DELETE와는 다름
- 정상적인복구가 불가능

```sql
TURNCATE TABLE TABLENAME;
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×