(새 문서: 좋은 요청 감사합니다! Oracle 19c 기준으로 UPDATE 구문을 초급과 고급으로 나누어 이해하기 쉽게 설명해드리겠습니다. ⸻ ✅ 1. 초급 - 기본 UPDATE 문법 UPDATE는 기존 데이터를 수정할 때 사용하는 명령어입니다. ▶ 기본 문법: UPDATE 테이블명 SET 컬럼1 = 값1, 컬럼2 = 값2, ... WHERE 조건; • SET: 변경하고 싶은 컬럼과 값을 지정합니다. • WHERE: 어떤 행(row)을 수정할지 조...) |
|||
(같은 사용자의 중간 판 6개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
=== 기본 UPDATE 문법 === | |||
UPDATE는 기존 데이터를 수정할 때 사용하는 명령어입니다. | UPDATE는 기존 데이터를 수정할 때 사용하는 명령어입니다. | ||
▶ 기본 문법: | ==== ▶ 기본 문법: ==== | ||
<source lang=sql> | |||
UPDATE 테이블명 | UPDATE 테이블명 | ||
SET 컬럼1 = 값1, 컬럼2 = 값2, ... | SET 컬럼1 = 값1, 컬럼2 = 값2, ... | ||
WHERE 조건; | WHERE 조건; | ||
</source> | |||
* SET: 변경하고 싶은 컬럼과 값을 지정합니다. | |||
* WHERE: 어떤 행(row)을 수정할지 조건을 줍니다. | |||
* WHERE 절이 없으면 테이블의 모든 행이 수정되므로 주의해야 합니다❗ | |||
==== ▶ 예제 1: 고객 이메일 변경 ==== | |||
<source lang=sql> | |||
UPDATE CUSTOMER | UPDATE CUSTOMER | ||
SET EMAIL = 'new_email@example.com' | SET EMAIL = 'new_email@example.com' | ||
WHERE ID = 1; | WHERE ID = 1; | ||
</source> | |||
ID가 1번인 고객의 이메일을 변경합니다. | ID가 1번인 고객의 이메일을 변경합니다. | ||
▶ 예제 2: 가격 일괄 인상 | ==== ▶ 예제 2: 가격 일괄 인상 ==== | ||
<source lang=sql> | |||
UPDATE PRODUCT | UPDATE PRODUCT | ||
SET PRICE = PRICE * 1.1; | SET PRICE = PRICE * 1.1; | ||
</source> | |||
전체 상품 가격을 10% 인상합니다 (WHERE 없이 전체 행 업데이트❗). | 전체 상품 가격을 10% 인상합니다 (WHERE 없이 전체 행 업데이트❗). | ||
▶ COMMIT과 ROLLBACK | ==== ▶ COMMIT과 ROLLBACK ==== | ||
• COMMIT; 실행 시 변경 내용이 영구 저장됩니다. | • COMMIT; 실행 시 변경 내용이 영구 저장됩니다. | ||
• ROLLBACK; 실행 시 마지막 COMMIT 이전 상태로 복구됩니다. | • ROLLBACK; 실행 시 마지막 COMMIT 이전 상태로 복구됩니다. | ||
---- | |||
=== 고급 UPDATE 기술 === | |||
고급 기능은 실무에서 대량 처리, 조건 분기, 복잡한 참조 등에 매우 유용합니다. | 고급 기능은 실무에서 대량 처리, 조건 분기, 복잡한 참조 등에 매우 유용합니다. | ||
▶ 예제 3: 서브쿼리를 이용한 UPDATE | ▶ 예제 3: 서브쿼리를 이용한 UPDATE | ||
<source lang=sql> | |||
UPDATE CUSTOMER c | UPDATE CUSTOMER c | ||
SET EMAIL = ( | SET EMAIL = ( | ||
62번째 줄: | 59번째 줄: | ||
SELECT 1 FROM EMPLOYEE E WHERE E.EMP_ID = c.ID | SELECT 1 FROM EMPLOYEE E WHERE E.EMP_ID = c.ID | ||
); | ); | ||
</source> | |||
EMPLOYEE 테이블에서 같은 ID를 가진 사람의 이메일로 CUSTOMER 테이블을 업데이트합니다. | EMPLOYEE 테이블에서 같은 ID를 가진 사람의 이메일로 CUSTOMER 테이블을 업데이트합니다. | ||
▶ 예제 4: MERGE를 이용한 조건부 UPDATE or INSERT | ▶ 예제 4: MERGE를 이용한 조건부 UPDATE or INSERT | ||
<source lang=sql> | |||
MERGE INTO CUSTOMER c | MERGE INTO CUSTOMER c | ||
USING TEMP_CUSTOMER t | USING TEMP_CUSTOMER t | ||
77번째 줄: | 74번째 줄: | ||
INSERT (ID, NAME, EMAIL) | INSERT (ID, NAME, EMAIL) | ||
VALUES (t.ID, t.NAME, t.EMAIL); | VALUES (t.ID, t.NAME, t.EMAIL); | ||
</source> | |||
MERGE는 업데이트 또는 없으면 삽입까지 자동 처리됩니다. | * MERGE는 업데이트 또는 없으면 삽입까지 자동 처리됩니다. | ||
데이터 동기화에 자주 사용됩니다. | * 데이터 동기화에 자주 사용됩니다. | ||
▶ 예제 5: RETURNING INTO — 변경된 값을 PL/SQL 변수에 받기 | ▶ 예제 5: RETURNING INTO — 변경된 값을 PL/SQL 변수에 받기 | ||
<source lang=sql> | |||
DECLARE | DECLARE | ||
v_email VARCHAR2(100); | v_email VARCHAR2(100); | ||
95번째 줄: | 93번째 줄: | ||
DBMS_OUTPUT.PUT_LINE('변경된 이메일: ' || v_email); | DBMS_OUTPUT.PUT_LINE('변경된 이메일: ' || v_email); | ||
END; | END; | ||
</source> | |||
UPDATE한 결과를 변수에 즉시 받을 수 있어 후속 로직 처리에 유용합니다. | * | ||
* UPDATE한 결과를 변수에 즉시 받을 수 있어 후속 로직 처리에 유용합니다. | |||
▶ 예제 6: 병렬 UPDATE (성능 최적화용) | ▶ 예제 6: 병렬 UPDATE (성능 최적화용) | ||
<source lang=sql> | |||
ALTER SESSION ENABLE PARALLEL DML; | ALTER SESSION ENABLE PARALLEL DML; | ||
108번째 줄: | 106번째 줄: | ||
SET STATUS = 'ACTIVE' | SET STATUS = 'ACTIVE' | ||
WHERE JOIN_DATE < SYSDATE - 365; | WHERE JOIN_DATE < SYSDATE - 365; | ||
</source> | |||
병렬로 처리하여 대량 데이터 수정 속도 향상 | 병렬로 처리하여 대량 데이터 수정 속도 향상 | ||
단, PARALLEL DML 활성화가 필요합니다. | 단, PARALLEL DML 활성화가 필요합니다. | ||
---- | |||
=== 요점 정리 === | |||
{| class="wikitable" style="border-collapse: collapse; width: 100%;" | |||
|- | |||
! style="border-right: 1px solid #666; padding: 10px; text-align: center; background: #f0f0f0;" | 구분 | |||
! style="border-right: 1px solid #666; padding: 10px; text-align: center; background: #f0f0f0;" | 기능 설명 | |||
! style="padding: 10px; text-align: center; background: #f0f0f0;" | 예시 구문 유형 | |||
|- | |||
| style="border-right: 2px solid #ddd; padding: 8px; text-align: center;" | 초급 | |||
| style="border-right: 2px solid #ddd; padding: 8px;" | 기본적인 데이터 수정 | |||
| style="padding: 8px; font-family: monospace;" | <source>UPDATE ... SET ... WHERE</source> | |||
|- | |||
| style="border-right: 2px solid #ddd; padding: 8px; text-align: center;" | 고급 1 | |||
| style="border-right: 2px solid #ddd; padding: 8px;" | 서브쿼리를 활용한 값 수정 | |||
| style="padding: 8px; font-family: monospace;" | <source>UPDATE ... SET = (SELECT)</source> | |||
|- | |||
| style="border-right: 2px solid #ddd; padding: 8px; text-align: center;" | 고급 2 | |||
| style="border-right: 2px solid #ddd; padding: 8px;" | 조건부 INSERT/UPDATE 통합 처리 | |||
| style="padding: 8px; font-family: monospace;" | <source>MERGE INTO ...</source> | |||
|- | |||
| style="border-right: 2px solid #ddd; padding: 8px; text-align: center;" | 고급 3 | |||
| style="border-right: 2px solid #ddd; padding: 8px;" | 변경 결과 즉시 변수에 받기 | |||
| style="padding: 8px; font-family: monospace;" | <source>RETURNING INTO</source> | |||
|- | |||
| style="border-right: 2px solid #ddd; padding: 8px; text-align: center;" | 고급 4 | |||
| style="border-right: 2px solid #ddd; padding: 8px;" | 대용량 성능 최적화 (병렬 처리) | |||
| style="padding: 8px; font-family: monospace;" | <source>UPDATE /*+ PARALLEL */</source> | |||
|} | |||
[[category:oracle]] | |||
[[category:oracle update]] |
2025년 5월 22일 (목) 21:46 기준 최신판
기본 UPDATE 문법
UPDATE는 기존 데이터를 수정할 때 사용하는 명령어입니다.
▶ 기본 문법:
UPDATE 테이블명 SET 컬럼1 = 값1, 컬럼2 = 값2, ... WHERE 조건;
- SET: 변경하고 싶은 컬럼과 값을 지정합니다.
- WHERE: 어떤 행(row)을 수정할지 조건을 줍니다.
- WHERE 절이 없으면 테이블의 모든 행이 수정되므로 주의해야 합니다❗
▶ 예제 1: 고객 이메일 변경
UPDATE CUSTOMER SET EMAIL = 'new_email@example.com' WHERE ID = 1;
ID가 1번인 고객의 이메일을 변경합니다.
▶ 예제 2: 가격 일괄 인상
UPDATE PRODUCT SET PRICE = PRICE * 1.1;
전체 상품 가격을 10% 인상합니다 (WHERE 없이 전체 행 업데이트❗).
▶ COMMIT과 ROLLBACK
• COMMIT; 실행 시 변경 내용이 영구 저장됩니다. • ROLLBACK; 실행 시 마지막 COMMIT 이전 상태로 복구됩니다.
고급 UPDATE 기술
고급 기능은 실무에서 대량 처리, 조건 분기, 복잡한 참조 등에 매우 유용합니다.
▶ 예제 3: 서브쿼리를 이용한 UPDATE
UPDATE CUSTOMER c SET EMAIL = ( SELECT E.EMP_EMAIL FROM EMPLOYEE E WHERE E.EMP_ID = c.ID ) WHERE EXISTS ( SELECT 1 FROM EMPLOYEE E WHERE E.EMP_ID = c.ID );
EMPLOYEE 테이블에서 같은 ID를 가진 사람의 이메일로 CUSTOMER 테이블을 업데이트합니다.
▶ 예제 4: MERGE를 이용한 조건부 UPDATE or INSERT
MERGE INTO CUSTOMER c USING TEMP_CUSTOMER t ON (c.ID = t.ID) WHEN MATCHED THEN UPDATE SET c.NAME = t.NAME, c.EMAIL = t.EMAIL WHEN NOT MATCHED THEN INSERT (ID, NAME, EMAIL) VALUES (t.ID, t.NAME, t.EMAIL);
- MERGE는 업데이트 또는 없으면 삽입까지 자동 처리됩니다.
- 데이터 동기화에 자주 사용됩니다.
▶ 예제 5: RETURNING INTO — 변경된 값을 PL/SQL 변수에 받기
DECLARE v_email VARCHAR2(100); BEGIN UPDATE CUSTOMER SET EMAIL = 'update@example.com' WHERE ID = 1 RETURNING EMAIL INTO v_email; DBMS_OUTPUT.PUT_LINE('변경된 이메일: ' || v_email); END;
- UPDATE한 결과를 변수에 즉시 받을 수 있어 후속 로직 처리에 유용합니다.
▶ 예제 6: 병렬 UPDATE (성능 최적화용)
ALTER SESSION ENABLE PARALLEL DML; UPDATE /*+ PARALLEL(CUSTOMER, 4) */ CUSTOMER SET STATUS = 'ACTIVE' WHERE JOIN_DATE < SYSDATE - 365;
병렬로 처리하여 대량 데이터 수정 속도 향상 단, PARALLEL DML 활성화가 필요합니다.
요점 정리
구분 | 기능 설명 | 예시 구문 유형 |
---|---|---|
초급 | 기본적인 데이터 수정 | UPDATE ... SET ... WHERE |
고급 1 | 서브쿼리를 활용한 값 수정 | UPDATE ... SET = (SELECT) |
고급 2 | 조건부 INSERT/UPDATE 통합 처리 | MERGE INTO ... |
고급 3 | 변경 결과 즉시 변수에 받기 | RETURNING INTO |
고급 4 | 대용량 성능 최적화 (병렬 처리) | UPDATE /*+ PARALLEL */ |