IT_공부장/Oracle

ORACLE 더미 데이터로 쿼리 해보기(DUAL 사용 방법)

에러노트 2025. 7. 8. 18:22

MySQL과의 차이점으로 인해 한 번 정리해보게 되었습니다.

우선, MySQL과 달리 Oracle은 from 절을 무조건 함께 써야합니다. 아래 구문처럼 말이죠.

--MySQL의 경우
select now();

--Oracle의 경우
select sysdate from dual;

--각각 오늘 날짜와 시간이 출력됩니다.

이로 인해 Oracle은 특정 테이블을 조회하는 것이 아닌 경우를 대비하여 가짜 테이블과 데이터를(더미 데이터)를 만들어두었습니다.

가짜 테이블인 DUAL도 실제하고 있긴 합니다.  조회해보면 아래와 같습니다. 

SELECT * FROM DUAL;
-- 결과: DUMMY 열에 'X' 하나 있는 1행짜리 테이블

 

테이블 자체를 조회할 수는 있습니다.

 

단일행 함수 기준, MySQL과 Oracle의 구문 차이는 다음과 같습니다. (간단하게 DUAL 테이블 사용한 예시입니다.)

✅ 대문자 변환 SELECT UPPER('hello'); SELECT UPPER('hello') FROM DUAL; 동일 (Oracle은 DUAL 필요)
✅ 소문자 변환 SELECT LOWER('HELLO'); SELECT LOWER('HELLO') FROM DUAL; 동일
✅ 문자열 길이 SELECT LENGTH('abc'); SELECT LENGTH('abc') FROM DUAL; 동일
✅ 부분문자열 SELECT SUBSTRING('hello', 2, 3); SELECT SUBSTR('hello', 2, 3) FROM DUAL; 함수명 다름 (SUBSTRING vs SUBSTR)
✅ 문자열 연결 SELECT CONCAT('a', 'b'); SELECT 'a' || 'b' FROM DUAL; 동일
✅ 공백 제거 SELECT TRIM(' abc '); SELECT TRIM(' abc ') FROM DUAL; 동일 (앞, 뒤 공백만 제거됨)
✅ 왼쪽 공백 제거 SELECT LTRIM(' abc'); SELECT LTRIM(' abc') FROM DUAL; 동일
✅ 오른쪽 공백 제거 SELECT RTRIM('abc '); SELECT RTRIM('abc ') FROM DUAL; 동일
✅ 반올림 SELECT ROUND(3.14159, 2); SELECT ROUND(3.14159, 2) FROM DUAL; 동일
✅ 버림 SELECT TRUNCATE(3.14159, 2); SELECT TRUNC(3.14159, 2) FROM DUAL; 함수명 다름 (TRUNCATE vs TRUNC)
✅ 나머지 SELECT MOD(10, 3); SELECT MOD(10, 3) FROM DUAL; 동일
✅ 제곱 SELECT POW(2, 3); SELECT POWER(2, 3) FROM DUAL; 함수명 다름 (POW vs POWER)
✅ 현재 날짜 SELECT NOW(); SELECT SYSDATE FROM DUAL; 함수명과 형식 다름
✅ 날짜 더하기 SELECT DATE_ADD(NOW(), INTERVAL 2 MONTH); SELECT ADD_MONTHS(SYSDATE, 2)
FROM DUAL;
함수명, 문법 다름
✅ 날짜 포맷 변경 SELECT DATE_FORMAT(NOW(), '%Y-%m-%d'); SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD')
FROM DUAL;
함수명, 포맷 방식 다름

  

그럼 간단하게 몇 가지 써볼까요?

SELECT ROUND(3.14159, 2) FROM DUAL;
-- 소수 둘째자리까지 반올림 (3.14)

SELECT MOD(10, 3) FROM DUAL;
-- 나머지 (10 % 3 → 1)

SELECT POWER(2, 5) FROM DUAL;
-- 2의 5제곱 (32)

SELECT UPPER('oracle') FROM DUAL;
-- 대문자로 변환 (ORACLE)

SELECT SUBSTR('HELLO', 2, 3) FROM DUAL;
-- 2번째 문자부터 3글자 (ELL)

SELECT LENGTH('데이터') FROM DUAL;
-- 문자열 길이 (한글 포함 3)

모든 쿼리는 데이터는 별도로 저장한 내용 없이 더미로만 진행했습니다!

이와 같이 써볼 수 있습니다.

'IT_공부장 > Oracle' 카테고리의 다른 글

Oracle 아키텍쳐 용어 정리 및 흐름도, 트랜잭션  (2) 2025.07.09