Database SQL/Oracle

[DB#07]테이블 제어(Table CRUD)

양동민 2020. 11. 17. 03:52

헤더(Header)는 제목이라고 생각하면 좋다. 

학생 명단과 점수가 있다고 하면 헤더는 이름, 점수이며 바디는 ooo 80, xxx 92 정도로 이해하면 된다.

 

'학생명단' 테이블은 다음과 같다. 괄호는 고려해야하거나, 설명하는 부분이다.

학생명단

이름(헤더)(문자열String)(51byte) 점수(헤더)(정수 Int)(3자리0~100)
학생A(바디) 80(바디)
학생B(바디) 70(바디)
학생C(바디) 40(바디)
뽀로로(바디) 100(바디)

 

+) 이름, 정수든 칸의 크기를 고려해야한다. 이름이 "박하늘별님구름햇님보다사랑스러우리" 라는 이름이라면 칸이 굉장히 넓어진다. 17글자의 이름이라면 한글(3byte)로 51byte이다. 한글은 유니코드로 UTF-8이다. 한글은 초성, 중성, 종성으로 3byte로 한다.

 

(CRUD-C)

현재 모두 한글로 적었지만, 

학생명단은 student로 테이블 명을 설정.

테이블 설정은 create table student가 기본이며

줄과 칸을 설정하는 경우는 첫 번째 칸 정보, 두 번째 칸 정보보create table student(첫 번째 칸 정보, 두 번째칸 정보);

이름은 name, 점수는 score 라고 하면 create table student(name, score); 겠지만, 51바이트라는 정보와 문자열이라는 것을 알려주어야 한다. 문자열은 여기서 varchar2(가변 문자열) 라는 이름으로 쓰인다. 숫자는 int가 아닌 number로 쓰인다. Java에서나 String, int였으니 유의하자. 

 

때문에, create table student(name varchar2(51), score number(3));

이라고 하면 완성이 된다.

 

이후 Run SQL Command Line 창에 입력하면 "Table created."라고 뜬다.

지우는 형식은 당연하게도 drop table student; 라고하면 된다.

 

 

(CRUD-R)

다음은 테이블 조회이다.

select tname from tab; 또는 select * from tab; 조회하는 명령은 이러하다. *은 전체 tname은 테이블이름을 조회한다.

 

 

이 명령을 입력하면 창에

TNAME
------------------------------------------------------------
STUDENT

이렇게 표시된다.

 

 

그리고 describe student; 라고 입력하면 상세하게 학생명을 설명하라고 하는 명령이다. 줄여서 desc student; 라고한다.

입력하면 창에

 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NAME                                               VARCHAR2(51)
 SCORE                                              NUMBER(3)

이렇게 표시된다.

 

(CRUD-U)

다음은 수정하는 방법이다.

현재 테이블에서 수정하는 것은

테이블 이름변경말고 51byte를 더 많은 60byte로 '크기'를, 또는 varchar2를 number로 '형태'를 바꾼다던지 항목을 추가하거나 삭제를 한다던지(name이나 score), 또는 name이나 score의 이름을 바꾼다던지 등등이다.

 

첫 번째로 51byte를 60byte로 변경해보자.

student테이블에서[table student] name의[name] 형태를[modify] varchar2(60)으로[varchar2(60)] 바꾸세요[alter]! 

위는 나름의 해석이다.

alter table student modify name varchar2(60); 를 입력하면 Table altered. 라고 표시가 되고 다시 조회해보면

SQL> describe student;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NAME                                               VARCHAR2(60)
 SCORE                                              NUMBER(3)

이렇게 변경된 것을 알 수 있다.

 

이렇게 무언가를 바꿀땐(컬럼 형태를 바꿀 때) modify (컬럼명 형태)를 쓸 수 있다는 것을 알아야한다.

이 외에도 alter table add (컬럼명 형태) , alter table drop (컬럼명) 과 같은 명령들이 있는데,

 

만약 name, score 외에 age를 추가하는 경우에 add를 사용하는데.

alter table student add age number(3); 과 같이 추가하면 된다.

()괄호를 사용하면 여러개를 추가할 수 있고, 사용하지 않으면 하나만 추가할 수 있다.

alter table student add(age number(3), ooo oooo(??));

 

+)만약 name, score, age 순으로 테이블을 만드는게 아니라 age를 가운데에 넣고 싶다면 아예 score를 age로 이름을 바꾸고 새로 score를 추가하는 식으로 만들어야한다.

우선 temp라는 이름으로 컬럼을 만들고 score를 age로 바꾸고 temp를 score로 바꾸면 된다.

 

방금 add로 추가했던 age 컬럼을 삭제한다고 해보자.

alter table student drop(age);  라고 입력하면 창에 table altered. 라고 나오며 age가 삭제된 테이블을 만들 수 있다.

 

 

 

 

 

 

 

 

 

+)

*은 import java.lang.*; 에서와 같이 *은 전체를 의미한다.

*은 와일드카드라고 부른다.