/////
Search
Duplicate

상위 n 개 레코드

태그
SELECT
한 번 더 체크
목차

문제

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다.
ANIMAL_INS 테이블 구조는 다음과 같으며,
ANIMAL_IDANIMAL_TYPEDATETIMEINTAKE_CONDITIONNAMESEX_UPON_INTAKE 는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.

예시

예를 들어 ANIMAL_INS 테이블이 다음과 같다면
이 중 가장 보호소에 먼저 들어온 동물은 Jack입니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

정답

Oracle

SELECT NAME FROM (SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY DATETIME) WHERE rownum = 1;
SQL
복사

MySQL

SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 1;
SQL
복사

풀이

Oracle

특정 칼럼을 기준으로 TOP N개를 출력하는 문제이다.
또한 기준이 되는 칼럼이 출력하는 칼럼에 포함되어 있지 않기 때문에 인라인 뷰를 활용해야 한다.
FROM (SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY DATETIME)
SQL
복사
기준이 되는 칼럼이 출력하는 칼럼에 포함되어 있지 않은 경우 우선 인라인 뷰에 기준이 되는 칼럼과 출력하는 칼럼을 포함하여 테이블을 조회하고 기준이 되는 칼럼으로 정렬을 한다. 그 다음 출력하는 칼럼만 SELECT 절에 포함하고 WHERE 절에 rownum <= n 을 활용하여 TOP N 개를 출력한다.
WHERE rownum <= n 은 출력되는 칼럼 중 TOP N개만 출력되도록 만든다.
WHERE rownum = 1;
SQL
복사
이때 rownum은 칼럼과 비슷한 성격의 Pseudo Column으로 SQL 처리 결과 집합의 각 행에 임시로 부여되는 일련번호이다.

MySQL

MySQL의 경우 기준이 되는 칼럼이 출력하는 칼럼에 포함되어 있지 않아도 상관없이 Top N개를 LIMIT 절을 활용하여 출력할 수 있다.
LIMIT 1 : 상위 1개만 출력
LIMIT n : 상위 n개까지 출력
LIMIT n,m : 상위 n번째부터 m번째까지 출력
LIMIT 1;
SQL
복사