RDB/Oracle

[Oracle] WITH AS 구문

창문닦이 2020. 7. 8. 23:16
  • 상위 n개 레코드 : 동물 보호소에 가장 먼저 들어온 동물의 이름을 조회하는 SQL 문을 작성해주세요.

상위 n개 레코드를 출력하는 sql문을 작성하는 문제가 프로그래머스에 있었다. 

mySQL 같은 경우에는 LIMIT으로 간단히 해결되지만 오라클의 경우에는 ROWNUM을 사용해야 한다. 서브 쿼리를 사용할 때 WITH AS 구문을 사용하면 가독성을 높일 수 있다. 

 

WITH절 : 오라클9 이후 버전부터 사용이 가능하며 이름이 부여된 서브 쿼리이다. VIEW와 쓰임새가 비슷한데 차이점이 있다면 VIEW는 한번 만들어놓으면 DROP 할 때까지 없어지지 않지만 WITH절의 경우 한번 실행할 쿼리내에 정의되어 있을 경우, 그 쿼리 문안에서만 실행된다. WITH 절을 이용하여 미리 이름을 부여해서 Query Block을 만들 수 있다. 자주 실행되는 경우 한 번만 Parsing 되고 Plan 계획이 수립되므로 쿼리의 성능 향상에 도움이 된다.

 

현재 예시 문제에는 서브 쿼리를 사용하는게 1개지만 실무를 하면서 통계 산출 시 반복 & 중첩해서 쿼리를 작성하는 경우가 매우 많다. 즉, 재사용이 잦은 경우에 잊지 말고 사용하도록 하자 !

WITH BASE AS (
    SELECT
        NAME
    FROM 
        ANIMAL_INS
    ORDER BY DATETIME ASC
) 
SELECT NAME FROM BASE WHERE ROWNUM = 1;

 

 

참조

https://coding-factory.tistory.com/445

https://amaze9001.tistory.com/82