programmers.co.kr/learn/courses/30/lessons/59043
두 개의 테이블(ANIMAL_INS, ANIMAL_OUTS)이 주어지고 들어온 날짜보다 나간 날짜가 더 빠른 데이터의 ID와 NAME을 출력한다.
테이블 JOIN을 이용해야 하는데
테이블 A, B가 있다고 하면 테이블 A LEFT JOIN ON 공통 키이다.
= 테이블 A의 모든 데이터 + 테이블 B에서 A와 공통키로 일치하는 데이터가 뒤에 붙는다.
각각 테이블이 이렇게 구성되어 있고,
ANIMAL_INS LEFT JOIN ANIMAL_OUTS ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID를 해주면
이런 식으로 ANIMAL_INS의 테이블 모두 + 테이블을 더해주는 키에 해당하는 ANIMAL_OUTS의 정보가 붙게 된다.
따라서 COLUMN 내용도 조정해주지 않으면 두 테이블의 COLUMN이 모두 출력되므로 SELECT문에서 선택해준다.
또한, 저렇게 테이블 A에 해당하는 정보가 B에 없는 경우 A의 정보만 나오고 B 자리에는 NULL값이 들어가게 되는데
WHERE B.ANIMAL_ID IS NULL로 처리해주면 A에는 있고 B에는 없는 데이터 출력
WHERE B.ANIMAL_ID IS NOT NULL로 처리해주면 A와 B 모두 있는 데이터 출력이 된다.
기본 틀은
SELECT A.ID, A.NAME
FROM A
LEFT JOIN ON A.ID = B.ID
WHERE ~
ORDER BY ~이다.
따라서 이 문제에서는 DATE가 더 빠른 정보를 출력하는 것이 목표이므로
SELECT ANIMAL_INS.ANIMAL_ID, ANIMAL_INS.NAME
FROM ANIMAL_INS
LEFT JOIN ANIMAL_OUTS
ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_INS.DATETIME > ANIMAL_OUTS.DATETIME
ORDER BY ANIMAL_INS.DATETIME
테이블을 더해주고 WHERE 조건에 >를 통해서 출력해주었다.
'문제 풀이 > 프로그래머스 알고리즘, SQL' 카테고리의 다른 글
[프로그래머스 SQL] 보호소에서 중성화한 동물(join) (0) | 2021.02.23 |
---|---|
[프로그래머스 SQL] 오랜 기간 보호한 동물(1) (join) (0) | 2021.02.23 |
[프로그래머스 SQL] NULL 처리하기 (0) | 2021.02.23 |
[프로그래머스] SQL 문제 정리 (0) | 2021.01.20 |
[프로그래머스] 3진법 뒤집기 (n진법, bitset) [C++] (0) | 2021.01.03 |