Table dual

DATE : 2023/12/19

What is Dual?

dual 테이블은 Oracle Database에서 사용하는 테이블 중 하나로

안에 들어있는 데이터를 조회해보면 DUMMY라는 COLUMN에 X가 들어있는 걸 볼 수 있다.

사진에서 볼 수 있듯이 dual table에서 모든 정보를 꺼내오라는 SQL을 실행하면

varchar2(1)로 정의된 column이 딱 하나의 값을 가지고 있는 것으로 결과가 출력된다.

아니.. 이런 형태의 테이블이 왜 필요한 거지? 의문일 수 있는데 🤔

Oracle에서는 SELECT문을 사용할 때 반드시 FROM TABLE_NAME을 작성해야 한다는 규칙이 있다.

MySQL에서는 아래 예시와 같이

select 1

select substr("hanhxx",1,1)

테이블에서 데이터를 추출하는 게 아닌, 특정 값을 출력하고자 할 때나 함수를 사용할 때

FROM을 작성하지 않아도 정상적으로 결과를 얻을 수 있었다.

하지만 Oracle에서는 SELECT문에 FROM을 작성하지 않으면

"FROM 키워드가 필요한 위치에 없습니다"와 같은 오류가 발생하게 된다.

이럴 때, 큰 의미 없이 FROM에 작성할 Table이 필요한데 그 역할을 dual이 하게 되는 것!

위에서 오류가 발생했던 SQL에 FROM dual을 작성해주면 문제 없이 결과가 나오는 걸 볼 수 있다.

이처럼 함수를 사용하거나 특정 값을 그냥 출력하고자 할 때,

FROM에 넣어줄 테이블로 dual을 활용할 수 있다.

(+) dual table은 user SYS 소유인 테이블이지만

모든 사용자가 접근이 가능하기 때문에 위에서 작성한 SQL이 정상적으로 실행될 수 있었던 것이다.

실제로 DUAL 테이블에 대한 정보를 출력해보면 OWNER 값이 SYS임을 확인할 수 있고

DUAL 테이블에 들어있는 모든 COLUMN 정보를 출력해도

처음에 설명했던 거처럼 DUMMY column의 정보만 나오는 것을 확인할 수 있다!

Last updated