본문 바로가기

Tech/Problem Solving

[프로그래머스] SQL 고득점 Kit - JOIN

 

프로그래머스에서 제공하는 SQL 고득점 Kit 문제 풀이 코드입니다. (정답 주의)

 

문제 링크

 

없어진 기록 찾기 (level 3)

JOIN을 사용할 때는 ON을 통해서 두 테이블이 조인될 기준 컬럼을 지정해줘야 함을 잊지말자.

또한 두 테이블의 컬럼을 구분하기 위해서 각 테이블을 AS를 통해 이름을 지정해줘야 한다.

SELECT OUTS.ANIMAL_ID, OUTS.NAME
FROM ANIMAL_OUTS AS OUTS
LEFT JOIN ANIMAL_INS AS INS
ON OUTS.ANIMAL_ID = INS.ANIMAL_ID
WHERE INS.ANIMAL_ID IS NULL
ORDER BY OUTS.ANIMAL_ID

 

있었는데요 없었습니다 (level 3)

LEFT JOIN은 앞 테이블을 기준으로 한 JOIN.

RIGHT JOIN은 뒤 테이블을 기준으로 한 JOIN.

그냥 JOIN은 교집합 JOIN.

SELECT INS.ANIMAL_ID, INS.NAME
FROM ANIMAL_INS AS INS
JOIN ANIMAL_OUTS AS OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE INS.DATETIME > OUTS.DATETIME
ORDER BY INS.DATETIME

 

오랜 기간 보호한 동물(1) (level 3)

LEFT JOIN을 했기 때문에 레코드는 앞 테이블을 기준으로 JOIN하고, 뒷 테이블은 연결될 레코드가 없는 경우 null이 된다.

WHERE로 null을 거르는 조건을 추가하면 앞 테이블에는 있지만, 뒷 테이블에는 없는 레코드에 대한 조회가 가능하다.

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;

 

보호소에서 중성화한 동물 (level 4)

SELECT INS.ANIMAL_ID, INS.ANIMAL_TYPE, INS.NAME
FROM ANIMAL_INS AS INS
JOIN ANIMAL_OUTS AS OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE INS.SEX_UPON_INTAKE LIKE '%Intact%' AND OUTS.SEX_UPON_OUTCOME NOT LIKE '%Intact%'
ORDER BY INS.ANIMAL_ID

 

반응형