SQL 문제

문제 31. 오랜 기간 보호한 동물(난이도 10)(OUTER JOIN, LIMIT)

kagan-draca 2024. 7. 17. 16:51

상당히 유익하고 재미있는 문제였다.

 

 

2개의 테이블이 존재하는 것을 보고

 

'아! 이건 JOIN을 사용해야 하는 문제다' 라는걸 바로 알아차렸다.

 

하지만, 한 번도 JOIN을 사용해 본 적이 없어서 찾아본 결과

 

JOIN에는 OUTER, INNER, CROSS, SELF가 있었다.

 

OUTER JOIN에는 

LEFT, FLL, RIGHT가 존재했고 OUTER JOIN에서 OUTER를 생략한 LEFT JOIN, FULL JOIN, RIGHT JOIN으로 사용 가능했다.

 

LEFT JOIN : FROM 절에서 왼쪽에 적은 테이블을 기준으로 출력

RIGHT JOIN : FROM 절에서 오른쪽에 적은 테이블을 기준으로 출력

FULL JOIN : FROM절에 사용된 모든 테이블을 기준으로 출력

 

이다. 이때, WHERE을 어떻게 작성하느냐에 따라 "교집합" 부분의 출력 여부를 조작할 수 있는데

 

WHERE B.KEY IS NULL 또는 A.KEY IS NULL : 교집합 출력 안 함

 

이었다. 

 

(향후 문제를 풀면서 INNER, FULL, SELF 조인이 사용될 경우 그 문제에서 각각의 JOIN을

추가로 학습할 계획이다.)

 

마지막으로 상위 3개의 항목만을 출력해야 하는데 이때 사용되는 방법이 LIMIT 항목이었다.

 

LIMIT 사용법은

 

LIMIT 시작 위치, 출력할 개수

 

이다.

 

제출한 코드 : 

 

SELECT A.NAME, A.DATETIME
FROM ANIMAL_INS AS A LEFT JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.ANIMAL_ID IS NULL
ORDER BY DATETIME ASC
LIMIT 0, 3