데이터베이스에서 데이터를 관리하다 보면, 특정 조건에 맞는 데이터를 검색하여 해당 결과를 기반으로 다른 테이블의 값을 업데이트해야 할 경우가 종종 발생합니다. 이 때, UPDATE와 SELECT를 적절히 조합하여 원하는 작업을 수행할 수 있습니다.
문제의 발생
구매할 상품의 단가와 구매상품 갯수 곱한 값을 기존의 구매금액에 더해서 총구매한 금액을 수정하려고 하는 쿼리문을 짜려다보니 머리가 지끈거립니다.
테이블의 값을 업데이트를 하기 위해서 먼저 원하는 데이터를 검색하고, 검색한 결과를 업데이트하려고 하기 위한 쿼리문을 만들어야 하기 때문이죠.
1. 기본적인 업데이트 방법
단순한 업데이트의 경우 다음과 같은 방식으로 작성합니다.
UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;
2. 다른 테이블의 값으로 업데이트
특정 테이블의 값을 기반으로 다른 테이블의 값을 업데이트하려면 서브쿼리를 활용합니다.
UPDATE table1 AS A, (SELECT * FROM table2) AS B
SET A.column_name = B.column_name WHERE condition;
3. 복잡한 계산을 포함한 업데이트
여러 테이블의 값을 검색하여 계산한 결과를 기반으로 업데이트할 때의 예제입니다.
UPDATE table1 AS A, (SELECT * FROM table2) AS B, (SELECT result FROM table3) AS C
SET A.result = (A.result + (B.count * C.result))
WHERE A.idx = 1;
위의 쿼리는 table2의 count와 table3의 result를 곱한 값에 table1의 기존 result 값을 더한 후, 그 결과를 table1의 result 컬럼에 업데이트합니다.
결론
UPDATE와 SELECT를 조합하여 복잡한 조건과 계산을 포함한 업데이트 작업을 수행할 수 있습니다.
생각을 해보면 가로안에서 select를 한 구문 자체가 새로운 테이블이 되는 셈이니 검색한 결과가 하나의 테이블이다 라고 생각하고 기본 update문을 적용하면 됩니다.
여러 테이블의 값을 검색하여 업데이트하려면, 서브쿼리를 활용하여 가상의 테이블을 생성하고, 그 결과를 기반으로 원하는 작업을 수행하면 됩니다.
'Language > SQL' 카테고리의 다른 글
[MYSQL] 다중테이블 JOIN문 쓰기 (0) | 2021.01.12 |
---|---|
[MYSQL] 테이블을 limit 만큼 검색(select)하여 join으로 해당 테이블 합치기 (장바구니) (0) | 2021.01.05 |
[MYSQL] 쿼리문에서 NULL 값 체크 및 값 변경 (0) | 2021.01.04 |
[MYSQL] 여러테이블에서 검색한 결과 합치기 select * select (0) | 2021.01.04 |
[MYSQL] 데이터베이스 검색하기 select 문, 검색된 rows 갯수 알기, 정렬은 order by ASC 혹은 DESC (0) | 2020.10.13 |