본문 바로가기

별걸다하는 IT/데이터베이스 Database

[SQL] 더미 테이블 DUAL이란? 임시 테이블 활용해 쿼리 작성 결과확인

반응형

[데이터베이스 SQL 포스팅 링크 모음]

안녕하세요
오늘은 더미테이블 DUAL 관련하여 후딱 작성해보려고 합니다.

DUAL 테이블이란?

만약에 쿼리로, 오늘 날짜를 출력하고 싶다면, 날짜 함수인 sysdate를 사용하면 되겠죠?
그런데 sysdate는 DBMS에서 제공하는 날짜 관련 함수로,, 특정 테이블의 컬럼이 아니예요

 

SELECT sysdate FROM ??

그러면 요기서 FROM 다음에 테이블을 어떻게 작성해야할까요?
이럴 때 필요한게 더미테이블 DUAL입니다.

 

1. SELECT sysdate FROM DUAL; 2. SELECT sysdate ; (MYSQL)

DUAL은 오라클이나 MYSQL 등 DBMS에서 제공하는 테이블로,
24 * 37 이런 단순한 계산부터, 산술연산, 함수결과 등 쿼리 결과를 손쉽게 확인해볼 수 있는 임시테이블 같은거예요.

MYSQL의 경우에는 FROM DUAL을 생략할 수 있어요.
그런데 오라클은 생략했을 경우 에러가 난답니다.

 

짠 DUAL 테이블을 사용해서 결과를 뽑아봤어요. 현재 날짜 정보가 잘 나온 것을 확인할 수 있습니다.
DUAL을 사용해 속성으로 잠깐 테이블을 만들기도 하고,, 계산을 하기도 하고.. 다양하게 활용할 수 있어요.

 

DUAL 테이블 소유자가 아닌 사람이 사용할 수 있나?

DUAL 테이블은 소유자는 'SYS'로 사실 관리자만 사용할 수 있어요.
테이블 정보를 조회해보면 OWNER부분이 SYS로 되어있는 걸 확인할 수 있습니다.
그런대 나는 관리자가 아닌데, 어떻게 DUAL을 사용할 수 있는걸까요?

권한

권한 테이블을 조회해보면 DUAL테이블의 경우 GRANTEE가 'PUBLIC'으로 지정되어있음을 알 수 있습니다.
소유자가 SYS이지만, 어느 사용자에게든 접근이 열려있다는 뜻이예요.

 

DUAL 테이블 활용예시

사실 더미테이블 DUAL은 개념이 너무 간단해서.. 이게 끝입니다!
자주 사용되는 활용 예시들을 몇가지만 보고 포스팅을 이만 끝내려고 해요.

 

1. 가상데이터로 테이블 만들기

SELECT * 
FROM ( 
SELECT '토마토' 상품명, 101 상품번호, 3000 가격 FROM DUAL UNION ALL 
SELECT '바나나' 상품명, 101 상품번호, 1000 가격 FROM DUAL UNION ALL 
SELECT '사과' 상품명, 103 상품번호, 2000 가격 FROM DUAL 
) 상품테이블;

필요할때 요런식으로 행을 추가해서 테이블 만드는 식을 자주 사용합니다.

 

'상품테이블'이 잘 조회되는 것을 확인할 수 있어요.
UNION ALL은 행을 추가하는 쿼리인데요 궁금하신 분은 아래 포스팅을 참고하면 됩니다.
2021.12.26 - [별걸다하는 IT/데이터베이스 Database] - [데이터베이스 SQL]UNION, UNION ALL 쿼리 결과 더하기, 행 합치기

행이 100개라면 UNION ALL로 일일이 행을 더해주는게 번거롭지 않나? 할수도 있는데
보통 편집툴에 대부분 라인복사와 열모드 편집기능이 있으니까 생각보다 빨리 만들 수 있어 선호하는 방식이예요.

반응형

2. SELECT 결과 확인하기

복잡한 데이터를 파싱해서 내가 원하는 데이터만 뽑아낸다던가..
함수 결과를 보고 싶다던가 위의 예시처럼 날짜를 보고 싶다던가...
바로바로 시험해볼 수 있는 테이블이 DUAL테이블인거예요.

SELECT ROUND(3.12) FROM DUAL; 
SELECT SYSDATE FROM DUAL; 
SELECT 시퀀스.NEXTVAL FROM DUAL; 
SELECT 40*32 FROM DUAL;

요런식으로 공부하다가 사용법을 확인하고 싶을 때 테스트하는 용도로도 쓸 수 있는데

유용해서 좀 더 복잡하게 쓸때도 많습니다.

한 예시로 내가 문자열에서 공백을 제거해주는 쿼리를 만들고 싶다 하면,

SELECT REPLACE(trim(REPLACE( 
'123456 
 78910  
 111213 ' , chr(10), '')), ' ', '') 공백제거 
FROM dual;

요렇게 작성해서 사용하는거죠.
위 쿼리는 문자열에서 띄어쓰기나 엔터 같은걸 제거하고 한 줄로 붙여주는 쿼리예요.

단순히 'SELECT 32*10 FROM DUAL' 요런 간단한 쿼리를 체크하는 용으로도 DUAL을 활용할 수 있지만,
이런식으로 간단한 기능정도는 DUAL을 통해 쿼리로 작성할 수 있구나~~ 정도?

이 외에 JOIN할 때 종종 쓰기도 하고,
행이나 컬럼을 추가로 지정할 때에도 DUAL을 이용하면 쿼리작성이 쉬워질때가 있어요.

하지만 기초 포스팅에서 다룰 부분은 아닌 거 같으므로 생략..


이 포스팅에서 기억해야할 건 하나입니다.
DUAL테이블은 임시테이블(더미테이블)로 쿼리 테스트를 손쉽게 해볼 수 있다!

오늘은 여기까지!
DUAL에 대해서 간단하게 알아봤어요. 도움이 되었다면 공감은 큰 힘이 됩니다.

반응형