데이터를 수정하고 싶을 때 UPDATE 구문을 사용합니다.
조건에 맞는 데이터만 수정하고자 한다면 UPDATE 구문에 WHERE 절을 추가해서 사용하면 됩니다.
만약 조건에 해당하는 컬럼이 다른 테이블에 있는 경우 UPDATE와 JOIN 절을 같이 사용합니다.
UPDATE JOIN 쿼리 기본 구조
UPDATE 문과 JOIN 절을 함께 사용하는 기본 구조는 다음과 같습니다.
UPDATE [테이블명1]
JOIN [테이블명2] ON [테이블 연결 조건]
SET [컬럼명] = [값]
WHERE [조건]
UPDATE 문에 JOIN을 같이 사용하면 WHERE 조건에 JOIN된 테이블의 컬럼을 사용할 수 있습니다.
UPDATE JOIN 예제
샘플 데이터베이스의 world 데이터베이스를 사용하겠습니다.
SELECT city.ID, city.Name, country.Code, country.Continent
FROM city
LEFT JOIN country ON country.Code = city.CountryCode
WHERE country.Continent = 'Europe';
수정할 데이터 조회
수정할 데이터를 먼저 조회합니다.
city 테이블의 데이터를 수정할건데, 조건에 country 테이블의 컬럼을 사용했습니다.
UPDATE city
LEFT JOIN country ON country.Code = city.CountryCode
SET city.Name = 'Europe City'
WHERE country.Continent = 'Europe';
country의 대륙이 'Europe'인 city 데이터의 Name을 수정하였습니다.
city 테이블이 아닌 다른 테이블에서 조건을 가져왔습니다.
데이터 수정
city 테이블의 데이터를 수정해보겠습니다.
조건에 country 테이블의 컬럼을 사용하여 데이터를 수정합니다.
UPDATE city
LEFT JOIN country ON country.Code = city.CountryCode
SET city.Name = 'Europe City'
WHERE country.Continent = 'Europe';
이 쿼리는 country 테이블의 대륙(Continent)이 'Europe'인 city 테이블의 모든 Name 컬럼 값을 'Europe City'로 수정합니다.
JOIN 절에 사용된 테이블의 컬럼 수정
JOIN 절에 사용된 country 테이블의 컬럼도 수정할 수 있습니다.
예를 들어, 대륙이 'Europe'인 country 테이블의 Name 컬럼 값을 수정하는 경우입니다.
update city
left join country on country.Code = city.CountryCode
set country.Name = 'Europe Country'
where country.Continent = 'Europe';
이 쿼리는 country 테이블의 대륙(Continent)이 'Europe'인 모든 데이터의 Name 컬럼 값을 'Europe Country'로 수정합니다.
UPDATE JOIN 주의사항
이 경우에는 굳이 JOIN을 사용할 필요 없이 country 테이블만을 대상으로 UPDATE 문을 사용할 수 있습니다.
그러나 JOIN 절에 사용된 테이블도 수정이 가능하다는 예시를 보여주기 위해 작성되었습니다.
위의 UPDATE JOIN 예제 쿼리는 아래 쿼리와 동일한 기능을 합니다.
UPDATE country
SET Name = 'Europe Country'
WHERE Continent = 'Europe';
이 쿼리는 JOIN 절을 사용하지 않고 country 테이블의 대륙(Continent)이 'Europe'인 모든 데이터의 Name 컬럼 값을 'Europe Country'로 수정합니다.