Study/DB

[MySQL] UPDATE JOIN - 다른 테이블의 값을 참조하여 수정하는 방법

 

데이터를 수정하고 싶을 때 UPDATE 구문을 사용합니다.

조건에 맞는 데이터만 수정하고자 한다면 UPDATE 구문에 WHERE 절을 추가해서 사용하면 됩니다.

만약 조건에 해당하는 컬럼이 다른 테이블에 있는 경우 UPDATE와 JOIN 절을 같이 사용합니다.

 

UPDATE JOIN 쿼리 기본 구조

UPDATE 문과 JOIN 절을 함께 사용하는 기본 구조는 다음과 같습니다.

UPDATE [테이블명1]
JOIN [테이블명2] ON [테이블 연결 조건]
SET [컬럼명] = [값]
WHERE [조건]

 

UPDATE 문에 JOIN을 같이 사용하면 WHERE 조건에 JOIN된 테이블의 컬럼을 사용할 수 있습니다.

 

UPDATE JOIN 예제

샘플 데이터베이스의 world 데이터베이스를 사용하겠습니다.

 

[MySQL] 샘플 데이터베이스 다운로드 방법

SQL을 학습하기 위해서는 데이터가 필요합니다.테스트 데이터를 직접 만들어도 되지만, 샘플 데이터도 학습용으로 사용하기 좋습니다.MySQL에 샘플 데이터를 SQL 파일로 받는 방법과 MySQL Installer를

priming.tistory.com

 

 

SELECT city.ID, city.Name, country.Code, country.Continent
FROM city
LEFT JOIN country ON country.Code = city.CountryCode
WHERE country.Continent = 'Europe';

UPDATE JOIN을 사용하여 수정할 데이터 확인
UPDATE JOIN을 사용하여 수정할 데이터 확인

 

 

수정할 데이터 조회

수정할 데이터를 먼저 조회합니다.

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';

join 절에 사용된 테이블의 컬럼 값 수정
join 절에 사용된 테이블의 컬럼 값 수정

이 쿼리는 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'로 수정합니다.