회사에서 쿼리문을 작성중 의식의 흐름대로 dual을 사용하는 나 자신을 발견..
하지만 dual이 무엇인지는 느낌만 알뿐.. 정확히 설명할 수 는 없었다..
그래서 열심히 구글링을 해보았다.
듀얼 테이블(DUAL table)은 모든 오라클 데이터베이스 설치본에 기본으로 존재하는, 한 열로 이루어진 특별한 (임시)테이블이다. SYSDATE, USER와 같은 "의사컬럼" 선택에 사용하는 것이 적절하다. 이 테이블은 'X' 값을 포함하는 DUMMY(더미)라 불리는 하나의 VARCHAR2(1) 열이 있다.
출처 - 위키백과
1. SELECT SYSDATE FROM DUAL -- 현재 날짜 출력
2. SELECT FNGETCODENM FROM DUAL -- 함수 FNGETCODENM 리턴값 출력
3. SELECT 'TEST' FROM DUAL -- 문자열 TEST 출력
그 외 내장함수 사용 가능
정리해보자면 dual 테이블은 임시테이블이며 값을 가지는 하나의 행과 DUMMY라 불리는 하나의 열이 있고, 사용자 함수 또는 내장함수, 값을 한번에 보여주고자 할때 사용됩니다.
실제로 제가 개발을 할때는 DUAL테이블을 활용한 여러 SELECT문을 조합하여 사용하기도 하였습니다.
예1) 테이블 A,B,C...등등이 있습니다.
A는 부모테이블이고 B,C와 각각 1:N 관계를 이루고 있을때
A테이블의 기본키를 가지고 여러조인을 하여 필요 데이터를 가져올 수 있겠지만, SELECT절에 각각의 서브쿼리를 사용 후 마지막에 DUAL테이블을 써서 데이터를 한행으로 나타낼 수 있습니다.
SELECT
(SELECT 'A' FROM B WHERE B.ID = 1) "데이터1"
,(SELECT 'B' FROM C WHERE C.ID = 1) "데이터2"
FROM
DUAL
결과
데이터1---데이터2
---------------
A | B
이 방법이 맞다기 보단 이렇게도 되더라(?) 라는 개인적인 생각입니다.
그리고 CONNECT BY 를 사용하면 한 행이 아닌 여러행으로도 나타낼수있습니다.! DUAL의 활용범위는 무궁무진하니 여러 자료들을 참고하시는 것도 추천드립니다. !