-
[Solv:프로그래머스] SQL JOIN - 오랜 기간 보호한 동물(1)비전공자 공부일기/:: ALGORITHM 2021. 10. 11. 19:27
문제 (너무 길어서 핵심만 가져옴)
아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.
내 풀이 썰풀기 - 이중쿼리
원래 JOIN문 써서 풀어야 하는데
내가 실제로 회사에서 젤 많이 쓰는 방법으로 풀음
그것은 바로 NOT IN을 이용한 이중쿼리
보호소에 들어온 동물들(ANIMAL_INS 테이블) 중에서 입양간 동물들(ANIMAL_OUTS 테이블)이 없으면
아직 입양 못갔다는 말이므로(문제에 감정이입되네 슬펑..) 이 중에서 날짜로 정렬한 뒤 3줄만 뽑으면 된다.1. 입양 못 간 동물들 걸러내기 ---- ANIMAL_ID NOT IN (SELECT ANIMAL ID FROM ANIMAL_OUTS)
2. 날짜로 정렬하기 ---- ORDER BY DATETIME
3. 3줄만 뽑기 ---- LIMIT 3 (MYSQL의 경우임)SELECT NAME, DATETIME FROM ANIMAL_INS WHERE 1=1 AND ANIMAL_ID NOT IN (SELECT ANIMAL_ID FROM ANIMAL_OUTS) ORDER BY DATETIME LIMIT 3
LEFT JOIN 이용
그런데 문제의 취지가 JOIN절을 쓰는 것이었으니
JOIN절을 써서 한번 풀어보자.SELECT INS.NAME AS INS_NAME, INS.DATETIME AS DATETIME FROM ANIMAL_INS INS LEFT OUTER JOIN ANIMAL_OUTS OUTS ON INS.ANIMAL_ID = OUTS.ANIMAL_ID WHERE OUTS.DATETIME IS NULL ORDER BY INS.DATETIME LIMIT 3;
'비전공자 공부일기 > :: ALGORITHM' 카테고리의 다른 글
[Solv:프로그래머스] 그리디 Greedy - 조이스틱 (0) 2021.10.13 [Solv:프로그래머스] SQL JOIN - 보호소에서 중성화한 동물 (0) 2021.10.11 [Solv:프로그래머스] 정렬 - 가장 큰 수 파이썬으로 풀기 (0) 2021.10.11 [Solv:프로그래머스] 정렬 - K번째 수 파이썬으로 풀기 (1) 2021.10.11 [Solv:Codility] 코딜리티 Lession1 - Iterations (반복문) binary gap 자바 (0) 2021.07.25