Data Engineering/MySQL & Oracle

[프로그래머스 MySQL,Oracle] - 오랜 기간 보호한 동물

ddoddo201 2021. 6. 27. 01:20

 

 

맨 위에서부터 n개를 추출할 때 사용하는

LIMIT, ROWNUM를 구분할 수 있어야 한다.

 

[ 프로그래머스 - 오랜 기간 보호한 동물(1) ]

 

 

 

(마지막 문장) ANIMAL_ID는 ANIMAL_INS의 ANIMAL_ID의 외래 키 입니다.

 

➔ ANIMAL_ID가 기본키이면서 외래키라는 의미이다.

 

➔ WHERE 조건문에서 ANIMAL_ID를 사용해야 한다.

 

 

MySQL (LIMIT 사용)

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

LEFT OUTER JOIN = LEFT JOIN (아무거나 사용해도 된다)

 

*LIMIT N : 맨 위에서부터 N번째까지 조회한다.

*LIMIT N,M: (맨 위에서부터) N번째부터 M번째까지 조회한다.

 

 

 

ORACLE (ROWNUM 사용)

(틀린문법)

SELECT A.NAME, A.DATETIME
FROM ANIMAL_INS A, ANIMAL_OUTS B
WHERE A.ANIMAL_ID=B.ANIMAL_ID(+) AND B.ANIMAL_ID IS NULL AND ROWNUM<=3
ORDER BY A.DATETIME

 

 

(정답)

SELECT *
FROM (SELECT A.NAME, A.DATETIME
     FROM ANIMAL_INS A, ANIMAL_OUTS B
     WHERE A.ANIMAL_ID=B.ANIMAL_ID(+) AND B.ANIMAL_ID IS NULL
     ORDER BY A.DATETIME)
WHERE ROWNUM <= 3

 

틀린 이유: JOIN을 완성한 결과에서 위에서부터 3개의 행을 추출해야 한다.

               (틀린문법)처럼 하면 JOIN 조건이 2개인 것이 된다.