목차
문제
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다.
ANIMAL_INS 테이블 구조는 다음과 같으며,
ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_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
복사