JOIN
은 관계형 데이터베이스의 '관계'라는 수식어를 대변한다. 이제부터 JOIN
을 왜 사용하는지 알아보고자 한다.
동물병원에서 아래 테이블을 사용한다고 가정해보자.
동물-주인 테이블
이름 | 종 | 나이 | 주인 이름 | 전화번호 | 주소 |
---|---|---|---|---|---|
보리 | 강아지 | 2 | 민혁 | 010-xxxx-xxxx | 서울특별시 송파구 |
뽀삐 | 강아지 | 4 | 민혁 | 010-xxxx-xxxx | 서울특별시 송파구 |
유미 | 고양이 | 9 | 민혁 | 010-xxxx-xxxx | 서울특별시 송파구 |
나비 | 고양이 | 2 | 은서 | 010-xxxx-xxxx | 경기도 성남시 |
별이 | 강아지 | 7 | 소림 | 010-xxxx-xxxx | 서울특별시 서초구 |
초롱 | 강아지 | 1 | 소림 | 010-xxxx-xxxx | 서울특별시 서초구 |
달래 | 강아지 | 5 | 혜은 | 010-xxxx-xxxx | 서울특별시 강남구 |
매우 편리해 보인다. 동물 이름만 알면 주인 전화번호와 주소까지 바로 조회할 수 있다.
하지만, 이렇게 작성된 테이블은 여러 문제를 야기할 수 있다. 구체적으로 살펴보자.
먼저, 테이블에 주인 정보가 중복되어 저장된 것이 보인다.
지금은 테이블이 작아서 괜찮지만 규모가 커진다면 저 자체로 많은 저장공간을 낭비하게 될 것이다.
만약 민혁이가 전화번호를 바꾸거나 이사라도 한다면 민혁이가 존재하는 모든 행을 수정해야 한다.
여기서 불편함을 느꼈다면 테이블을 분리할 준비가 된 것이다.
이렇게 테이블을 두 개로 바꿔보자.
동물 테이블
이름 | 종 | 나이 | 주인 이름 |
---|---|---|---|
보리 | 강아지 | 2 | 민혁 |
뽀삐 | 강아지 | 4 | 민혁 |
유미 | 고양이 | 9 | 민혁 |
나비 | 고양이 | 2 | 은서 |
별이 | 강아지 | 7 | 소림 |
초롱 | 강아지 | 1 | 소림 |
달래 | 강아지 | 5 | 혜은 |
주인 테이블
이름 | 전화번호 | 주소 |
---|---|---|
민혁 | 010-xxxx-xxxx | 서울특별시 송파구 |
은서 | 010-xxxx-xxxx | 경기도 성남시 |
소림 | 010-xxxx-xxxx | 서울특별시 서초구 |
혜은 | 010-xxxx-xxxx | 서울특별시 강남구 |
테이블 분리를 완료했다. 중복된 데이터가 최소화되었고, 민혁이의 주소를 바꾸고 싶으면 단 하나의 행만 변경하면 된다.
처음 테이블에는 동물과는 전혀 무관한 주인의 전화번호, 주소가 담겨있었지만 이제는 꼭 필요한 정보만이 각각의 테이블에 존재한다.
그런데 이 방식은 이것대로 문제가 보인다.
나비의 주인 전화번호가 필요한 상황에서 어떻게 해야 할까?
먼저 동물 테이블에서 나비의 주인을 찾고, 그 주인 이름으로 주인 테이블에서 전화번호를 조회해야 한다.
이 상황에서 테이블을 결합해 원래 테이블로 만든다면 다시 간단하게 원하는 정보를 얻어낼 수 있을 것이다.
보관할 때는 테이블을 분리해 독립성을 유지하고, 필요할 때만 결합해서 사용하기 위해 존재하는 기능이 바로 JOIN
이라고 생각하면 된다.