[SQL] 연습

[mysql] solvesql 두 테이블 결합하기

Simon Yoon 2022. 7. 16. 23:55

오늘은 solvesql에 있는 '두 테이블 결합하기' 문제를 풀어보겠습니다.

난이도는 쉬움이며, 언어는 mysql로 하겠습니다.

 

문제

 events  테이블(올림픽 경기 종목과 경기 이름)과  records  테이블(역대 올림픽 참가 선수들의 신체 정보와 획득한 메달 정보)을 활용해 올림픽 골프 종목에 참가한 선수의 ID를 모두 조회하는 쿼리를 작성해주세요.

 

풀이과정

일단 이 문제의 포인트만 살펴보자면,

올림픽 골프 종목에 참가한 선수의 ID를 모두 조회하라는 것입니다.

우리는 여기서 올림픽 종목에 대한 것은  events  테이블과  records  테이블에 있을 것이고,

참가한 선수의 ID는  records  테이블에 있을 것이라는 것부터 알아야합니다.

그렇다면  join  구문은  events  와  records  의 각 경기 ID 를 기준으로 사용할 수 있을 것이고,

결과적으로 선수 ID는  records  테이블에서 보여주면 되겠습니다.

 

그 다음으로는  events  테이블에서 골프를 찾아야 할 것 입니다.

이를 위한 코드는 아래와 같이 작성할 수 있습니다.

select *
from events
where sport = 'Golf'

참고로  sport  컬럼에서 골프가 '골프'인지 'golf'인지 'Golf'인지 모를텐데,

이때는  select  에서  distinct  로 종목 이름만 직접 확인할 필요가 있겠습니다.

 

이 후에 다시  join  구문으로  records  테이블과 묶고, 그 다음에  records  테이블에서  athlete_id  를 찾아주면 가능할 것입니다.

최종 sql 쿼리는 아래와 같이 작성할 수 있을 것입니다.

select distinct(records.athlete_id)
from records
join
  (select *
  from events
  where sport = 'Golf') e
  on records.event_id = e.id
;

감사합니다.