728x90
반응형

DUAL이라는 테이블은 SYS 사용자가 소유하는 오라클의 표준 테이블로서 오직 한 행(row)에 한 컬럼만 담고 있는 dummy 테이블로서 일시적인 산술연산이나 날짜 연산을 위하여 주로 쓰인다.

 

실행 결과
SQL>desc sys.dual; 이름              널?      유형
----------------- -------- ------------
DUMMY                      VARCHAR2(1)

 

 

다시 말해서 이 가상 테이블은 SYS의 소유이다. 우리가 SYS로 로그인하지 않거나 SYS.DUAL로 쓰지 않아도 사용할 수 있는 이유는 SYS 사용자가 모든 사용자들에게 사용할 수 있도록 이 테이블에 PUBLIC synonym(공용 동의어)을 주었기 때문이다.

 

 

DUAL 테이블을 요약 정리하면 다음과 같다.

• DUAL 테이블은 오라클을 설치하면 자동으로 생성되는 테이블이다.
• DUAL은 SYS 사용자의 스키마이지만 모든 사용자가 억세스할 수 있다.
• 오직 하나의 DUMMY 컬럼만 가지며, VARCHAR2(1)의 데이터 타입이다.
• x라는 하나의 행(row)만 가진다.
• SELECT 문에서 상수를 계산할 때 유용하다.
• 하나의 행(row)만 가지므로 오직 한번만 상수를 반환한다.
• 이를 변형하여 상수, 가상컬럼 또는 테이블로부터 expression을 select
  지만, 테이블의 여러 행에 여러번 그 값을 반환받을 수 있다.

 

 

 

 쉽게 말해서, 가끔 일을 하다보면 여러 가지 계산을 해야 하는 경우가 있는데, 예를 들어서 10*20이라는 계산을 해야된다고 가정해보자. 이때 10*20이라는 수식을 SELECT문에 기술해 주자.

 

 그런데 SELECT문에는 FROM절을 반드시 기술해야 한다. 그러나 10*20은 어느 테이블에서도 가져와 지는 게 아니기에 FROM절에 기술할 테이블이 없다. 이런 경우에 사용할 수 있는 dummy테이블이 바로 DUAL이다.

 

 

 

 그럼 이제 예를 들어서 DEPT테이블과 DUAL테이블을 비교해 보자.

 

실행 결과 

SQL>select *

    from dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

 

dept테이블은 3개의 컬럼이 존재하고, 4개의 로우가 존재하고 있다.

 

 

 

실행 결과 

SQL>select 10*20

    from dept;

     10*20
----------
       200
       200
       200
       200

 

dept테이블은 4개의 로우가 존재하므로 결과가 4번 출력된다.

 

 

 

실행 결과 

SQL>select *

    from dual;

D
-
X

 

dual테이블에는 dummy라는 단하나의 컬럼에 X라는 단 하나의 로우만을 저장하고 있다.

 

 

 

실행 결과 

SQL>select 10*20

    from dual;

     10*20
----------
       200

 

dual테이블은 하나의 로우가 존재하므로 1번 출력된다.

 

 

 

dual테이블은 산술 연산이나 가상 컬럼 등의 값을 한번만 출력하고 싶을 때 많이 사용하는 아주 유용한 테이블이다.

728x90
반응형

'SQL > ORACLE' 카테고리의 다른 글

[ORACLE]ORDER BY절 사용하기  (0) 2014.02.12
[ORACLE]ALIAS란?  (0) 2014.02.12
[ORACLE]ALIAS란?  (0) 2014.02.12
[ORACLE]SELECT문 해석 순서  (0) 2014.02.12
[ORACLE]문자 함수(Character functions)  (0) 2014.02.12
[ORACLE]숫자 함수(number functions)  (0) 2014.02.12
[ORACLE]날짜 함수(Date Functions)  (0) 2014.02.12
Oracle Function(Date...)  (0) 2014.02.12
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,