서로 다른 정보가 서로 다른 테이블에 저장되어 있을 수 있고, 이를 합치려면 INNER JOIN ... ON을 사용합니다. 테이블을 조인하는 것은 SQL 기능의 핵심이지만 아주 복잡해질 수도 있습니다. 여기서는 간단한 예로, 그리고 INNER JOIN부터 시작하겠습니다.
아래에서 볼 수 있듯 테이블은 3개입니다.
character: 각 캐릭터가 한 행이며 고유 식별자(id)로 표현됩니다. 예를 들어 1은 Doogie Howser입니다.
character_tv_show: 각 캐릭터가 어느 프로그램에 나오는가?
character_actor: 각 캐릭터를 연기하는 배우는 누구인가?
character_tv_show에서는 캐릭터 이름과 프로그램 이름을 모두 저장하는 대신(예: Willow Rosenberg와 Buffy the Vampire Slayer), 캐릭터 이름 대신 character_id를 저장한다는 점을 보세요. 이 character_id는 character 테이블에서 같은 id를 가진 행을 가리킵니다.
이렇게 하는 이유는 데이터를 중복시키지 않기 위해서입니다. 예를 들어 캐릭터 이름이 바뀌어도 한 행만 고치면 됩니다.
덕분에 그 참조용 공통 컬럼을 “기준으로(on)” 테이블을 “합칠(join)” 수 있습니다.
각 캐릭터 이름과 그 프로그램 이름을 얻으려면 이렇게 쓸 수 있습니다.
SELECT character.name, character_tv_show.tv_show_name
FROM character
INNER JOIN character_tv_show
ON character.id = character_tv_show.character_id;
이렇게 하면 character의 각 행과 character_tv_show의 대응하는 행이 짝지어집니다(그 반대도 마찬가지입니다).
참고:
- 테이블명.컬럼명 형식을 사용합니다. 컬럼명만 쓰면 SQL이 어느 테이블의 것인지 잘못 판단할 수 있습니다.
- 위 예시 쿼리는 읽기 쉽도록 여러 줄로 나눴을 뿐, 동작에는 영향을 주지 않습니다.
내부 조인을 사용해 각 캐릭터 이름과 그를 연기하는 배우를 짝지을 수 있나요? 다음 컬럼을 선택하세요: character.name, character_actor.actor_name