오랜 기간 보호한 동물(1)
https://school.programmers.co.kr/learn/courses/30/lessons/59044
- 문제 풀이
ANIMAL_INS 테이블에 있는 동물 중 ANIMAL_OUTS 테이블에 없는 동물의 이름과 날짜를 검색하며, 결과를 DATETIME 기준으로 정렬하고 상위 3개 행만 반환한다.
1 2 3 4 5 6 7 8 9 10
SELECT NAME, DATETIME FROM ( SELECT I.NAME, I.DATETIME FROM ANIMAL_INS I LEFT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID WHERE O.ANIMAL_ID IS NULL ORDER BY I.DATETIME ASC ) FETCH FIRST 3 ROWS ONLY;
- 서브쿼리를 사용한 형태로, 외부 쿼리에서는 서브쿼리의 결과 중 상위 3개 행을 선택하기 위해
FETCH FIRST 3 ROWS ONLY
를 사용했다.
1 2 3 4 5 6 7
SELECT I.NAME, I.DATETIME FROM ANIMAL_INS I LEFT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID WHERE O.ANIMAL_ID IS NULL ORDER BY I.DATETIME FETCH FIRST 3 ROWS ONLY;
LEFT JOIN
: ANIMAL_INS 테이블을 기준으로 보고 있으며, 왼쪽 테이블(ANIMAL_INS)의 모든 행을 포함하고 오른쪽 테이블(ANIMAL_OUTS)과 조건에 맞는 행이 있는 경우 해당 행을 함께 반환한다.
1 2 3 4 5 6 7
SELECT I.NAME, I.DATETIME FROM ANIMAL_OUTS O RIGHT JOIN ANIMAL_INS I ON O.ANIMAL_ID = I.ANIMAL_ID WHERE O.ANIMAL_ID IS NULL ORDER BY I.DATETIME FETCH FIRST 3 ROWS ONLY;
- 서브쿼리를 사용한 형태로, 외부 쿼리에서는 서브쿼리의 결과 중 상위 3개 행을 선택하기 위해
- Oracle 조인 문법
(+)
기호를 사용하여 오른쪽 테이블에 대한 외부 조인을 나타낸다.
1
2
3
4
5
6
SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS I, ANIMAL_OUTS O
WHERE (I.ANIMAL_ID = O.ANIMAL_ID(+)) AND
O.ANIMAL_ID IS NULL
ORDER BY DATETIME
FETCH FIRST 3 ROW ONLY;
- SQL 표준의 조인 문법
LEFT JOIN
과ON
을 사용하여 왼쪽 테이블과 오른쪽 테이블을 조인
1
2
3
4
5
6
SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE O.ANIMAL_ID IS NULL
ORDER BY I.DATETIME
FETCH FIRST 3 ROWS ONLY;
FETCH FIRST n ROWS ONLY
- 결과 집합에서 처음 n개의 행만을 선택하도록 하는 SQL 구문이다. 이는 특정 쿼리의 결과에서 상위 n개의 행만 필요할 때 사용된다.
- 예를 들어,
ORDER BY
절을 사용하여 정렬된 결과에서 처음 몇 개의 행만 가져오고 싶을 때 유용하다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.