본문 바로가기

별걸다하는 IT/데이터베이스 Database

[SQL 기초 문법] UPDATE 사용법, 쿼리로 데이터 변경 및 수정 팁

반응형

[데이터베이스 SQL 완전정복 목차]

안녕하세요

오늘은 기본적인 CRUD 작업 중 'U'에 해당하는 update 구문을 정리해보려고 합니다.

실제 업무에서 가장 자주 사용하는 쿼리 중 하나죠.

 

UPDATE 기본 문법

사실 이게 다예요.. 

변경하고자 하는 테이블을 UPDATE 키워드 다음에 적어주면 됩니다.

그리고 변경할 값을 SET 뒤에 나열해주면 되는데요.

 

조건이 있다면, 조건에 해당하는 결과만 변경이 되고

조건이 없다면 열 전체가 수정할 값으로 변경됩니다.

 

SET 컬럼1 = '값1' AND 컬럼2 = '값2' (X)
SET 컬럼1 = '값1' , 컬럼2 = '값2' (O)

주의할점은 하나의 값만 변경해주는게 아니고 두개 이상의 컬럼 데이터를 변경해주고 싶을 때 AND가 아닌 컴마(',')로 이어줘야 한다는 거?

 

COMMIT과 ROLLBACK 간단하게만~

UPDATE 명령어를 치고 나면, SELECT 조회로 확인 했을 때엔 실제 값이 수정된거처럼 보이지만, 실제로 변경이 완료된건 아닙니다. 그냥 이렇게 바뀔꺼다~ 보여주기만 한거예요.

COMMIT 명령어를 쳐야 반영이 됩니다.

UPDATE치고 확인해보니 데이터가 잘못들어갔다~ 그럴 경우 ROLLBACK명령어를 치면, UPDATE쿼리가 수행되지 않았던, 원상태로 복구됩니다.

한 번 커밋을 쳐버렸으면, 롤백할 수 없어요. (다시 돌아갈 수 없다는말)

커밋과 롤백에 대해서는 나중에 따로 빼서 알아볼텐데 일단 대강 이렇구나 알고만 있어도 돼요.

단순 UPDATE 사용 예시

문제1

연봉 2500 이하의 직원들

우리회사가 최저연봉을 2500으로 맞춰주려고 한다 합시다.

올해 연봉 2500보다 아래로 받던 직원들의 연봉을 모두 2500으로 변경해주는 쿼리를 작성하시오

 

UPDATE EMPLOYEES 
SET SALARY = 2500
WHERE SALARY < 2500;
COMMIT;

▶ EMPLOYEES 테이블에서 

SALARY가 2500보다 작은 대상자들을 조건으로,

SALARY를 2500으로 변경한다

▶ COMMIT 해당 쿼리를 확정으로 반영한다.

 

■ 문제2

157번 사원 정보

301번 사원의 LAST_NAME을 'Drexler'로 변경하시오.

 

UPDATE EMPLOYEES 
SET LAST_NAME = 'Drexler'
WHERE EMPLOYEE_ID = '157';
COMMIT;

▶ EMPLOYEES테이블에서 

LAST_NAME을 'Drexler'로 변경해라

EMPLOYEE_ID가 157번인 행을

▶ COMMIT 해당 쿼리를 확정으로 반영한다.

 

UPDATE와 서브쿼리 같이 사용하기

변경하고자 하는 값을 내가 모르고, 다른 테이블에서 조회한 값으로 갱신해야 하는 경우가 있을 수 있어요.

그럴 경우 서브쿼리로 변경하고자 하는 값을 가져와서 갱신해주면 된답니다.

작성은 요런식으로 하면 되겠죠?

 

물론 SET뿐만 아니라 WHERE절에도 서브쿼리 사용해서 조건을 줄 수 있습니다.

 

UPDATE와 서브쿼리 사용 예시

■ 문제3

세 사원의 정보

103, 203번 사원의 SALARY, MANAGER_ID, DEPARTMENT_ID 정보를 Vance Jones와 동일하게 변경하십시오.

 

UPDATE EMPLOYEES 
SET SALARY = (SELECT SALARY FROM EMPLOYEES WHERE LAST_NAME = 'Jones'),
    MANAGER_ID = (SELECT MANAGER_ID from EMPLOYEES WHERE LAST_NAME = 'Jones'),
    DEPARTMENT_ID = (SELECT DEPARTMENT_ID from EMPLOYEES WHERE LAST_NAME = 'Jones')
WHERE EMPLOYEE_ID IN ('103', '203');
COMMIT;

내가 어떤 값으로 변경할지 모르겠고~~

103,203 사번 직원들의 연봉, 매니저번호, 부서번호를 Jones랑 똑같이만 맞춰줘~~!

요런 요청의 경우에 위처럼 서브쿼리를 이용해서 작성할 수 있어요.

 

근데 결국 세 컬럼 다 Jones꺼랑 똑같이 맞추면 되는데,,

서브쿼리가 너무 반복되어서 괜히 길어진거 같죠?

 

UPDATE EMPLOYEES 
SET (SALARY, MANAGER_ID, DEPARTMENT_ID) = 
    (SELECT SALARY, MANAGER_ID, DEPARTMENT_ID FROM EMPLOYEES e WHERE LAST_NAME = 'Jones')
WHERE EMPLOYEE_ID  IN ('103', '203');
COMMIT;

동일한 서브쿼리가 반복될 경우

위 쿼리처럼 다수의 컬럼을 한번에 묶어서 하나의 서브쿼리로 업데이트 할 수도 있습니다.

 

수행결과

짠 잘 변경된 것을 확인할 수 있어요.

도움이 되었다면 공감은 어떤가요? 작성자에게 큰 힘이 됩니다. 메리크리스마스~

반응형