오늘은 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
;
감사합니다.
'[SQL] 연습' 카테고리의 다른 글
[mysql] 프로그래머스 우유와 요거트가 담긴 장바구니 (0) | 2022.07.22 |
---|---|
[mysql] 프로그래머스 보호소에서 중성화한 동물 (0) | 2022.07.17 |
[SQL] 사용자 정의 변수 @variable (0) | 2022.07.03 |
[SQL] CASE문 (1) | 2022.07.02 |
[SQL] View의 특징과 생성 및 삭제 (0) | 2022.06.26 |