본문 바로가기

프로그래밍/이것저것 일하면서

[오라클] 시퀀스, sysdate 등을 조회할 때 `FOM DUAL`을 쓰는 이유

반응형

오라클에서 시퀀스를 사용하거나 sysdate 따위를 조회할 때 FROM DUAL을 씁니다. 이런 식이죠.

SELECT sysdate
  FROM dual;
  
SELECT SOME_SEQUENCE.nextval
  FROM dual;

 

오늘은 협력사 기술지원팀의 신입 개발자 분이 이걸 왜 쓰는지 궁금해 하셨는데, 저도 학생 시절 공부할 때부터 무의식적으로 써오던 터라 명확하게 설명해줄 수가 없었습니다. 그래서 궁금해하실 분들을 위해 글로 정리해보았습니다.

MySQL이나 Maria 등과 다르게 왜 오라클에서는 FORM DUAL을 요구할까요?

 

오라클에서 `FORM DUAL`을 사용하는 이유

Oracle에서 시퀀스나 SYSDATE와 같은 단일 값을 반환하는 함수를 조회할 때 "FROM DUAL" 구문을 사용하는 이유는 다음과 같습니다.

  1. 문법적 요구사항
    Oracle SQL 문법은 SELECT 구문 다음에 반드시 FROM 구문이 와야합니다. 그러나 시퀀스나 SYSDATE와 같은 단일 값을 반환하는 함수는 FROM 구문 다음에 어떤 테이블도 필요하지 않습니다. 이 때문에 "FROM DUAL" 구문을 사용하여 단일 행의 가상 테이블을 생성하여 문법적 요구사항을 충족시킵니다.
  2. 단일 행 반환
    "DUAL"은 Oracle에서 존재하는 가상 테이블로, 하나의 행을 가지고 있습니다. "FROM DUAL"을 사용하여 시퀀스나 SYSDATE와 같은 함수를 조회하면 항상 단일 행을 반환하게 되므로, 반환 값에 대한 혼동을 방지할 수 있습니다.
  3. 성능 향상
    "DUAL" 테이블은 오직 하나의 행만 가지므로, FROM 절에서 "FROM DUAL"을 사용하는 것은 시스템 자원을 낭비하지 않고도 쿼리를 실행할 수 있도록 도와줍니다.

따라서, Oracle에서 시퀀스나 SYSDATE와 같은 단일 값을 반환하는 함수를 조회할 때 "FROM DUAL"을 사용합니다. 

저는 실제 업무를 하며 큰 회사에서는 Oracle을 가장 많이 사용하고, 중소 규모의 프로젝트에서는 MariaDB(혹은 MySQL), 훨씬 더 적은 경우로 PostreSQL을 사용했는데요, 오라클은 다른 데이터베이스에 비해 조금 더 strict 하다고 느껴지는 부분이 많았습니다.

여러분 생각은 어떠신가요?

반응형

개발자가 그리는 인스타툰 팔로우하세요!