오늘은 DUAL이라는 테이블에 대해 알아보려고 한다.
DUAL은 나에게 그리 익숙한 문법이 아니었다.
그래서 처음에는 부끄럽지만 DUAL이라는 테이블이 도대체 어떤 테이블인지 한참 찾았었다........
도대체 얼마의 시간을 쓴건지...
그러나!!! 그런 시간이 있기에 배움의 가치를 더 크게 느낀다고 생각하기로 했다.
럭키비키 마인드로~★☆
여러분은 그 시간을 아꼈으면 하는 마음에서 오늘의 주제는 DUAL로 잡아봤다.
쿼리를 쓰다보면 FROM절 없이 SELECT만 쓰고 싶을 때가 있다.
예를 들면 그냥 파라미터 값을 그대로 리턴하는 SELECT 문 같은거!
그럴 때 유용하게 쓸 수 있는 것이 DUAL 테이블이다.
DUAL은 쉽게 말하면 1x1 크기의 가상 테이블이라고 볼 수 있다.
즉, 단 하나의 행과 단 하나의 컬럼으로 구성되어있다.
DUAL은 다양하게 활용이 가능한데 오늘은 3가지 정도를 알아보겠다.
1. 상수 값 및 계산 결과 확인
앞서 예시를 들었던 부분이 이 케이스에 해당된다고 볼 수 있다.
SELECT 1+1
, 'HELLO'
FROM DUAL
위 쿼리를 실행하면 아래와 같이 나온다.

계산 결과와 상수 값이 잘 출력되고 있다.
나는 주로 파라미터값을 그대로 조회할 필요가 있을 때 주로 쓴다.
예를 들어 파라미터로 서브쿼리를 쓰는 경우에 말이다.
직원 테이블이 있다고 가정해보자.
| EMP_ID | EMP_NAME | EMP_AGE | DEPT | SALARY |
| 1001 | KEVIN | 24 | ACCOUNTING | 4300 |
| 1002 | EMILY | 27 | IT | 5100 |
| 1003 | JOHN | 30 | MARKETING | 5800 |
나는 여기서 연봉이 #SALARY#보다 많은 직원 아이디 리스트를 뽑아내는 쿼리를 쓰려고 한다.
이럴 때 WHERE SALARY > #SALARY# 라고 쓸 수도 있지만 DUAL 서브쿼리도 사용 가능하다!
SELECT EMP_ID
FROM EMP
WHERE SALARY > (SELECT #SALARY#
FROM DUAL);
#SALARY#에 5500을 넣고 위 쿼리를 수행하면 아래처럼 결과가 나온다.

2. 시스템 정보 조회
1번과 일맥상통한 케이스이긴 하지만 시스템 함수 결과를 조회할 때 쓸 수 있다.
SELECT SYSDATE
FROM DUAL;
SELECT USER
FROM DUAL;
3. 함수 테스트
TO_CHAR, TO_DATE 같은 내장 함수나 PL/SQL할 때 주로 쓰는 Function을 테스트할 때 쓰기 좋다.
가끔 코딩 테스트를 볼 때 함수 사용법이 잘 기억이 나지 않을 때 써도 좋은 방법인 것 같다!
SELECT ROUND(3.14159)
FROM DUAL;
SELECT SUBSTR('OracleDB', 1, 4)
FROM DUAL;
오늘은 오라클의 빈 그릇 테이블인 DUAL에 대해 알아봤다.
쓰다보니 꽤 유용하고 많이 쓰게 되어 꼭 소개하고 싶었다.
나같은 주니어 개발자는 선배님들이 쓰신 쿼리를 많이 읽어보는게 참 중요한 것 같다.
스스로 의문점도 가져보고 새로운 개념도 배우고!
실무를 하면 할수록 부족함도 많이 느껴지지만 그만큼 배울 게 많다는 데에 매일이 설렌다.
하루하루 꾸준히 발전해나가다보면 나중에 엄청난 핵심 코드 한 줄로 문제를 해결해버리는 엄청난 개발자가 될 수도 있지 않을까?
'SQL' 카테고리의 다른 글
| PAD + MOD (0) | 2026.02.03 |
|---|---|
| 두 테이블을 비교하여 값 갱신하기, MERGE 사용법 (0) | 2025.12.11 |
| UNION 사용 시 주의할 점 (0) | 2025.11.17 |