MySQL에서 두 개 이상의 테이블에 저장된 데이터를 함께 조회하려면 JOIN 개념을 사용해야 합니다. JOIN은 공통된 컬럼(보통 기본 키와 외래 키)을 기준으로 여러 테이블의 데이터를 하나의 결과로 연결해 주는 SQL 기능입니다.
이번 글에서는 실제 예제를 통해 두 개의 테이블을 생성하고, 조인하여 원하는 값을 가져오는 과정을 단계별로 살펴보겠습니다.
1. 첫 번째 테이블 생성하기
먼저 회원 정보를 담을 첫 번째 테이블 demo52를 생성합니다.
mysql> CREATE TABLE `demo52` ( -> `id` INT NOT NULL, -> `name` VARCHAR(20) NOT NULL, -> PRIMARY KEY (`id`) -> ); Query OK, 0 rows affected (1.19 sec)
데이터 삽입하기
INSERT 문을 사용하여 테이블에 샘플 데이터를 입력합니다.
mysql> insert into demo52 values(1,'John'); Query OK, 1 row affected (0.17 sec) mysql> insert into demo52 values(2,'David'); Query OK, 1 row affected (0.10 sec) mysql> insert into demo52 values(3,'Mike'); Query OK, 1 row affected (0.13 sec)
저장된 데이터 확인하기
SELECT 문으로 테이블에 저장된 레코드를 조회해 보겠습니다.
mysql> select *from demo52;
실행 결과는 다음과 같습니다.
+----+-------+ | id | name | +----+-------+ | 1 | John | | 2 | David | | 3 | Mike | +----+-------+ 3 rows in set (0.00 sec)
2. 두 번째 테이블 생성하기
이번에는 회원 나이를 저장할 두 번째 테이블 demo53을 생성합니다. 여기서는 id 컬럼에 외래 키(Foreign Key) 제약 조건을 설정하여 첫 번째 테이블 demo52와 관계를 맺어줍니다.
mysql> CREATE TABLE `demo53` ( -> `id` INT NOT NULL, -> `age` INT NOT NULL, -> PRIMARY KEY (`id`), -> CONSTRAINT `id_demo` FOREIGN KEY (`id`) REFERENCES `demo52` (`id`) -> ); Query OK, 0 rows affected (0.57 sec)
데이터 삽입 및 확인하기
마찬가지로 INSERT 문으로 데이터를 넣고 SELECT 문으로 확인합니다.
mysql> insert into demo53 values(1,23); Query OK, 1 row affected (0.08 sec) mysql> insert into demo53 values(2,22); Query OK, 1 row affected (0.15 sec) mysql> insert into demo53 values(3,26); Query OK, 1 row affected (0.13 sec)
mysql> select *from demo53;
실행 결과는 다음과 같습니다.
+----+-----+ | id | age | +----+-----+ | 1 | 23 | | 2 | 22 | | 3 | 26 | +----+-----+ 3 rows in set (0.00 sec)
3. JOIN으로 두 테이블 연결하고 값 가져오기
이제 두 테이블이 준비되었으니, JOIN을 사용하여 특정 id에 해당하는 회원 이름(name)을 조회해 보겠습니다. 아래 쿼리는 id가 1인 회원의 이름을 가져오는 예제입니다.
mysql> SELECT name FROM demo52 t1 -> JOIN demo53 t2 -> ON t1.id=t2.id WHERE t1.id=1;
실행 결과는 다음과 같습니다.
+------+ | name | +------+ | John | +------+ 1 row in set (0.00 sec)
정리
위 예제처럼 JOIN은 ON 절에서 양쪽 테이블의 공통 컬럼(t1.id = t2.id)을 매칭 기준으로 지정하며, 필요하다면 WHERE 절로 조건을 추가해 원하는 행만 필터링할 수 있습니다. 이 방식을 활용하면 분산되어 있는 테이블들의 데이터를 하나의 쿼리로 효율적으로 조회할 수 있습니다.