UPDATE 개념
UPDATE는 테이블에서 명시한 컬럼의 데이터를 변경하는 구문입니다.
기본 UPDATE 구문
UPDATE table_name SET column_name = column_value [WHERE conditions];
- - SET column_name = column_value,.. : 테이블의 명시한 칼럼 값을 변경하는 부분이며, 괄호 없이 SET절을 ,(콤마)로 연결해 여러 칼럼의 값을 한꺼번에 변경할 수도 있다.
- - [WHERE conditions]; : SET절에서 명시한 칼럼을 변경할 행을 제한하는 부분이며 생략할 경우 전체 테이블 데이터 중 SET절에 명시한 칼럼의 값을 변경한다.
기본 UPDATE 예제
emp 테이블에서 KMLEE의 급여를 2,500,000원으로 변경하시오.
iSQL> UPDATE employee SET salary = 2500000 WHERE ename = 'KMLEE';
emp 테이블에서 모든 사원들의 급여를 일괄적으로 7%씩 인상
iSQL> UPDATE employee SET salary = salary * 1.07;
다중 컬럼 UPDATE 구문
한 개의 컬럼이 아닌 여러 개의 컬럼을 한꺼번에 변경하는 경우에 변경할 컬럼명과 변경할 값을 ',' 를 이용해서 나열합니다.
UPDATE table_name SET (column_name, column_name, ...) = (value, value, ... ) [WHERE conditions];
- - SET (column_name, column_name, ...) = (value, value, ...) : 괄호를 이용해 여러 개의 칼럼 값을 한 번에 변경 가능하다. 아울러 value를 명시하는 부분에 subquery를 사용할 수 있다.
다중 컬럼 UPDATE 예제
CUSTOMER 테이블에서 KSKIM 고객의 job과 city를 변경하시오.
iSQL> UPDATE customer SET (cus_job, address) = ('BANKER', 'JungGu Pusan') WHERE cname = 'KSKIM';
SET 절에 서브쿼리를 갖는 UPDATE 구문
UPDATE table_name SET column_name = (SELECT statement …) [WHERE conditions];
- - SET column_name = (SELECT statement …) : subquery를 사용하여 변경할 칼럼의 값을 지정할 수 있다. 이 때 subquery에서 질의되는 데이터는 한 건도 없거나, 한 건만 질의되어야 한다. 만약 한 건도 질의되지 않는다면 해당 칼럼은 NULL 값으로 변경된다.
SET 절에 서브쿼리를 갖는 UPDATE 예제
BONUS 테이블에서 10번 사원의 직책을 PM으로 변경하고, BONUS 를 평균에서 10%인상한 값으로 변경하시오
iSQL> UPDATE bonuses SET emp_job = 'PM’, bonus = (SELECT 1.1 * AVG(bonus) FROM bonuses) WHERE eno = 10;
WHERE 절에 서브쿼리를 갖는 UPDATE 구문
UPDATE table_name SET column_name = value WHERE column_name 연산자 (SELECT statement …);
- - WHERE column_name 연산자 (SELECT statement …); : UPDATE의 WHERE 절에 subquery를 이용하여 조건을 제한할 수 있다.
- - 이때 연산자는 등호(=) 이외의 비교연산자들도 사용이 가능하고, subquery에서 return되는 데이터도 2개 이상이어도 처리가 가능하다.
WHERE 절에 서브쿼리를 갖는 UPDATE 예제
ORDERS 테이블에서 MYLEE 사원이 받은 주문량을 50개씩 줄이시오.
iSQL> UPDATE orders SET qty = qty - 50 WHERE eno IN (SELECT eno FROM employee WHERE ename ='MYLEE');
UPDATE 시 주의사항
- - UPDATE 사용 시 WHERE절을 생략할 경우, 명시한 테이블의 전체 행을 변경
- - 같은 칼럼을 두 번 이상 사용 불가능
- - SET 절에 subquery 사용 시 = 연산자로 이용해야하며 subquery에서 2 개 이상의 데이터를 리턴하면 에러 발생
- - NOT NULL 제약조건이 있는 칼럼을 NULL 로 변경할 수 없음
출처 : http://www.gurubee.net/lecture/2183
'Oracle Database > SQL' 카테고리의 다른 글
SQL 정리해라 (0) | 2018.06.27 |
---|---|
SQL UPDATE (0) | 2018.06.27 |
[ORACLE] 데이터 베이스의 그룹화 (0) | 2018.06.26 |
[ORACLE] DB의 테이블 생성 및 수정 (0) | 2018.06.26 |
[ORACLE] 데이터 베이스의 정렬 (0) | 2018.06.26 |