DB/SQL - Oracle

[SQL] DML(데이터 조작어) - insert, update, delete

생각많은 프로그래머 2024. 2. 2. 03:04

SQL을 접하게 되면 흔히 듣는 단어가 있다. 

바로 'CRUD'이다!

(다소 짧은 인트로.. 하지만 개발을 하게 되면 정말 자주 쓰게 되는 용어이다.

자주 쓴다는 건 그만큼 중요하다는 의미일 것이다.)

 
여기서 CRUD 란,
Create Read Update Delete 의 앞글자를 조합한 단어이다.
클라이언트가 요청한 대로 데이터를 생성, 조회, 수정, 삭제하는 것을 말한다. 
 

 

오늘은 그 중에서도 CRUD와 밀접한 관련이 있는 

데이터 조작어(DML)에 대해 다뤄보겠다.

select의 경우는 다룰 내용이 좀 더 있어서 다른 글에 정리해보려 한다.

 

SQL 종류
 
1. 데이터를 정의하는 쿼리 - DDL(데이터 정의어) : create, drop, alter, truncate 
2. 데이터를 조작하는 쿼리 - DML(데이터 조작어) : insert, select, update, delete
3. 데이터를 제어하는 쿼리 - DCL(데이터 제어어) : grant, revoke
4. 트랜잭션 제어하는 쿼리 - TCL(트랜잭션 제어어) : commit, rollback, checkpoint 

 

 

튜플 삽입 명령어 : insert

 

insert into 테이블명 values( .... );

 

예) 테이블 aaa에 튜플 3개를 삽입

 

유의할 점은,

1. varcahr2가 속성인 컬럼에는 문자열을 삽입해야하므로 값의 앞뒤에 '를 입력한다.

2. 각 컬럼의 값을 구분하기 위해 ,를 붙여준다.

3. 컬럼의 순서에 맞게 해당 값을 입력해야 한다.

 

insert를 할 때는 해당 컬럼의 속성에 근거해서 

작은 따옴표(') 표시나 콤마(,) 입력, 입력순서, 속성에 맞는 입력값을 부여해야 

정상적으로 튜플이 삽입된다.

 

위에서는 속성이 문자열인 경우만 다뤘는데,

그렇다면 다른 속성일 때는 어떨까? 

 

만약 컬럼의 속성이 숫자(number나 int 등)라면  >> age number(2)

age컬럼의 순서에 맞게 해당 숫자값을 작은 따옴표 표시 없이 입력한다.

 >> insert into table명 values( ... , 20, ...);

 

*** 최대 2바이트까지 입력이 가능하므로 2자리까지 삽입을 허용한다는 점도 확인하자!

(0~99까지는 삽입가능하지만, 100부터는 안된다는 말이다.)

 

 

timestamp와 같이 날짜/시간 속성인 경우에는

보통 default sysdate와 함께 테이블을 생성할 때 기본값을 부여한다.

>> wdate timestamp default sysdate

 

이 경우에 삽입 시 기본값이 들어가도록 하려면 wdate컬럼의 순서에 맞게

해당 자리에 default를 입력한다. 

>> insert into table명 values( ... , defalut, ...);

 

*** 꼭 날짜 속성이 아니더라도 default값이 삽입되려면 default값을 입력하면 된다.

 

 

시퀀스 값을 삽입하는 경우를 설명하면서

앞서 언급했던 내용을 한 번에 살펴볼 수 있는 예시를 다뤄보고자 한다.

예를 들어 goods라는 테이블을 아래와 같이 생성했다고 가정하자.

create table goods (
no number(3) primary key,
name varchar2(5),
cnt number(3) check (ct between 1 and 100),
type varchar2(4) check (type=' 일반' or type='주의'),
wdate timestamp default sysdate
);

 

 

테이블 goods  에 튜플을 삽입하려면 아래와 같이 입력할 수 있다. 

*** 물론 시퀀스에 해당하는 값을 테이블에 삽입하려면 그 전에 시퀀스를 생성해야 한다!

insert into goods values (goods1_seq.nextval,'가나다라마',1,'일반',default) ;

 

테이블의 모든 컬럼에 해당하는 값을 삽입한다면 아래와 같이
insert into 테이블명 values ( 컬럼 순서대로 값 입력);
테이블명 다음에 별도로 컬럼명을 작성하지 않고 values를 쓴 후에 삽입할 값을
테이블의 컬럼 순서대로 모두 입력해주면 되지만,
특정 컬럼의 값만 삽입하고 싶다면 아래와 같이 어떤 컬럼인지 지정한 후에 순서에 맞게 삽입한다.
insert into goods (no, name, cnt, type) values (goods1_seq.nextval,'가나다라마',1,'일반') ;

참고) goods - 테이블명 / no, name, cnt, type - 값을 삽입할 컬럼명
 

 

튜플 수정 명령어 : update

 

* 특정 컬럼의 을 수정 : update  테이블명 set 컬럼명 = '수정값' where 컬럼명 = ?;

update goods set name = '가나다' where name = '가나다라마';

 

*** 컬럼의 속성을 변경하려면  update가 아니라 alter를 사용해야 한다.

 

 

튜플 삭제 명령어 : delete
* 모든 튜플 삭제 : delete from 테이블명;
delete from goods;
* 일부 튜플 삭제 : delete from 테이블명 where 컬럼명 = ? ;
delete from goods where name = '가나다라마';

 

*** where 절을 사용해서 특정 튜플만 삭제하도록 처리할 수도 있다.