차근차근/SQL

DUAL

예쁜꽃이피었으면 2014. 7. 29. 00:59
전용뷰어 보기

http://radiocom.kunsan.ac.kr/lecture/oracle/what_is/dual_table.html

DUAL 테이블이란


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

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

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

 

• DUAL 테이블은 오라클을 설치하면 자동으로 생성되는 테이블이다.

 

• DUAL은 SYS 사용자의 스키마이지만 모든 사용자가 억세스할 수 있다.

 

• 오직 하나의 DUMMY 컬럼만 가지며, VARCHAR2(1)의 데이터 타입이다.

 

• x라는 하나의 행(row)만 가진다.

 

• SELECT 문에서 상수를 계산할 때 유용하다.

 

• 하나의 행(row)만 가지므로 오직 한번만 상수를 반환한다.

 

• 이를 변형하여 상수, 가상컬럼 또는 테이블로부터 expression을 select하지만, 테이블의 여러 행에 여러번 그 값을 반환받을 수 있다.

 

DUAL테이블 예제
【예제】
SQL> select current_date from dual;

CURRENT_DATE
------------
13-AUG-09

SQL> select sysdate from dual;

SYSDATE
------------
13-AUG-09

SQL> select sqrt(2) from dual;

   SQRT(2)
----------
1.41421356

SQL> select current_timestamp from dual;

CURRENT_TIMESTAMP
------------------------------------------
13-AUG-09 08.54.55.909412 AM +09:00

SQL>

다음의 예제에서 쿼리문은 120/40의 결과를 출력하여 결과를 알기 위한 것이다. emp 테이블의 행의 수인 8개가 있기 때문에 그 수와 동일한 수의 결과가 나온다. 
하지만, dual 테이블은 하나의 값만을 출력해 준다. 그래서 dual 테이블은 하나의 값만을 출력해 주기 때문에 이러한 질의문을 실행하기에 적합한 테이블이다.

 

 
SQL> select 120/40 from emp;
 
    120/40
----------
         3
         3
         3
         3
         3
         3
         3
         3
 
8 rows selected.

SQL>
 
SQL> select 120/40 from dual;
 
    120/40
----------
         3
 
SQL>

 

 

 

http://son10001.blogspot.kr/2014/04/ms-sql-dual.html

 

MS-SQL 에서 DUAL ?

오라클에선 DUAL 이라는 테이블이 종종 쓰인다.
예를 들어

1 select sysdate from dual;
2 select 1 + 1 from dual;
3 ...

이런것...

dual 이라는 테이블은 그저 구색 맞추기 일뿐, 실제로 dual 이라는 테이블의 값은 쓰이지 않는다.
(여기서 dual 테이블은 실제로 존재하며 ' select * from dual ' 이렇게 조회를 해보면 'X' 라는 값, 딱 1개, 1줄만 들어 있다.)

그렇다면 MS-SQL 에서는 오라클에서 dual 이라는 테이블 역할을 하는 테이블이 없는것일까?
결론 부터 말하면 없다.

MS-SQL 에서는 그냥

1 select getdate();
2 select 1 + 1;
3 ...

이러면 된다.

만약 반드시 daul 이라는 테이블을 써야 겠다면?
위에 설명 했다시피 오라클의 dual 테이블은 'X' 라는 값이 딱 1줄만 들어 있는 테이블이다.
그러므로 똑같이 'X' 라는 값이 딱 1줄만 들어 있는 테이블을 하나 만들어 주던가.

1 MERGE INTO  Table01
2       USING (select 'X' as DUAL)
3 ...

이렇게 하면 된다.



반응형

'차근차근 > SQL' 카테고리의 다른 글

mssql , CONVERT함수 ,SET IDENTITY_INSERT  (0) 2015.05.29
mysql pk추가 삭제  (0) 2015.01.05
mysql dump만들기(백업) , 복구 (import)  (0) 2014.12.29
engine mysql  (0) 2014.12.24
truncate , 테이블의 데이터 모두 삭제하기.  (0) 2014.07.29