update 문은 인프라와 데이터베이스 엔지니어의 작업은 물론 관계형 데이터베이스와 상호 작용하는 개발 프로젝트에서도 자주 사용됩니다. SQL 중에서도 꼭 누르고 싶은 중요한 구문입니다.
update 문에는 다양한 데이터 업데이트 방법이 있습니다. 이 기사에서는 SQL 문을 섞어 다양한 관점에서 update 문을 사용하는 방법을 소개합니다.
엔지니어의 ‘확산’ 경력 경로
SQL update 문이란 무엇입니까?
SQL을 다룰 때 update 문의 특징을 파악하는 것이 매우 중요합니다. 우선은 개요에 대해, 2개의 관점으로부터 다루겠습니다. 어떤 특징이 있는지 확인해 봅시다.
데이터를 지정된 값으로 덮어 쓰는 SQL 문
update 문은 데이터를 지정된 값으로 업데이트하는 SQL 문입니다. 기본적인 구문은 아래와 같습니다.
UPDATE(테이블 이름)
SET (열 이름) = (설정할 값)
WHERE (업데이트할 조건)
where 다음 부분은 생략할 수 있습니다. 생략하면 모든 행에 대해 동일한 값이 설정됩니다.
update 문을 사용하는 방법은 데이터베이스마다 다릅니다.
update문의 기본적인 사용법에 대해서는, RDBMS(관계형 데이터베이스 관리 시스템)의 종류나 버젼에 의한 차이는 그다지 없습니다. 한편 세세한 부분에서 문법의 차이가 있음에 주의가 필요합니다. “동일한 SQL이기 때문에 괜찮을 것”이라고 잘 확인하지 않고, 비늘 기억으로 update문을 실행하면, 에러가 되는 경우나 의도하지 않은 결과가 나올지도 모릅니다.
이 때문에 update문을 사용할 때는 RDBMS를 확인한 다음, 매뉴얼 등을 참조하여 올바른 문장을 만들어 실행합시다.
기본 update 문 사용법
update 문은 어떻게 사용해야합니까? MySQL8.0을 사용하여 기본적인 두 가지 사용법을 확인해 봅시다. 이 기사에서는 아래의 ‘지자체’ 표를 사용하여 해설을 진행합니다.
WHERE 절에서 업데이트할 데이터의 조건 지정
update 문은 특정 행에 있는 특정 데이터만 업데이트하는 목적으로 사용되는 경우가 일반적입니다. 이 경우 where 절을 사용하여 업데이트할 데이터의 조건을 지정해야 합니다.
방금 소개한 표에는 오류가 있습니다. 기타히로시마시는 홋카이도에, 가시마시는 사가현에 있는 지자체입니다. 이 사실에 근거해, 도도부현명을 갱신하는 update문을 이하에 나타냈습니다.
UPDATE 지자체 SET 도도부현=’홋카이도’ WHERE 번호=1;
UPDATE 지자체 SET 도도부현=’사가현’ WHERE 번호=4;
위의 SQL 문 다음에 “SELECT * FROM 지자체;”를 실행하여 결과를 확인해 봅시다. 아래와 같이 표시되어 올바르게 수정되었음을 확인할 수 있습니다.
모든 행에 동일한 데이터를 넣으려면
where 절을 사용하지 않으면 update 문은 모든 행을 업데이트합니다. 지정한 열의 모두에 같은 데이터가 세트 되기 (위해)때문에, 초기치를 세트 하는 경우에 편리합니다.
지자체 테이블의 지구 번호 열을 0으로 갱신하는 update 문은 다음과 같습니다.
UPDATE 지자체
SET 지구 번호 = 0;
모든 행에 대해 ‘지구 번호’ 열에 0이 설정되었습니다.
실무에 도움이 되는 update문의 사용법을 소개
update문에는 다양한 갱신 방법이 준비되어 있어 데이터를 유효하게 활용하는 도구로서 사용할 수 있습니다. 여기에서는 실무에 도움이 되는 6가지 방법을 소개해, 사용법을 확인해 갑시다.
여러 열을 하나의 update 문으로 업데이트 할 수 있습니다.
set 절에 설정된 값에는 여러 열을 지정할 수 있습니다. 초기치를 세트 하는 열이 복수 있는 경우도, 1 개의 update 문으로 끝나는 메리트가 있습니다. 사용하는 경우는, 열 마다 콤마로 단락짓자.
「지자체」표의 「인구」열과 「고령자의 비율」열을 0으로 세트 하는 SQL문을, 이하에 나타냈습니다.
UPDATE 지자체
SET 인구 = 0, 노인 비율 = 0;
모든 행의 ‘인구’ 및 ‘노인 비율’ 열에 0이 설정되었습니다.
갱신 데이터에는 복수의 열의 캐릭터 라인을 결합한 값도 사용할 수 있다
갱신 시에 설정하는 데이터에는, 복수의 열로부터 데이터를 꺼내 결합한 값도 사용할 수 있습니다. 예를 들면 「지자체」표의 「도도부현」열과 「시구정촌」열로부터 꺼낸 데이터를 연결해, 다른 열을 갱신할 수 있는 것입니다. 다음 SQL 문을 실행해 봅시다.
UPDATE 지자체
SET 지자체명=CONCAT(도도부현, 시구정촌)
WHERE 지자체 이름 IS NULL;
concat을 사용하여 두 개의 데이터를 연결합니다. 실행에 의해 「자치체명」의 열에, 도도부현명과 시구정촌명을 연결한 문자열이 들어갔습니다.
SET 절에서는 간단한 계산도 가능
여기에서는 「연령별 인구」표도 더해 해설을 진행합니다. 표의 내용은 다음과 같습니다.
‘인구’ 열의 값은 65세 미만과 65세 이상의 인구를 더하여 구할 수 있습니다. update문에서는 계산을 행할 수 있으므로, 다음의 SQL문을 실행하는 것으로 「인구」열의 값을 갱신할 수 있습니다.
UPDATE 연령별 인구
SET 인구=65세 미만 인구+65세 이상 인구;
총 값이 ‘인구’ 열에 저장되었습니다.
다른 표에서 정보를 검색하고 업데이트
update 문에서는 다른 테이블에서 얻은 정보를 사용하여 업데이트할 수도 있습니다. 방법은 두 가지가 있지만 우열은 없습니다. 목적에 따라 적절한 방법을 선택하십시오.
각 방법에 대해 소개합니다.
방법 1: 하위 쿼리 사용
update 문은 set 절의 중간에 하위 쿼리를 사용할 수 있습니다. 여기에서는 「연령별 인구」표의 「인구」열에 포함되는 수치를 바탕으로, 「지자체」표의 「인구」열을 갱신하는 update문을 나타냈습니다.
UPDATE 지자체
SET 시정촌. 인구 = (SELECT 연령별 인구. 인구
FROM 연령별 인구
WHERE 지자체. 번호 = 연령별 인구. 번호);
하위 쿼리에서 사용되는 select 문 내에서 계산도 가능합니다. 다음 update 문은 ‘연령별 인구’ 표의 정보를 기반으로 ‘지자체’ 표의 ‘노인 비율’ 열을 업데이트합니다.
UPDATE 지자체
SET 시정촌. 노인 비율 = (SELECT 연령별 인구. 65 세 이상 인구 / 연령별 인구. 인구
FROM 연령별 인구
WHERE 지자체. 번호 = 연령별 인구. 번호);
두 update 문을 모두 실행하여 ‘지자체’ 표의 ‘인구’ 열과 ‘노인 비율’ 열이 업데이트되었는지 확인합니다.
방법 2: JOIN 절 사용
방법 1에 표시된 update 문은 JOIN 절을 사용하여 다시 작성할 수 있습니다. 지자체 테이블의 인구 열을 갱신하는 프로세스는 다음 update 문에서도 수행할 수 있습니다.
UPDATE 지자체
JOIN 연령별 인구 ON 지자체. 번호 = 연령별 인구. 번호
SET 시정촌. 인구 = 연령별 인구. 인구;
JOIN 절을 사용하는 경우에도 set 절 안에서 계산식을 사용할 수 있습니다. 지자체 테이블의 노인 비율 열을 업데이트하는 update 문은 다음과 같이 다시 작성할 수 있습니다.
UPDATE 지자체
JOIN 연령별 인구
ON 시정촌. 번호 = 연령별 인구. 번호
SET 시정촌, 노인 비율 = (연령별 인구. 65 세 이상 인구 / 연령별 인구. 인구);
두 update 문을 모두 실행하여 ‘인구’ 및 ‘노인 비율’ 열이 업데이트되었는지 확인하세요.
IN절은 핀 포인트로 갱신하고 싶은 데이터가 있는 경우에 편리
데이터를 업데이트할 때 대상 데이터가 날아갈 수 있습니다. 핀 포인트로 수정하고 싶은 항목에 대해서, where 절은 그다지 적합하지 않습니다. 여러 update 문으로 나눌 수밖에 없는 경향이 있기 때문입니다.
이러한 경우에는 IN구의 활용이 편리합니다. 이하의 update문에서는, 「도도부현」열이 홋카이도 또는 가나가와현의 데이터에 대해서, 「지구 번호」열을 1로 갱신합니다.
데이터에 따라 업데이트할 값을 변경할 수 있습니다.
실무에서는 「저장되고 있는 데이터에 의해 갱신하는 값을 바꾸고 싶다」라고 하는 경우도, 자주 있습니다. CASE 문은 이러한 처리에 유용합니다. 이하의 update문은, 도도부현에 의해 「지구 번호」열을 갱신하는 값이 바뀌는 것이 특징입니다.
WHEN을 늘리면 사례별 사례를 늘릴 수 있습니다. 마지막으로 ‘END;’를 잊지 마세요. 실행에 의해, 도도부현에 대응하는 지구 번호의 값이 세트 됩니다.
update문을 사용하는데 있어서의 주의점
update 문은 데이터를 수정하는 SQL 문입니다. 변경을 확정하면 원래 데이터는 남지 않습니다. 실수로 실행하면 데이터를 파괴할 우려가 있으므로 취급에 충분한 주의가 필요합니다.
여기에서는 update문을 사용하는 데서 눌러 두고 싶은 주의점을 3개 다루어 해설합니다.
업데이트할 데이터의 조건을 잘 확인
데이터를 갱신할 때는, 대상의 데이터가 제대로 갱신되는가 하는 점에 눈이 향해 경향이 있습니다. 그러나 실무에서는 「업데이트해서는 안되는 데이터가 갱신되지 않고 끝나는가」라는 점도 매우 중요합니다. 왜냐하면 목적의 데이터 이외를 갱신해 버리는 것으로 데이터에 부정합이 생겨, 금액의 잘못 등 실무에 악영향을 미칠 수 있기 때문입니다.
이를 위해 update 문을 실행할 때는 최대 where 절 등을 설정하여 범위를 좁히십시오. 사전에 select 문을 실행하여 업데이트 대상으로 할 데이터를 확인하는 방법도 유효합니다.
다른 테이블과의 무결성 검사도 잊지 않고
데이터는 다른 테이블에서 참조되는 경우도 종종 있습니다. 실무에서는, 의외의 개소로부터 참조되고 있는 것에 놀라움을 느끼는 분도 있는 것은 아닐까요.
다른 테이블에서 참조하는 데이터를 쉽게 업데이트하면 후속 처리가 실패하거나 처리 결과에 오류가 발생하는 등의 악영향을 받습니다. 설계서 등을 확인하고 업데이트 대상 데이터가 다른 표에서 참조되지 않았는지 미리 확인해 둡시다.
간결하고 이해하기 쉬운 update 문 만들기
간결하고 이해하기 쉬운 update 문장의 작성도 중요한 포인트에 들 수 있습니다. 복잡한 SQL 문에는 다음과 같은 단점이 있기 때문입니다.
· 한눈에 어떤 처리를하고 있는지 알기 어렵다.
・버그나 조작 실수의 원인이 된다
・트러블이 발생했을 때의 조사에 시간을 요하는 원인이 된다
작성한 update문은, 언제까지나 작성자 본인이 메인터넌스한다고는 할 수 없습니다. 업무를 원활하게 진행하기 위해서도, 간결함과 알기 쉬움을 유의해 작성합시다.
update 문을 구사하여 실무에 도움
update문의 깊이를 깨달은 분도 많지 않을까요? 구문을 고안하여 효율적으로 데이터를 업데이트할 수 있는 것은 update 문의 강점입니다. 기억한 구문이 많을수록 update 문을 사용하여 더 나은 업무로 연결될 수 있습니다.
지금은 웹 브라우저에서 SQL 문을 시도 할 수있는 사이트도 있습니다. 스스로 간단하게 조작을 시도할 수 있는 시대이므로, 기억한 내용을 바탕으로 update문을 구사해, 실무에 도움을 주는 것을 추천합니다.