[mysql/oracle] 오랜 기간 보호한 동물(1)

2023. 7. 5. 23:51Programmers/SQL

문제 설명

 

문제

 

결과

 

mysql - 처음 코드

1
2
3
4
5
SELECT NAME, DATETIME
FROM ANIMAL_INS
WHERE ANIMAL_ID NOT IN (SELECT ANIMAL_ID FROM ANIMAL_OUTS)
ORDER BY DATETIME
LIMIT 3
cs

ANIMAL_OUTS에 없는 동물을 뽑기 위해 서브쿼리를 사용했는데

사실 join이라는 카테고리에는 적합하지 않다

 

ANIMAL_INS에 있는 동물 중 ANIMAL_OUTS에는 없는 동물을 뽑으면 되므로

LEFT JOIN을 걸고 OUTS 테이블쪽 데이터를 null 처리하면 된다,

 

정답코드

1
2
3
4
5
6
SELECT A.NAME, A.DATETIME
FROM ANIMAL_INS A LEFT JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.ANIMAL_ID IS NULL
ORDER BY A.DATETIME
LIMIT 3
cs

 

 

oracle

1
2
3
4
5
6
7
8
9
SELECT A.NAME, A.DATETIME
FROM(
    SELECT A.NAME, A.DATETIME
    FROM ANIMAL_INS A LEFT JOIN ANIMAL_OUTS B   
    ON A.ANIMAL_ID = B.ANIMAL_ID
    WHERE B.ANIMAL_ID IS NULL
    ORDER BY A.DATETIME
) A
WHERE ROWNUM <= 3
cs