SQL 문제 풀이(JOIN)
JOIN
- SQL 테이블 여러개를 합쳐 데이터를 조회할 때 필요한 join!
Programmers에서문제를 하나씩 풀이하며 기초를 다져보자!!
1. 없어진 기록 찾기
- 기본적인 join 문제이다.
- 외래키를 주고 join하여 데이터를 출력할 수 있는지에 대한 문제
- join을 할때의 조건은 on으로 해준다.
- INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN 등 공부하자!
- 풀이
SELECT b.ANIMAL_ID, b.NAME
FROM ANIMAL_OUTS b
LEFT OUTER JOIN ANIMAL_INS a on b.ANIMAL_ID = a.ANIMAL_ID
WHERE a.ANIMAL_ID IS NULL
ORDER BY b.ANIMAL_ID
2. 있었는데요 없었습니다
- 1번과 거의 비슷한 문제
- 1번에서 DATETIME 끼리 비교를 할 수 있는지에 대해 알아보는 문제
- 풀이
SELECT AI.ANIMAL_ID, AI.NAME
FROM ANIMAL_INS AI
LEFT OUTER JOIN ANIMAL_OUTS AO on AI.ANIMAL_ID = AO.ANIMAL_ID
WHERE AI.DATETIME > AO.DATETIME
ORDER BY AI.DATETIME
3. 오랜 기간 보호한 동물(1)
- join에 limit을 활용한 문제
- sub query를 사용한 풀이
SELECT NAME, DATETIME
FROM ANIMAL_INS
WHERE NOT ANIMAL_ID in (
SELECT ANIMAL_ID
FROM ANIMAL_OUTS
)
ORDER BY DATETIME
LIMIT 3
- join을 사용한 풀이
SELECT AI.NAME, AI.DATETIME
FROM ANIMAL_INS AI
LEFT JOIN ANIMAL_OUTS AO ON AI.ANIMAL_ID = AO.ANIMAL_ID
WHERE AO.DATETIME IS NULL
ORDER BY AI.DATETIME
LIMIT 3
4. 보호소에서 중성화한 동물
- 더이상 설명이 필요 없는 문제이다!
- 들어올때의 성과 나갈때의 성이 다른 동물을 출력하는 문제
- 풀이
SELECT AO.ANIMAL_ID, AO.ANIMAL_TYPE, AO.NAME
FROM ANIMAL_OUTS AO
LEFT JOIN ANIMAL_INS AI on AI.ANIMAL_ID = AO.ANIMAL_ID
WHERE AO.SEX_UPON_OUTCOME != AI.SEX_UPON_INTAKE
Leave a comment