티스토리 뷰

반응형

목표:
getPrevNotice 메서드의 SQL 쿼리를 작성한다.

 

ID가 5인 NOTICE의 REGDATE가 NOTICE의 REGDATE보다 작은 ID를 출력
-> 2, 3, 4로 출력되어있다. 4가 출력해야 하는데 순서가 반대로 되어있다.

 

NOTICE를 REGDATE로 역 정렬한 후의 NOTICE내의 REGDATE와 ID가 5인 REGDATE보다 작은 경우의 아이디를 출력
-> 4, 3, 2 순으로 잘 정렬되어있다.

SQL 코드:
getPrevNotice함수 구현

SELECT ID FROM (SELECT * FROM NOTICE ORDER BY REGDATE DESC) 
WHERE REGDATE < (SELECT REGDATE FROM NOTICE WHERE ID=5) AND ROWNUM = 1

SELECT ID FROM (SELECT * FROM NOTICE ORDER BY REGDATE DESC)
☞ REGDATE를 역정렬한 NOTICE의 모든 값을 선택하는 서브 쿼리로부터 ID를 선택
WHERE REGDATE < (SELECT REGDATE  FROM NOTICE WHERE ID=5)
☞ ID가 5인 NOTICE로부터 REGDATE를 가져오는 서브 쿼리보다 현재 REGDATE보다 작을 경우
AND ROWNUM = 1);
☞ ROWNUM가 1인 경우

정리 ☞ REGDATE를 역정렬한 NOTICE의 모든 값을 선택하는 서브 쿼리의 REGDATE가 ID가 5인 NOTICE의 REGDATE보다 작고 ROWNUM이 1인 경우의 ID를 출력한다.

 

자바 코드:

- NoticeService.java

public Notice getPrevNotice(int id) {
	String sql = "SELECT ID FROM (SELECT * FROM NOTICE ORDER BY REGDATE DESC) "
			+ "WHERE REGDATE < (SELECT REGDATE FROM NOTICE WHERE ID=5) AND ROWNUM = 1";
	return null;
}
	
반응형
댓글
공지사항