-
코딩테스트 연습> JOIN> 있었는데요 없었습니다SQL/Programmers 2021. 3. 10. 23:40728x90
<문제링크: programmers.co.kr/learn/courses/30/lessons/59043>
문제설명: 'ANIMAL_INS' 테이블과 'ANIMAL_OUTS' 테이블이 주어지고 두 테이블은 ANIMAL_ID를 공유한다.
보호 시작일보다 입양일이 더 빠른 동물을 구해야 하므로 두 테이블을 INNER JOIN으로 묶은 다음
'ANIMAL_INS'의 DATETIME와 'ANIMAL_OUTS'의 DATETIME을 비교해서 조건에 일치하는 동물의 ID와 NAME을
DATETIME을 기준으로 정렬하면 된다.
[1차 시도]
SELECT I.ANIMAL_ID, I.NAME FROM ANIMAL_INS I INNER JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID WHERE I.DATETIME > O.DATETIME ORDER BY I.DATETIME;
풀이: SELECT에는 조회할 ANIMAL_INS의 별칭 I를 써서 ANIMAL_ID와 NAME을 지정한다.
FROM에는 ANIMAL_INS의 별칭(AS 생략 가능) I와 ANIMAL_OUTS의 별칭 O를 사용하여 두 테이블을 INNER JOIN하고,
결합할 KEY는 ON ID(KEY)를 사용하여 두 테이블을 결합한다.
다음으로 WHERE 절을 사용하여 입양일이 더 빠른,
즉 ANIMAL_INS(보호) 보다 ANIMAL_OUTS(입양)의 DATETIME이 더 작은(현재 기준 이전 시점) 레코드를 조회해야 한다.
=> WHERE I.DATETIME > O.DATETIME
마지막으로 문제에서 보호 시작일이 빠른 순으로 조회하라고 했으므로
날짜가 빠른, 작은 값들이 먼저 오게끔 ORDER BY I.DATETIME을 해준면 오름차순으로 조회가 가능하다.
채첨결과: 제출하면 정상적으로 잘 통과한다.
'SQL > Programmers' 카테고리의 다른 글
코딩테스트 연습> GROUP BY> 동명 동물 수 찾기 (0) 2020.10.03 코딩테스트 연습> SELECT> 아픈 동물 찾기 (0) 2020.09.30 코딩테스트 연습> JOIN> 없어진 기록 찾기 (0) 2020.09.28 코딩테스트 연습> GROUP BY> 고양이와 개는 몇 마리 있을까 (0) 2020.08.27 코딩테스트 연습> SUM, MAX, MIN> 최댓값 구하기 (0) 2020.08.11