[SQL 시작] 8. 데이터 변경

표준 SQL 및 데이터베이스 입문

by AI개발자
gaebalai-sql-db (1).jpg

데이터 변경은 UPDATE문을 사용하여 수행하는데, 변경할 대상을 지정할 때는 SELECT문에서 사용한 것과 같은 WHERE절을 사용합니다. 데이터를 특정할 때 WHERE를 사용하는 것입니다. 특정한다기보다는 어떤 대상을 지정하는 것입니다. 하나하나 업데이트할 필요는 없습니다. 예를 들어, '지난달 매출이 1000개 이상인 상품은 표준가격으ㅡㄹ 10%인하합니다.'와 같은 것도 UPDATE문 하나로 처리할 수 있습니다. SQL을 사용할 때는 데이터를 '집합'으로 다루고 있다는 것을 생각하는 것이 중요합니다.


우선 간단한 데이터로 테스트해봅시다.

데이터 변경은 'UPDATE 테이블명 SET 열명 = 값 WHERE 조건'과 같이 수행됩니다. 여러 개의 열을 변경하고자 할 경우에는 'SET 열명1 = 값1, 열명2 = 값2'와 같이 쉼표(,)로 구분하여 나열합니다. '값'부분에는 80이나 '강남구'등의 값뿐만 아니라, 계산식이나 함수등을 사용한 문자열 치환도 입력할 수 있습니다. WHERE절에 의한 지정결과가 한건이 아니어도 상관없습니다. 예를 들어, 아래는 앞서 사용한 exams테이블을 사용한 예제입니다. 우선 SELECT문으로 확인하면 C0001의 데이터가 2건이 있으며, 각각 90점과 , 93점이었던 것을 알 수 있습니다.

sql012-13.png

SELECT문 실행결과

sql013.jpg

다음과 같이 동일한 WHERE절을 사용하여 UPDATE를 실행하면, 여기서는 해당하는 2건의 데이터에 대해 'socre = score + 5'에 의해 score에 5점이 추가됩니다. 참고로 WHERE절이 없으면 테이블의 모든 데이터가 변경대상이 됩니다.

sql013-1.png

UPDATE문 자체는 결과 데이터를 반환하지 않고, 성공여부와 수정된 데이터 건수만 표시됩니다. 다시 이전과 동일한 SELECT문으로 확인하면 점수가 변경된 것을 알 수 있습니다.


sql014.jpg

같은 조건에서 'score = score - 5'라고 하면 5점이 감점되어 원래의 점수로 돌아갑니다.

sql014-1.png


⑴ 업데이트할 수 없는 데이터가 포함된 경우

그런데 '한번에 10점을 추가'해서 100점을 초과한 경우는 어떻게 처리해야할까요?

테이블의 CHECK제약으로 제한하는 방법이나, CASE식을 사용해서 값을 조작하는 방법이 있어, 제약이나 CASE식의 자세한 문법은 나중에 다시 설명하겠지만, 지금은 간단하게 문법만 기억해 둡시다.


예를 들어, exams테이블의 score열에 CHECK제약으로 0~100범위 제한이 적용되어 있을 경우, SET 결과로 score가 100을 초과하는 데이터가 있다면 UPDATE문이 오류를 발생시키며 실행되지 않습니다. 이 경우, 2건 모두 업데이트되지 않는 결과가 됩니다.


만약, 한건씩 UPDATE를 수행하는 SQL문으로 작성된 경우, 개별적으로 업데이트가 적용되어 일부 데이터만 업데이트되는 상황이 발생할 수 있습니다. 한건이라도 오류가 발생하면 모든 업데이트를 취소하고 싶다면 한번의 UPDATE문으로 실행하거나, 명시적인 트랜잭션(BEGIN ~ COMMIT 또는 ROLLBACK)을 사용해야 합니다. 또한 다음과 같이 CASE식을 사용하여 "10점을 추가했을 때 100을 초과하면 100을 설정"하는 방식으로 처리할수도 있습니다. 이렇게 하면 CHECK제약조건을 위반하지 않고 데이터를 업데이트할 수 있습니다. CASE식에 대해서는 나중에 따로 설명합니다.

sql014-2.png

데이터를 한꺼번에 업데이트할 수 있다는 것이 정말 좋습니다. 우선 SELECT문으로 테스트해보면 확인이 됩니다. SELECT와 WHERE로 원하는 대상을 정확히 지정할 수 있다면 같은 WHERE절을 사용하여 UPDATE를 실행하면 됩니다.



©2024-2025 GAEBAL AI, Hand-crafted & made with Damon JW Kim.

GAEBAL AI 개발사: https://gaebalai.com

AI 강의 및 개발, 컨설팅 문의: https://talk.naver.com/ct/w5umt5


keyword
이전 07화[SQL 시작] 7. 데이터 추가