제목: 오랜 기간 보호한 동물(1)
레벨: LEVEL 3
으아 문제 가!
이건 테이블 조건이다.
이것이 문제!
문제를 요약하자면
ANIMAL_INS 테이블은 보호중인 동물 정보,
ANIMAL_OUTS는 입양간 동물 정보이다.
이때 아직 입양 못간 동물의 입양과 보호시작일을 조회하는 테이블을 만들자.
조건 1 : 결과는 보호시작일 순으로 조회
조건 2 : 3마리 동물만 보여주고 그 이상이면 가차없이 자를 것!
당연히 보호하는 동물보다 입양간 동물이 적기 때문에
ANIMAL_OUTS 테이블의 데이터가 적다!
그래서 아직 입양 못간 동물리스트를 뽑고 싶다면
쉽게 생각해서
ANIMAL_INS - ANIMAL_OUTS = 남은 데이터(아직 보호소에 있는 애들) 이라고 생각하면 되겠다!
그럼 ANIMAL_INS, ANIMAL_OUTS 두 테이블을 합치고
여기서 ANIMAL_OUTS.DATETIME(입양간 날짜)가 NULL값인 데이터만 뽑아오면 된다!
이때 데이터가 없어도 NULL로 표시되는 JOIN을 해야 하는데 그게 바로 LEFT JOIN!!!
이렇게 작성하였다!
LEFT JOIN은 기준 테이블 옆에 새로운 테이블을 접목시켜서 데이터를 보여준다.
그래서 ANIMAL_OUTS에는 있는데 ANIMAL_INS에는 없는 데이터는 NULL값으로 표시된다.
그래서 이 NULL을 가진 데이터를 뽑기 위해
WHERE절에 그 조건을 작성한다.
이때 형식은 컬럼명 IS NULL 이라고 하면된다.
최종정리
SELECT ANIMAL_INS.NAME as NAME, ANIMAL_INS.DATETIME as DATETIME
→ 가져오고자 하는 컬럼명을 작성한다.
from ANIMAL_INS
→ 가져오고자 하는 데이터가 있는 테이블을 작성한다.
LEFT join ANIMAL_OUTS on ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
→ 기준테이블 왼쪽에 붙일 테이블을 작성한다.
NULL을 보기 위해서 LEFT JOIN이 필요하다.
WHERE ANIMAL_OUTS.DATETIME IS NULL
→ 가져올 데이터의 조건을 작성한다.
보통 특정값을 가져오기 위해서는 <컬럼명 = '원하는 값'> 같은 형식인데
NULL은 = 를 쓰지 않는다.
IS NULL이라고 쓰니 주의할 것!
ORDER BY ANIMAL_INS.DATETIME
→ 잠시 잊고 있던 정렬순서 조건.
입양가지 못한 동물들이니 입양날짜가 있을리 없고,
보호시작일 순으로 정렬하기 때문에 ANIMAL_INS이라는 테이블을 반드시 써준다.
LIMIT 3;
→ 3마리 이상인 경우 상위 3마리만 노출되게 하기 위해
LIMIT이라는 키워드를 쓴다.
5마리만 보여주고 싶으면 LIMIT 5 라고 쓰면 된다.
'SQL 문제풀이' 카테고리의 다른 글
[프로그래머스] SQL 고득점 Kit : 있었는데요 없었습니다 문제풀이 (1) | 2023.05.25 |
---|---|
[프로그래머스] SQL 고득점 Kit : 상품 별 오프라인 매출 구하기 문제풀이 (0) | 2023.05.25 |
[프로그래머스] SQL 고득점 Kit : 조건에 맞는 도서와 저자 리스트 출력하기 문제풀이 (0) | 2023.05.25 |