네, MySQL에서는 한 테이블에 열을 추가하면서 다른 테이블의 데이터를 참조할 수 있습니다. 이 글에서는 ALTER TABLE로 새 열을 추가한 뒤, UPDATE ... INNER JOIN 구문을 사용해 다른 테이블의 값을 그대로 가져오는 방법을 단계별로 살펴보겠습니다.
1. 예제용 테이블 두 개 만들기
먼저 실습에 사용할 테이블 두 개를 생성합니다. 첫 번째 테이블은 사용자 ID와 이름을, 두 번째 테이블은 사용자 ID와 나이를 저장합니다.
첫 번째 테이블(FirstTable) 생성
mysql> create table FirstTable
-> (
-> UserId int,
-> UserName varchar(20)
-> );
Query OK, 0 rows affected (1.48 sec)두 번째 테이블(SecondTable) 생성
mysql> create table SecondTable
-> (
-> UserId int,
-> UserAge int
-> );
Query OK, 0 rows affected (1.57 sec)두 테이블은 UserId 열을 기준으로 서로 연결됩니다. 이 값이 조인 조건의 역할을 하게 됩니다.
2. ALTER TABLE로 새 열 추가하기
이제 첫 번째 테이블에 Age 열을 추가합니다. TINYINT UNSIGNED 타입을 사용하고 기본값은 0으로 설정했습니다.
mysql> ALTER TABLE FirstTable ADD COLUMN Age TINYINT UNSIGNED DEFAULT 0; Query OK, 0 rows affected (1.53 sec) Records: 0 Duplicates: 0 Warnings: 0
열이 추가되면 초기값은 모두 0으로 채워집니다. 따라서 다음 단계에서 두 번째 테이블의 실제 나이 값으로 갱신해야 합니다.
3. UPDATE + INNER JOIN으로 다른 테이블 값 복사하기
두 번째 테이블의 UserAge 값을 첫 번째 테이블의 Age 열에 반영하려면, UPDATE 문과 INNER JOIN을 함께 사용합니다.
mysql> UPDATE FirstTable tbl1
-> INNER JOIN SecondTable tbl2 ON tbl1.UserId = tbl2.UserId
-> SET tbl1.Age = tbl2.UserAge;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0여기서 핵심은 ON tbl1.UserId = tbl2.UserId 조건입니다. 이 조건 덕분에 두 테이블에서 같은 사용자 ID를 가진 행끼리 매칭되어, 나이 값이 정확하게 복사됩니다. 참고로 위 예제에서는 아직 데이터가 없어 변경된 행이 0건으로 표시되지만, 실제 데이터가 들어 있다면 해당 행들이 일괄 업데이트됩니다.
4. DESC 명령으로 결과 확인하기
마지막으로 DESC 명령으로 첫 번째 테이블의 구조를 확인합니다.
mysql> desc FirstTable;
실행 결과는 다음과 같습니다.
+----------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+---------------------+------+-----+---------+-------+ | UserId | int(11) | YES | | NULL | | | UserName | varchar(20) | YES | | NULL | | | Age | tinyint(3) unsigned | YES | | 0 | | +----------+---------------------+------+-----+---------+-------+ 3 rows in set (0.53 sec)
출력 결과를 보면 UserId, UserName에 이어 Age 열이 성공적으로 추가된 것을 확인할 수 있습니다. 이처럼 MySQL에서는 ALTER TABLE과 UPDATE JOIN을 조합하면 다른 테이블의 데이터를 손쉽게 가져와 새 열을 채울 수 있습니다.