Untitled_Blue

[SQL] DML - INSERT, UPDATE, DELETE 본문

Database/SQL

[SQL] DML - INSERT, UPDATE, DELETE

Untitled_Blue 2023. 5. 30. 21:47
반응형

안녕하세요. 이번 글은 DML에 대한 설명입니다.

- DML 이란?

DML은 Data Manipulation Language 의 약자로서 테이블 내 데이터를 추가, 수정, 삭제하는 명령어로 구성되어 있는 언어를 의미한다. DML은 DQL인 SELECT과 함께 CRUD(Create, Read, Update, Delete) 작업에 많이 쓰이는 명령어이다.

실습 및 설명을 하기 앞서 앞으로 사용할 테이블은 이전 포스트에서 만든 PRACTICE01 테이블을 사용할 것임을 언급하고 시작하겠다. 별도로 생성해서 사용하는 이유는 오라클에서 기본적으로 제공하고 있는 테이블들은 원본 그대로 유지하고자 하는 의도이기 때문이다.

- 데이터를 삽입할 때는 INSERT

  • INSERT INTO [테이블명] (칼럼1, 칼럼2, ... ) VALUES (칼럼에 대한 데이터1, 칼럼에 대한 데이터2 ... );
insert into PRACTICE01 values ('홍길동', '20230512', '영어영문학과', '2023-03-02');

다음 코드는 PRACTICE01 테이블 안에 소괄호 안에 있는 정보를 추가하겠다는 뜻을 가지고 있다. 실행해보면 1 행 이(가) 삽입되었습니다. 라는 알림을 발생할 것인데 이는 곧 정상적으로 추가되었다는 뜻으로 해석할 수 있다.

INSERT 작업 후 테이블을 조회해보면 다음과 같이 정상적으로 입력한 값이 테이블에 추가된 점을 확인할 수 있다. 이때 모든 칼럼 안에 데이터를 추가하려고 할 때는 테이블명 뒤에 (칼럼명1, 칼럼명2...)을 입력하지 않아도 된다.

insert into PRACTICE01 (STU_NAME, STU_DEPT) values ('이순신', '컴퓨터공학과');

만약 선택적으로 칼럼을 정해서 입력하고자 하면 테이블명(칼럼1, 칼럼2) values (칼럼1의 데이터, 칼럼2의 데이터) 방식으로 일대일로 매칭이 되도록 입력해야 한다. 그만큼 입력하지 않은 구간 null값으로 자동인식됨도 확인할 수 있다. 만약 선택되지 않은 칼럼명이 기본키 또는 NOT NULL (빈 값을 허용하지 않는 제약조건)에 해당되면 빈 값으로 둘 수 없기 때문에 오류가 발생하는 것을 확인할 수 있을 것이다. 이 부분은 제약 조건 부분에서 설명할 예정이다.

- 데이터를 수정하는 UPDATE

  • UPDATE [테이블명] SET [변경할 칼럼] = '변경할 데이터', [변경할 칼럼2] = '변경할 데이터2', ... WHERE [칼럼명] = 조건 설정값 (변경할 행을 선택하는 과정에 해당)

원활한 실습을 위해 중간에 데이터를 별도로 추가하였다. 

update PRACTICE01 set STU_NUMBER = '20152465', STU_START_DATE = '2015-03-02' where STU_NAME = '이순신';

다음 코드는 PRACTICE01 테이블에서 STU_NAME이 이순신인 학생의 학번 (STU_NUMBER)과 입학날짜(STU_START_DATE)을 각각 입력한 값대로 변경한다는 뜻을 가지고 있다. 실제 기존 테이블에서의 이순신 학생의 학번과 입학날짜는 null값, 빈 공간으로 남겨져 있었다. 코드를 실행해서 select 문을 통해 테이블 내 행을 조회해보면 이순신의 학번과 입학날짜가 정상적으로 업데이트된 점을 확인할 수 있다.

update PRACTICE01 set STU_DEPT = '패션디자인학과' where STU_NAME = '하예진';

다음 코드는 PRACTICE01 테이블에서의 하예진 학생의 학과를 패션디자인학과로 수정하는 작업의 명령어이다.

해당 코드를 실행한 후 SELECT 문을 통해 테이블의 모든 데이터를 조회해보면 상단 이미지처럼 기존 하예진 학생의 전공인 시각디자인학과가 패션디자인학과로 정상적으로 수정되었음을 확인할 수 있다. 이때 학생 테이블을 기준으로 첨언하자면 이름은 동명이인이 존재할 수 있기 때문에 update문을 사용하면서 where 문에 왠만하면 학생의 이름을 조건문으로 사용하지 않는 것이 좋다. 하나만 변경되는 것이 아닌 동명이인 학생들의 정보가 모두 바뀌면 상당히 곤란하기 때문이다. 이럴 때는 절대 중복되지 않는 각 학생들에게 부여되는 고유번호인 학번을 조건문에 사용하는 것이 좋다.

- 데이터를 삭제하다. DELETE 문

  • DELETE FROM [테이블명] WHERE [칼럼명] = 조건 설정 값;

DELETE문은 테이블 내 특정 조건에 해당되는 행의 데이터를 삭제하는 명령어이다.

delete from PRACTICE01 where STU_NAME = '정수영';

해당 코드는 PRACTICE01 테이블에서 학생 이름이 정수영인 행의 데이터를 삭제하라는 뜻을 가지고 있다.

해당 코드를 실행한 후 SELECT문을 통해 테이블의 데이터를 조회해보면 행의 갯수가 10개에서 9개로 감소된 점과 기존 4번에 있었던 정수영 학생의 정보가 다른 학생의 정보가 있는 점을 확인할 수 있다. 어느 관점에서 보더라도 정수영 학생의 정보가 삭제되었음을 알 수 있다.

delete from PRACTICE01;

다음과 같이 where 조건절 없이 테이블명만 입력한 채 실행하면 테이블 내 모든 데이터를 삭제할 수도 있다.

 

다음 글은 DCL에 대한 간략한 설명입니다. 감사합니다.

반응형