> For the complete documentation index, see [llms.txt](https://docs.sysout.co.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sysout.co.kr/database/oracle/structure-query-language/user-query/manage-table.md).

# 테이블 관리

## 테이블 관리

테이블은 **데이터를 저장하기 위한 공간**이라고 생각하면 된다. 표 형태로 생각하면 이해하기 쉽다.

일반적인 데이터 저장 형태는 다음과 같다

**데이터 예시 : 학생 정보**

| 번호 | 이름   | 성별 | 나이 |
| -- | ---- | -- | -- |
| 1  | 이오리  | 남자 | 30 |
| 2  | 베니마루 | 남자 | 27 |
| 3  | 마이   | 여자 | 21 |
| 4  | 루갈   | 남자 | 45 |

이처럼 데이터가 들어갈 수 있는 형태(ex : 표)를 테이블이라고 한다.

테이블은 행(Row)과 열(Column)으로 구성되어 있다.

* 행(Row) : 1개의 데이터 단위를 의미. 튜플(Tuple), 레코드(Record)라고도 한다.
* 열(Column) : 1개의 속성을 의미

### 테이블 생성

테이블을 생성하기 위해서는 열(Column) 정보를 명시해야 한다.

| 번호 | 이름 | 성별 | 나이 |
| -- | -- | -- | -- |

다음과 같이 테이블을 만들어야 하단에 데이터를 추가할 수 있으며, 데이터는 정해진 유형에 따라 공간을 할당받다. 샘플 테이블 생성 코드는 다음과 같다.

```sql
create table kof(
no number(2),
name varchar2(12),
gender varchar2(6),
age number(2)
);
```

표로 표현하면 다음과 같다.

| <p>번호<br>(숫자2자리)</p> | <p>이름<br>(문자열 12byte)</p> | <p>성별<br>(문자열 6byte)</p> | <p>나이<br>(숫자2자리)</p> |
| -------------------- | ------------------------- | ------------------------ | -------------------- |

자리 수나 크기를 정하는 이유는 간단하다. 공간을 효율적으로 사용하기 위해서이다. 데이터베이스 역시 저장소이므로 물리적인 저장 공간을 사용하며, 저장 크기가 작을 수록 효율성이 높다고 할 수 있다. 따라서 사용자가 테이블을 만들 때 저장될 데이터의 최대치를 명시해주어 공간을 낭비하는 일 없이 사용할 수 있게 된다.

{% hint style="info" %}
공간을 정해두지 않고 자동으로 할당할 경우 추가 시간이 소요되어 성능 저하가 발생한다
{% endhint %}

문자열의 경우 `varchar2`를 사용하는데, 크기는 `byte`로 지정한다. 오라클은 기본적으로 `UTF-8` 인코딩을 사용하기 때문에, 한글의 경우 1글자가 3byte를 차지한다.

인코딩을 확인하기 위한 명령은 다음과 같다.

```sql
select parameter, value from nls_database_parameters where parameter = 'NLS_CHARACTERSET'
```

### 테이블 조회

다음 명령은 현재 계정에 존재하는 테이블을 조회한다.

```sql
select * from tab;
```

하나의 테이블에 대한 상세 형태를 보고 싶을 경우 `describe` 명령을 사용한다.

```sql
desc[ribe] 테이블이름;
```

### 테이블 변경

```sql
alter table 테이블이름 add(컬럼명 형태)
alter table 테이블이름 modify(컬럼명 형태)
alter table 테이블이름 drop(컬럼명)
```

테이블을 변경하는 방법은 3가지가 있다. 각각 컬럼 추가, 컬럼 수정, 컬럼 삭제이며 컬럼 배치 순서를 변경하는 명령은 없다.&#x20;

{% hint style="info" %}
우회적으로 컬럼 추가, 컬럼 이름변경, 컬럼 삭제를 이용하여 처리할 수 있다.
{% endhint %}

### 테이블 삭제

```sql
drop table 테이블이름;
```

테이블이 삭제된다. 테이블과 관련된 제약조건이 존재할 경우 같이 삭제하여야 한다.

```sql
drop table 테이블이름 cascade 제약조건;
```

### 테이블 초기화

```sql
truncate table 테이블이름;
```

테이블을 초기 상태로 되돌린다. 데이터는 사라지게 되며, 이는 일반적인 방법으로 복구가 불가능하다.
