오랜 기간 보호한 동물(2)
https://school.programmers.co.kr/learn/courses/30/lessons/59411
문제 풀이
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
-- 공통 테이블 표현을 생성 WITH DIFFER_DATE AS ( SELECT I.ANIMAL_ID, I.NAME, O.DATETIME - I.DATETIME AS DIFFER FROM ANIMAL_INS I INNER JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID ORDER BY O.DATETIME - I.DATETIME DESC ) -- 해당 CTE에서 처음 2개의 행을 선택 SELECT ANIMAL_ID, NAME FROM DIFFER_DATE FETCH NEXT 2 ROWS ONLY;
1 2 3 4 5 6 7 8 9 10 11 12
-- Oracle 조인 문법 SELECT I.ANIMAL_ID, I.NAME FROM ANIMAL_INS I, ANIMAL_OUTS O WHERE I.ANIMAL_ID = O.ANIMAL_ID (+) AND I.DATETIME <= O.DATETIME ORDER BY O.DATETIME - I.DATETIME DESC FETCH FIRST 2 ROWS ONLY;
WITH
(Common Table Expressions 또는 CTE)WITH
는 공통 테이블 표현이라고도 불리며, 쿼리 내에서 임시 테이블 또는 임시 결과 집합을 만드는 데 사용된다.- CTE를 사용하면 쿼리의 가독성을 향상시키고 복잡한 쿼리를 단순화할 수 있다.
- 주로 서브쿼리나 조인 작업을 수행하고, 그 결과를 더 간결하게 사용하기 위해 CTE를 생성할 때 사용된다.
FETCH
(FETCH FIRST n ROWS ONLY)FETCH
구문은 행을 선택할 때 사용되며, 일반적으로FETCH FIRST n ROWS ONLY
또는FETCH NEXT n ROWS ONLY
와 함께 사용된다.FETCH FIRST n ROWS ONLY
는 결과 집합에서 처음 n개의 행을 선택한다. 이를 통해 특정 행의 일부 또는 처음 몇 개의 결과를 가져올 수 있다.
1 2 3 4 5 6 7 8 9
SELECT ANIMAL_ID, NAME FROM ( SELECT I.ANIMAL_ID, I.NAME, O.DATETIME - I.DATETIME AS "DURATION" FROM ANIMAL_INS I JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID ) ORDER BY DURATION DESC FETCH FIRST 2 ROWS ONLY;
1 2 3 4 5 6 7 8 9
SELECT * FROM ( SELECT I.ANIMAL_ID, I.NAME FROM ANIMAL_INS I JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID ORDER BY O.DATETIME - I.DATETIME DESC ) WHERE ROWNUM <= 2;
ROWNUM
- 순차적인 정수:
ROWNUM
은 결과 집합에서 행의 순서를 나타내며, 가장 처음 선택된 행의ROWNUM
값은 1이다. 다음 행은 2, 3, 4, …과 같이 증가한다. - 필터링 및 제한:
ROWNUM
을 사용하여 결과 집합에서 특정 순서의 행을 선택하거나, 일부 행을 필터링하는 데 사용된다. 예를 들어,WHERE ROWNUM <= 10
은 처음 10개의 행을 선택한다.
- 순차적인 정수:
- 실행 결과
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.