지금까지 SELECT 문에 대해 장시간에 걸쳐 실습해 보았습니다.
이번 시간부터는 UPDATE, INSERT, DELETE 문에 대해 차례대로 알아 보겠습니다.
UPDATE, INSERT, DELETE 문을 보통 DML – Data Manipulation Language라고 합니다. 우리말로 데이터 조작어라고 번역할 수 있습니다.
SQL 명령어의 분류에 대해서는 이미 제19강 SQL과 SQL*Plus에서 다룬 적이 있습니다. 혹시 기억이 안나시면 참조하시기 바랍니다.
오늘은 DML, 그 첫시간으로 UPDATE 명령에 대해 알아 보겠습니다.

- UPDATE 형식과 특징
UPDATE table_name
SET column_one = expression, column_two = expression, …
WHERE search condition(s);- UPDATE는 테이블의 행(레코드) 값을 ‘변경’할 때 사용합니다.
- 하나의 UPDATE 문으로 하나의 테이블 또는 뷰(View)만 수정할 수 있습니다.
예를 들어 하나의 뷰(View)라고 해도 여러 개의 테이블로부터 만들어진 뷰라면 UPDATE 문을 쓸 수 없습니다. - SET절에서 원하는 컬럼에 특정 값을 대입합니다. 이때 변경을 원하는 컬럼만 표시하면 됩니다.
- 테이블의 프라이머리 키는 UPDAGE할 수 없습니다.
단, 프라이머리 키라고 해도 다른 테이블에서 FK(외래키)로 참조하지 않으면 UPDATE할 수 있습니다. - WHERE에서 조건을 지정합니다.
만약 WHERE절이 없으면 테이블의 모든 행(레코드)를 UPDATE합니다.
- 실습을 위한 테이블 만들기
이번 시간 실습을 위해 다음과 같은 CLASS 테이블과 CUSTOMER 테이블을 만들어 둡시다.
테이블을 만들기 위한 명령어인 CREATE에 대해서는 다음 시간에 다룹니다. 드디어!CREATE TABLE CLASS
( CODE CHAR(3) PRIMARY KEY,
DESCRIPTION VARCHAR2(30));
INSERT INTO CLASS VALUES (‘F01’, ‘FIRST’);
INSERT INTO CLASS VALUES (‘B01’, ‘BUSINESS’);
INSERT INTO CLASS VALUES (‘E01’, ‘ECONOMY’);CREATE TABLE CUSTOMER
( CUST_NO CHAR(3) PRIMARY KEY,
NAME VARCHAR2(10) NOT NULL,
MILEAGE NUMBER,
CODE CHAR(3),
REG_DATE DATE NOT NULL);
INSERT INTO CUSTOMER VALUES (‘100’, ‘김철수’, 10000, ‘F01′, ’01/01/01’);
INSERT INTO CUSTOMER VALUES (‘101’, ‘이윤정’, 2000, ‘E01′, ’01/03/05’);
INSERT INTO CUSTOMER VALUES (‘102’, ‘박준서’, 5000, ‘B01′, ’01/02/28’);
INSERT INTO CUSTOMER VALUES (‘103’, ‘김종현’, 12000, ‘F01′, ’01/08/15’); - 실습 1
다음과 같은 EMP 테이블에서 EMP_NUM이 10001인 레코드의 JOB_CODE를 “SS”로 변경해 봅시다.

UPDATE EMP
SET JOB_CODE = ‘SS’
WHERE EMP_NUM = ‘10001’; - 실습 2
다음과 같은 CUSTOMER 테이블과 CLASS 테이블이 있다고 할 때,
DESCRIPTION이 “FIRST”인 CODE에 해당하는 사람의 마일리지를 50% 추가해 봅시다.
두 개의 테이블이 있고, 서로 참조해야 하기 때문에 SubSelect 문을 사용해야 되겠죠?
UPDATE CUSTOMER
SET MILEAGE = MILEAGE * 1.5
WHERE CODE = ( SELECT CODE
FROM CLASS
WHERE DESCRIPTION = ‘FIRST’);

비교적 쉬운 내용입니다.
실습 2에서 다시 나온 SubSelect 문은 실무에서 매우 유용하게 사용됩니다. 꼭 숙지하도록 해 주시기 바랍니다.
이상 월요일 아침, 예쁜 동주의 빨리 낫기를 빌며
동주 아빠 손병목이었습니다.
