JOIN 문제안에 있지만 꼭 JOIN으로 결과를 도출하지 않아도된다.
이 글을 검색하는 사람들은 이제 공부를 시작하는 학생이라 생각하기에 성능은 생각하지 않겠다.
결과값을 도출하는데에는 수많은 방법이 있다라는 것을 말해주고싶다.
OUTER JOIN, SUB QUERY, RANK를 이용하여 정답을 도출해보겠다.
SQL 결과(1) - OUTER JOIN
SELECT
NAME
,DATETIME
FROM(
SELECT AINS.NAME
,AINS.DATETIME
FROM ANIMAL_INS AINS
,ANIMAL_OUTS AOUT
WHERE 1=1
AND AINS.ANIMAL_ID = AOUT.ANIMAL_ID(+)
AND AOUT.ANIMAL_ID IS NULL
ORDER BY AINS.DATETIME
)
WHERE 1=1
AND ROWNUM < 4
해설(1)
/*
입양 여부를 확인하기 위해서는 테이블을 조인해야한다.
아직 입양을 못 간 동물이 기준이기에 OUT테이블에 (+)
*/
FROM ANIMAL_INS AINS
,ANIMAL_OUTS AOUT
WHERE 1=1
AND AINS.ANIMAL_ID = AOUT.ANIMAL_ID(+)
/*입양을 가지 못한 동물*/
AND AOUT.ANIMAL_ID IS NULL
/*가장 오래 보호소에 있었던 동물 3마리*/
AND ROWNUM < 4
SQL 결과(2) - SUB QUERY
SELECT
NAME
,DATETIME
FROM(
SELECT NAME
,DATETIME
FROM ANIMAL_INS
WHERE 1=1
AND ANIMAL_ID NOT IN (SELECT
ANIMAL_ID
FROM ANIMAL_OUTS)
ORDER BY DATETIME
)
WHERE 1=1
AND ROWNUM < 4
SQL 결과(3) - RANK
SELECT
NAME
,DATETIME
FROM(
SELECT AINS.NAME
,AINS.DATETIME
,DENSE_RANK() OVER(ORDER BY AINS.DATETIME ASC) AS RNK
FROM ANIMAL_INS AINS
,ANIMAL_OUTS AOUT
WHERE 1=1
AND AINS.ANIMAL_ID = AOUT.ANIMAL_ID(+)
AND AOUT.ANIMAL_ID IS NULL
)
WHERE 1=1
AND RNK < 4
프로그래머스 LEVEL4 [입양시각구하기2] ORACLE (1) | 2021.10.26 |
---|---|
프로그래머스 LEVEL2 [입양시각구하기1] ORACLE (0) | 2021.10.22 |
프로그래머스 LEVEL4 [보호소에서 중성화한 동물] ORACLE (0) | 2021.10.02 |
프로그래머스 LEVEL3 [있었는데요 없었습니다] ORACLE (0) | 2021.09.29 |
프로그래머스 LEVEL3 [없어진 기록 찾기] ORACLE , MYSQL (0) | 2021.09.16 |
댓글 영역