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 |
---|