새발블로그

MySQL <-> Oracle SQL 벼락치기ㅠ.ㅠ 본문

Server/DB

MySQL <-> Oracle SQL 벼락치기ㅠ.ㅠ

EUG 2025. 11. 14. 23:08

1. LIMIT / OFFSET

MySQL

LIMIT 5 OFFSET 10
Oracle
OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY;

2. 날짜 포맷 (DATE_FORMAT → TO_CHAR)

MySQL

DATE_FORMAT(dt, '%Y-%m')

 

Oracle
TO_CHAR(dt, 'YYYY-MM')
 

3. 날짜 필터링

Oracle

WHERE created_at >= DATE '2022-10-01' AND created_at < DATE '2022-11-01';

MySQL DATE(created_at) 같은 함수 감싸기는 금지

4. LEFT / RIGHT → SUBSTR

Oracle

SUBSTR(str, 1, 3) -- MySQL : LEFT 
SUBSTR(str, -3) -- MySQL : RIGHT

5. CONCAT → ||

Oracle

first || ' ' || last

2개일 때는 concat가능하다하는데..

6. IF / IFNULL

MySQL

IF(a,b,c) 
IFNULL(col,'N/A')

Oracle

CASE WHEN a THEN b ELSE c END NVL(col,'N/A')
 
NVL(col, 'A')          -- MySQL IFNULL
NVL2(col, 'A','B')     -- MySQL 없음
COALESCE(c1,c2,c3)     -- 표준 SQL
NULLIF(a,b)            -- 동일

7. REGEXP → REGEXP _LIKE

Oracle

REGEXP_LIKE(email, '^[A-Za-z0-9._-]+$')

❗ Oracle의 정규식은 기본 대소문자 구분

8. BIT 연산 (& → BITAND)

MySQL

(skill & 256) > 0

Oracle

BITAND(skill, 256) > 0

9. GROUP BY 날짜 그룹 → TRUNC

MySQL

DATE(created_at)

Oracle

TRUNC(created_at)

10. ORDER BY RAND()

MySQL

ORDER BY RAND()

Oracle

ORDER BY DBMS_RANDOM.VALUE

11. 문자열 길이/부분 문자열

MySQL Oracle
LENGTH LENGTH
SUBSTRING SUBSTR
REPLACE REPLACE
CONCAT ||
 

Oracle은 문자열 비교 시 대소문자 구분!

WHERE LOWER(name) = LOWER('kim')

12. Oracle 날짜 함수

SYSDATE         -- 현재 날짜 + 시간
SYSTIMESTAMP    -- 밀리초 포함

MySQL의 NOW(), CURDATE() 대체.

13. DISTINCT (다중 컬럼)

MySQL

COUNT(DISTINCT CONCAT(a,b))

Oracle

COUNT(DISTINCT (a,b))

14. HAVING 절에서 별칭 사용 금지

MySQL

HAVING cnt >= 5
Oracle: 오류

Oracle

HAVING COUNT(*) >= 5
 
15. Oracle 전용 계층 쿼리 (CONNECT BY)

 

Oracle

SELECT id, parent_id, LEVEL
FROM tree
START WITH parent_id IS NULL
CONNECT BY PRIOR id = parent_id;
 

'Server > DB' 카테고리의 다른 글

[DB] MongoDB  (0) 2025.06.25
[DB] 인덱스 , 쿼리 최적화, 트랜잭션  (0) 2025.06.25
[SQL] 테이블, 뷰  (1) 2025.06.25
[SQL] SQL 심화 명령어  (0) 2025.06.25
[SQL] SQL 기본 명령어  (0) 2025.06.25