[데이터베이스 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으로 변경해주는 쿼리를 작성하시오
UPDATE EMPLOYEES
SET SALARY = 2500
WHERE SALARY < 2500;
COMMIT;
▶ EMPLOYEES 테이블에서
SALARY가 2500보다 작은 대상자들을 조건으로,
SALARY를 2500으로 변경한다
▶ COMMIT 해당 쿼리를 확정으로 반영한다.
■ 문제2
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;
동일한 서브쿼리가 반복될 경우
위 쿼리처럼 다수의 컬럼을 한번에 묶어서 하나의 서브쿼리로 업데이트 할 수도 있습니다.
짠 잘 변경된 것을 확인할 수 있어요.
도움이 되었다면 공감은 어떤가요? 작성자에게 큰 힘이 됩니다. 메리크리스마스~
'별걸다하는 IT > 데이터베이스 Database' 카테고리의 다른 글
[SQL문법] INSERT 다양한 사용법, 다른 테이블 SELECT 결과 그대로 삽입하는 법, 테이블 데이터 통복사 (0) | 2021.12.29 |
---|---|
[데이터베이스 SQL]UNION, UNION ALL 쿼리 결과 더하기, 행 합치기 (1) | 2021.12.26 |
[오라클 오렌지] ORANGE 엑셀 데이터 가져오고 내보내는법(로더로 임포트 익스포트) (0) | 2021.12.18 |
[SQL] 오라클 over절에 대해 알아보자 - 개념 및 사용법 정리 (3) | 2021.10.01 |
[SQL] GROUPING 완벽히 이해하고 사용하기, NULL값 '총합'으로 변경 (4) | 2021.09.30 |
최신 댓글