반응형
오라클에서 시퀀스를 사용하거나 sysdate 따위를 조회할 때 FROM DUAL을 씁니다. 이런 식이죠.
SELECT sysdate
FROM dual;
SELECT SOME_SEQUENCE.nextval
FROM dual;
오늘은 협력사 기술지원팀의 신입 개발자 분이 이걸 왜 쓰는지 궁금해 하셨는데, 저도 학생 시절 공부할 때부터 무의식적으로 써오던 터라 명확하게 설명해줄 수가 없었습니다. 그래서 궁금해하실 분들을 위해 글로 정리해보았습니다.
MySQL이나 Maria 등과 다르게 왜 오라클에서는 FORM DUAL을 요구할까요?
오라클에서 `FORM DUAL`을 사용하는 이유
Oracle에서 시퀀스나 SYSDATE와 같은 단일 값을 반환하는 함수를 조회할 때 "FROM DUAL" 구문을 사용하는 이유는 다음과 같습니다.
- 문법적 요구사항
Oracle SQL 문법은 SELECT 구문 다음에 반드시 FROM 구문이 와야합니다. 그러나 시퀀스나 SYSDATE와 같은 단일 값을 반환하는 함수는 FROM 구문 다음에 어떤 테이블도 필요하지 않습니다. 이 때문에 "FROM DUAL" 구문을 사용하여 단일 행의 가상 테이블을 생성하여 문법적 요구사항을 충족시킵니다. - 단일 행 반환
"DUAL"은 Oracle에서 존재하는 가상 테이블로, 하나의 행을 가지고 있습니다. "FROM DUAL"을 사용하여 시퀀스나 SYSDATE와 같은 함수를 조회하면 항상 단일 행을 반환하게 되므로, 반환 값에 대한 혼동을 방지할 수 있습니다. - 성능 향상
"DUAL" 테이블은 오직 하나의 행만 가지므로, FROM 절에서 "FROM DUAL"을 사용하는 것은 시스템 자원을 낭비하지 않고도 쿼리를 실행할 수 있도록 도와줍니다.
따라서, Oracle에서 시퀀스나 SYSDATE와 같은 단일 값을 반환하는 함수를 조회할 때 "FROM DUAL"을 사용합니다.
저는 실제 업무를 하며 큰 회사에서는 Oracle을 가장 많이 사용하고, 중소 규모의 프로젝트에서는 MariaDB(혹은 MySQL), 훨씬 더 적은 경우로 PostreSQL을 사용했는데요, 오라클은 다른 데이터베이스에 비해 조금 더 strict 하다고 느껴지는 부분이 많았습니다.
여러분 생각은 어떠신가요?
반응형
'프로그래밍 > 이것저것 일하면서' 카테고리의 다른 글
[데이터베이스/오라클] 대량 insert 속도 개선 (0) | 2023.03.17 |
---|---|
[데이터베이스] FK 쓸까, 말까? 오늘 외래키를 삭제한 이유 (0) | 2023.02.27 |
특정 아이피의 VIP(Virtual IP) 여부를 확인하는 방법 (0) | 2023.02.27 |
데이터베이스에 파일을 blob으로 저장하는 방법 (0) | 2023.02.20 |
[RESTful API] DELETE 요청에 Body를 사용하지 않는 이유 (0) | 2023.02.16 |