🧠𝗔𝗹𝗴𝗼𝗿𝗶𝘁𝗵𝗺/💙프로그래머스
[SQL] 프로그래머스 3단계 SQL문제 모음
안오늘
2021. 11. 5. 20:04
3단계
1. 없어진 기록 찾기
SELECT OUTS.ANIMAL_ID, OUTS.NAME FROM ANIMAL_OUTS AS OUTS
LEFT OUTER JOIN ANIMAL_INS AS INS
ON OUTS.ANIMAL_ID = INS.ANIMAL_ID
WHERE INS.ANIMAL_ID IS NULL
ORDER BY OUTS.ANIMAL_ID
JOIN, LEFT OUTER JOIN을 활용한다.
JOIN은 두 테이블의 데이터를 일정한 조건에 의해 연결하여 마치 하나의 테이블처럼 만드는 것이다.
LEFT OUTER JOIN은 JOIN을 수행할 때, 왼쪽에 있는 데이터는 무조건 가져오고, 오른쪽에 오는 테이블과 JOIN을 수행하여
조건에 맞는 값이 없으면 null값을 표시한다.
ANIMAL_OUTS를 왼쪽 테이블로, ANIMAL_INS를 오른쪽 테이블로 하여, ANIMAL_ID를 기준으로 LEFT OUTER JOIN하면 된다.
2. 있었는데요 없었습니다
SELECT INS.ANIMAL_ID, INS.NAME FROM ANIMAL_INS AS INS
LEFT OUTER JOIN ANIMAL_OUTS AS OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE OUTS.DATETIME < INS.DATETIME
ORDER BY INS.DATETIME ASC
JOIN, LEFT OUTER JOIN을 활용한다.
이번에는 보호일을 기준으로 입양일이 이상한 것을 보기 때문에,
보호일을 가지는 ANIMAL_INS를 왼쪽에 두고, ANIMAL_OUTS를 오른쪽에 두었다.
3. 오랜 기간 보호한 동물 1
SELECT INS.NAME, INS.DATETIME FROM ANIMAL_INS AS INS
LEFT OUTER JOIN ANIMAL_OUTS AS OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE OUTS.DATETIME IS NULL
ORDER BY INS.DATETIME ASC
LIMIT 3
보호 테이블을 왼쪽으로, 입양 테이블을 오른쪽으로 조인했을 때, 입양 테이블의 Datetime이 NULL인 것은 입양을 아직 안 간 것이다.
LIMIT 3개를 두어, 가장 보호소에 오래 있는 동물 3마리를 출력한다.
4. 헤비유저가 소유한 장소
SELECT ID, NAME, HOST_ID FROM PLACES
WHERE HOST_ID IN (
SELECT HOST_ID
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(HOST_ID) >= 2
)
ORDER BY ID ASC
5. 오랜 기간 보호한 동물 2
SELECT OUTS.ANIMAL_ID, OUTS.NAME FROM ANIMAL_OUTS AS OUTS
LEFT OUTER JOIN ANIMAL_INS AS INS
ON OUTS.ANIMAL_ID = INS.ANIMAL_ID
ORDER BY (OUTS.DATETIME - INS.DATETIME) DESC
LIMIT 2
입양을 간! 동물중에 보호기간이 길었던 동물