본문 바로가기
SQL

[SQL] 데이터를 추가, 수정, 삭제하는 데이터 조작어_2

by lmyourpearl 2025. 12. 1.

테이블에서 데이터를 수정하는 UPDATE

회원 정보 변경, 결제 계좌 변경, 내가 쓴 글 수정 등 기능을 수행하려면 데이터베이스 테이블에 저장된 데이터를 변경해야하는데, 이렇게 특정 테이블에 저장한 데이터 내용을 수정할 때 UPDATE문을 사용.

 

UPDATE문의 기본 사용법

UPDATE문은 UPDATE 키워드 이후에 변경할 테이블 이름을 지정하고 SET절에 ‘변경할 열 이름 = 변경할 데이터’를 지정하며, 여러 열의 데이터를 수정할 때는 쉼표(,)로 구분함. 데이터를 변경해야 할 행이 정해져 있다면 SELECT문에서 사용한것과 같이 WHERE절과 조건식을 추가하여 변경 대상 행을 지정할 수 있음.

-- 기본 형식

UPDATE [변경할 테이블]
SET [변경할 열1]=[데이터], [변경할 열2]=[데이터],...[변경할 열n]=[데이터]
[WHERE 데이터를 변경할 대상 행을 선별하는 조건];
키워드 필수 요소 선택 요소 설명
UPDATE 테이블 이름   데이터를 수정할 테이블을 지정
SET 변경할 열의 이름과 데이터   열을 선택하고 변경할 데이터를 입력
WHERE   변경 데이터를 선별하는 조건식 변경할 데이터를 선별하는 조건식을 지정. 생략 하면 테이블 내 지정한 모든 열의 데이터를 변경.

데이터 전체 수정하기

- DEPT_TEMP2 테이블 업데이트 하기

UPDATE DEPT_TEMP2
    SET LOC = 'SEOUL';
SELECT * FROM DEPT_TEMP2;
-- 이렇게 WHERE절(특정 열) 없이 하면 LOC열이 모두 SEOUL로 변경됨

** 전체를 바꾸는 경우는 거의 없고 대부분 테이블에 저장한 몇몇 행만 선정하여 데이터를 수정함.

 

수정한 내용을 되돌리고 싶을 때

실수로 UPDATE문을 실행했을 때 이를 취소하려면 ROLLBACK 명령어를 사용.

ROLLBACK;하면 이전 상태로 되돌아감.

ROLLBACK;

 

데이터 일부만 수정하기

UPDATE문에서 수정할 대상 행을 선별하려면 WHERE절과 조건식을 사용.

사용 방법은 SELECT문에서 사용한 WHERE절과 같음.

-- 테이블 데이터 일부만 수정하기
UPDATE DEPT_TEMP2
  SET DNAME = 'DATABASE',
      LOC   = 'SEOUL'
 WHERE DEPTNO = 40;
SELECT * FROM DEPT_TEMP2;

 

서브쿼리를 사용하여 데이터 수정하기

 

  • 여러 열을 한 번에 수정하기

INSERT문과 마찬가지로 UPDATE문에서도 서브쿼리를 활용할 수 있음.

-- 서브쿼리로 데이터 한 번에 수정하기

UPDATE DEPT_TEMP2
		SET (DNAME, LOC) = (SELECT DNAME, LOC
                            FROM DEPT
                            WHERE DEPTNO = 40)
  WHERE DEPTNO = 40;
  
  SELECT * FROM DEPT_TEMP2;

 

  • 열 하나하나 수정하기

열 하나하나에 서브쿼리를 적용할 수도 있는데, 주의할 점은 수정할 열의 개수에 따라 서브쿼리에 지정한 열 개수도 변한다는 것. 당연히 서브쿼리에 나열한 열과 UPDATE문으로 변경할 열 개수나 자료형은 일치해야함.

-- 서브쿼리로 데이터 일부 수정하기

UPDATE DEPT_TEMP2
		SET DNAME = (SELECT DNAME
									 FROM DEPT
									WHERE DEPTNO = 40),
				LOC   = (SELECT LOC
									 FROM DEPT
									WHERE DEPTNO = 40)
 WHERE DEPTNO = 40;

 

WHERE절에 서브쿼리 사용하여 데이터 수정하기

-- UPDATE문의 WHERE절에 서브쿼리 사용하기

UPDATE DEPT_TEMP2
	SET LOC = 'SEOUL'
WHERE DEPTNO = (SELECT DEPTNO
									FROM DEPT_TEMP2
								WHERE DNAME = 'OPERATIONS');
 SELECT * FROM DEPT_TEMP2;

** UPDATE문을 사용할 때 주의점

테이블에 있는 데이터를 수정하거나 삭제하는 기능을 수행하므로 위험성이 큰 명령어임.

실무에서도 UPDATE의 WHERE 조건식이 정확한 데이터를 대상으로 하는지 꼼꼼히 따져 보지 않고 수행한 후 애를 먹는 상황이 종종 말생하기 때문에 실행하기 전에 WHERE절을 검증하는 과정을 반드시 거쳐야함. 변경해야 하는 행만 정확하게 선정해서 수정하는지 확인하기.

 

UPDATE문을 완성

UPDATE DEPT_TEMP2
	SET  DNAME = 'DATABASE',
			 LOC   = 'SEOUL'
WHERE DEPTNO = 40;

위의 UPDATE문을 실행하기 전WHERE절의 조건식이 수정할 데이터를 정확히 가리키는지 알고 싶다면 SELECT문에 같은 WHERE문을 적용하여 결괏값을 확인하면 됨.

SELECT *
	FROM DEPT_TEMP2
WHERE DEPTNO = 40;