관리 메뉴

오늘도 배운다

없어진 기록 찾기 / 프로그래머스, SQL 코딩테스트 연습JOIN 본문

코딩테스트연습(SQL)

없어진 기록 찾기 / 프로그래머스, SQL 코딩테스트 연습JOIN

LearnerToRunner 2022. 11. 21. 09:55

문제

천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.

 

제출답안

SELECT ao.animal_id, ao.name
FROM animal_ins AS ai RIGHT OUTER JOIN animal_outs AS ao ON ai.animal_id = ao.animal_id
-- Oracle의 경우 Line 2에서 AS 삭제.
WHERE ai.animal_id IS NULL
ORDER BY 1, 2

 

풀이

더보기

animal_ins(AS ai)와 animal_outs (AS ao)을 Right Outer Join 함

FROM animal_ins AS ai RIGHT OUTER JOIN animal_outs AS ao ON ai.animal_id = ao.animal_id

>> animal_ins (AS ai)와 animal_outs (AS ao)를 Right Outer Join 수행

>> Outer Join의 경우, 값이 없는 것을 Null로 처리하기 때문에 한 테이블에서 누락된 데이터를 찾아야할 때 쓰면됨

>> Right Outer Join을 함으로써 animal_id를 기준으로 조인했을 때 오른쪽 테이블 (ao)에는 있지만 왼쪽 테이블 (ai)에는 없는 값이 Null로 표기됨

>> 따라서 Null로 표기된 값들이 ao 에는 있으나 ai에는 없는 데이터이고 이들을 WHERE을 통해 선택함

※ 오라클의 경우, 위 코드에 AS를 지워줘야함. 오라클에서는 AS를 쓰지 않는데, 본인의 경우 MySQL에서 코드를 명확하게 하기위해 AS를 꼭 입력함.

 

 

문제 바로가기

 

728x90
Comments