일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 자바스크립트
- 웹
- 코딩
- frontend
- SQL
- HTML
- jsp
- web
- 파이썬
- function
- 자바
- 서블릿
- 함수
- Python
- PL/SQL
- Method
- java
- oracle
- 데이터베이스
- 오라클
- Database
- JavaScript
- 메소드
- It
- Servlet
- 프론트엔드
- 프로그래밍
- 문자열
- Programming
- String
- Today
- Total
Untitled_Blue
[SQL] DML - INSERT, UPDATE, DELETE 본문
안녕하세요. 이번 글은 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에 대한 간략한 설명입니다. 감사합니다.
'Database > SQL' 카테고리의 다른 글
[SQL] 그룹별 데이터의 통계 - Group by and Having (0) | 2023.06.20 |
---|---|
[SQL] 쿼리 안에 또 다른 쿼리?! - 서브쿼리 (Sub Query) (0) | 2023.06.19 |
[SQL] DDL - CREATE, ALTER, DROP (0) | 2023.05.29 |
[SQL] DECODE와 CASE 조건문 (0) | 2023.05.27 |
[SQL] 형 변환 함수 (0) | 2023.05.27 |