코딩테스트/프로그래머스

SQL 문제 - 오랜 기간 보호한 동물

Debin 2022. 4. 29.
반응형

문제의 링크는 아래와 같습니다.

https://programmers.co.kr/learn/courses/30/lessons/59044

 

코딩테스트 연습 - 오랜 기간 보호한 동물(1)

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

문제 분류가 join이라 먼저 join을 사용했다.

 

첫 번째 정답 코드입니다. left join을 사용했다.

left join으로 일단 ANIMAL_OUTS 테이블에 없는 데이터도 다 조인한 후에,

outs.ANIMAL_ID가 없는 것을 리턴하면 입양을 가지 못한 동물들만 거를 수 있다.

select ins.NAME, ins.DATETIME from ANIMAL_INS as ins 
left join ANIMAL_OUTs as outs on ins.ANIMAL_ID = outs.ANIMAL_ID
where outs.ANIMAL_ID is NULL
order by ins.DATETIME limit 3

2 번째 정답 코드입니다. 서브 쿼리와 not in을 사용했습니다.

모든 ANIMAL_OUTS의 ANIMAL_ID 데이터 집합을 가져오고, 그 안에 ANIMAL_INS.ANIMAL_ID가 없다면 select 한다.

select NAME, DATETIME from ANIMAL_INS 
where ANIMAL_ID not in (select ANIMAL_ID from ANIMAL_OUTS )
order by DATETIME limit 3

 

기억할 것

  • in 안에 오는 select문은 단일 컬럼을 리턴해야 한다. 이것 때문에 조금 헤맸다.
  • in 에서는 오른쪽에 집합을 지정. 왼쪽에 지정된 값과 같은 값이 집합 안에 존재하면 참을 반환한다.
반응형

댓글