DUAL이라는 테이블은 SYS 사용자가 소유하는 오라클의 표준 테이블로서 오직 한 행(row)에 한 컬럼만 담고 있는 dummy 테이블로서 일시적인 산술연산이나 날짜 연산을 위하여 주로 쓰인다.
실행 | 결과 |
SQL>desc sys.dual; | 이름 널? 유형 ----------------- -------- ------------ DUMMY VARCHAR2(1) |
다시 말해서 이 가상 테이블은 SYS의 소유이다. 우리가 SYS로 로그인하지 않거나 SYS.DUAL로 쓰지 않아도 사용할 수 있는 이유는 SYS 사용자가 모든 사용자들에게 사용할 수 있도록 이 테이블에 PUBLIC synonym(공용 동의어)을 주었기 때문이다.
DUAL 테이블을 요약 정리하면 다음과 같다.
쉽게 말해서, 가끔 일을 하다보면 여러 가지 계산을 해야 하는 경우가 있는데, 예를 들어서 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테이블은 산술 연산이나 가상 컬럼 등의 값을 한번만 출력하고 싶을 때 많이 사용하는 아주 유용한 테이블이다.
'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 |