데이터베이스 - 데이터 조작(DML) 첫 번째

데이터 조작


이번에는 데이터베이스에서 데이터 조작을 위한 DML 명령어들을 공부해보자.

DML: insert - 추가
update - 수정
delete - 삭제
merge - 병합

DML은 이렇게 4가지 명령어로 구성되어 있다. 이 중 insert문에 대해서 먼저 살펴보자. 


insert

insert문의 문법을 먼저 알아보자. 그 형식은 간단한다.

insert into 테이블명 values (값, 값, 값);

이 때, 각 값은 칼럼의 순서와 동일하기 때문에 테이블의 구조를 알아야만 입력이 가능하다. 그리고 문자열, 날짜데이터에 대해서는 " "를 사용하여야 한다.

insert문을 연습하기 앞서 테이블을 하나 만들자. 저번에 공부했듯이 서브쿼리를 이용하여 테이블을 생성해보겠다.


이 때 조건절을 false로 만들어 테이블의 항목들은 가져오되 내용은 복사하지 않도록 한다.

이제 우리가 만든 테이블에 내용을 넣어보도록 하겠다.

만약에 문자열에 ‘ ’를 입력하지 않으면 다음처럼 오류 메시지가 출력된다.

숫자는 자동 형변환하기 때문에 상관은 없다.

그리고 입력 받는 순서대로 해당 테이블의 칼럼 순서이기 때문에 이에 대해 미리 desc를 통해 확인하고 입력하도록 한다.



null 입력

우리가 앞서서 null을 배웠었다. 이는 데이터가 셀 안에 입력되지 않은 경우를 말한다. 그렇다면 null을 만들기 위해서는 어떻게 할까?

한 항목을 비운 채 insert문을 실행해보자.

다음처럼 누락되었다는 메시지가 출력된다. 즉 단순하게 데이터를 비웠다고 null이 되진 않는다. 이를 위해서는 해당 항목에 null이라는 값을 입력해주어야 한다.


null이 제대로 만들어졌는지 테이블을 출력해보자.

null을 만드는 방법은 한 가지 더 존재한다. 빈 문자열을 사용하는 것이다. 빈 문자열이기 때문에 숫자 데이터에 대해서 null을 만들진 못하고, 문자 데이터에 대해서만 가능하다. 한번 만들어보자.


제대로 null이 생성되었는지 select문을 출력해보자.

지금까지는 모든 칼럼에 값을 입력하여 insert문을 수행하였다. 하지만 하나의 칼럼에만 데이터를 넣는 것도 가능하다.

다음 구문을 실행해보자.

결과적으로 dname에만 60이라는 값이 입력되고, 나머지 칼럼은 다 null 처리가 된다. 이 방법을 사용하면 모든 칼럼에 데이터를 채워넣을 필요는 없다.

두 개 이상의 칼럼에 대해서 insert 하는 것도 물론 가능하다.

여기까지가 insert문에 기본적인 내용에 해당한다. 뒤에서 insert문을 활용하여 추가적인 내용들을 학습하자.


특수 값 입력, 날짜 입력

sysdate, user와 같은 특수 함수를 사용하여 insert문을 작성할 수 있다. 이를 사용하면 현재 사용자의 계정이나 시스템의 날짜 등에 대해 알 수 있다. dual 테이블을 이용해서 어떤 값들이 출력되는지 미리 확인해보자.


이제 user와 sysdate를 활용하여 insert문에서 데이터로 입력을 하도록 하겠다.


내용을 확인해보면, 현재 사용자 계정인 scott과 현재 날짜 18/11/20이 제대로 삽입된 것을 볼 수 있다.


다음은 날짜 입력을 해보도록 하겠다.
insert문에서는 날짜를 RR/MM/DD 형식으로 입력해야 한다. 따라서 RR-MM-DD 형식에 대해서는 올바르게 인식하지 않는다. 따라서 to_date를 사용하여 이를 날짜로 바꾸도록 하자.

날짜 데이터로 입력이 되고 있음을 확인할 수 있다. 만약에 to_date를 쓰지 않는다면 어떻게 될까?

date형에 문자형이 입력되었기 때문에 문자열이 일치하지 않는다는 오류 메시지를 출력한다.


default

이번엔 default라는 것을 활용해보겠다.

새로운 dept2 테이블을 만들고, 이 때 wdate라는 칼럼을 추가한 뒤 default값으로 sysdate를 설정한다.


이제 테이블을 생성하고, 행 두개를 삽입해보겠다.

처음엔 값을 모두 입력하고, 두 번째 행에선 default를 활용해보겠다. 그 결과를 확인해보자. 현재 날짜인 20일 두 번째 행에서 잘 입력되고 있음을 확인하였다. 데이터베이스마다 default 설정을 해둔 경우 다음과 같이 데이터를 입력할 수 있다.



다른 테이블로부터 행 복사

insert into ~ select문을 사용하여 다른 테이블에 저장된 복수 개의 행들을 한번에 입력하는 것도 가능하다.

이를 테스트하기 위해서 먼저 emp10이라는 테이블을 생성하였다.

생성한 테이블에 insert into ~ select문을 실행한다. 우리가 필요한 칼럼 항목들만 select에서 불러온다. 그리고 조건절을 추가하였다.

해당 조건에 만족하는 emp 테이블의 데이터 중 empno, ename, job, sal에 대한 정보만을 가져와서 emp10 테이블에 insert하고 있음을 확인하였다.

* 이 때, 칼럼명이 동일한 경우에는 쓰지 않아도 상관없다.



참고로 insert문에서 테이블 명 대신 서브쿼리 생성도 가능하다.




댓글

이 블로그의 인기 게시물

데이터베이스 PL/SQL - 배열과 테이블

데이터베이스 PL/SQL 변수선언

데이터베이스 PL/SQL 제어문 - 반복문