MySQL

MySQL & Oracle 문법의 차이

WOOOOJI 2023. 1. 13. 22:37

MySQL, Oracle 은 기본적으로 SQL언어를 사용합니다.

그래서 크게! 는 안다르죠 🙂

하지만 사용하는 몇가지 함수명이 다른다든지 join을 하는 방식에서 문법에 차이가 존재한다든지, 여러가지 차이점들이

존재하는데요! 오늘은 그 차이점에 대해서 모두 정리하고 앞으로 MySQL을 사용하는데 지장이 없게 글로 적어서

정리하고 직접 쿼리문을 작성해보겠습니다!


1. 시퀀스 사용 함수가 다릅니다.

Oracle에서는 시퀀스명.NEXTVAL 을 사용했죠?

근데 MySQL에서는 시퀀스명.CURRVAL 을 사용합니다 ! ⇒ current (”최근”이라는 뜻) 줄임말 CURR

DB Query

Oracle board_sq.NEXTVAL
MySQL board_sq.CURRVAL

2. 형변환 방법이 다릅니다.

Oracle에서는 TO_CHAR, TO_NUMBER 를 사용하여 형변환을 했지만,

MySQL에서는 CAST라는 예약어를 활용하여 형변환을 합니다.

DB Query

Oracle SELECT TO_CHAR(100) FROM DUAL
MySQL SELECT CAST(100 AS CHAR) FROM DUAL

3. 날짜 포멧변환 방법이 다릅니다.

Oracle에서는 DATE타입을 문자열로 나타낼때 TO_CHAR() 을 사용했지만,

MySQL에서는 DATE_FORMAT() 을 사용합니다.

DB Query

Oracle SELECT TO_CHAR(writedate, ‘YYYYMMDD HH24MISS’) FROM board
MySQL SELECT DATE_FORMAT(writedate, ‘%Y%m%d%H%i%s’) FROM board

4. 현재날짜를 나타내는 방법이 다릅니다.

Oracle에서는 SYSDATE 예약어를 사용하지만,

MySQL에서는 NOW() 함수를 사용합니다.

DB Query

Oracle SELECT SYSDATE FROM DUAL
MySQL SELECT NOW() FROM DUAL

5. 요일변환의 숫자가 다릅니다.

Oracle에서는 일,월,화,수,목,금,토 ⇒ 1,2,3,4,5,6,7 이지만

MySQL에서는 일,월,화,수,목,금,토 ⇒ 0,1,2,3,4,5,6 입니다.

이 점은 생각보다 신경을 잘 써야지 문제가 안생깁니다!

저는 기존에 오라클을 쓰다보니 날짜를 구할때 -1을 하는경우가 많았는데, MySQL에서는 그럴 필요가 없죠

왜냐면 자바스크립트에서 요일을 0~6으로 표현하기 때문입니다 🙂

DB Query

Oracle SELECT TO_DATE(SYSDATE, ‘D’) FROM DUAL
MySQL SELECT DATE_FORMAT(NOW(), ‘w’) FORM DUAL

오늘이 월요일이면 오라클은 2을, MySQL은 1를 반환합니다.

<aside> 💡 기본적으로 날짜 표기방식에 대해서 두개의 DB는 전반적으로 다른 표현이 많기 때문에 표를 참조해야합니다.

</aside>

CURRENT_DATE, CURDATE 현재 날짜 반환

CURRENT_TIME, CURTIME 현재 시간 반환
CURRENT_TIMESTAMP, NOW 현재 시간과 날짜 반환

DATE 문자열에 따라 날짜 생성

TIME 문자열에 따라 시간 생성

YEAR 주어진 DATETIME값의 년도 반환

MONTHNAME 주어진 DATETIME값의 월(영문) 반환
MONTH 주어진 DATETIME값의 월 반환
WEEKDAY 주어진 DATETIME값의 요일값 반환(월요일: 0)
DAYNAME 주어진 DATETIME값의 요일명 반환
DAYOFMONTH, DAY 주어진 DATETIME값의 날짜(일) 반환

HOUR 주어진 DATETIME의 시 반환

MINUTE 주어진 DATETIME의 분 반환
SECOND 주어진 DATETIME의 초 반환

ADDDATE, DATE_ADD 시간/날짜 더하기

SUBDATE, DATE_SUB 시간/날짜 빼기

DATE_DIFF 두 시간/날짜 간 일수차

TIME_DIFF 두 시간/날짜 간 시간차

LAST_DAY 해당 달의 마지막 날짜DATE_FORMAT 시간/날짜를 지정한 형식으로 반환%Y 년도 4자리

%y 년도 2자리
%M 월 영문
%m 월 숫자
%D 일 영문(1st, 2nd, 3rd...)
%d, %e 일 숫자 (01 ~ 31)
%T hh:mm:ss
%r hh:mm:ss AM/PM
%H, %k 시 (~23)
%h, %l 시 (~12)
%i
%S, %s
%p AM/PM

6. 문자를 합치는 방법이 다릅니다.

Oracle에서는 “||” 를 사용하여 문자열끼리 더해지는데,

MySQL에서는 CONTACT() 함수를 사용하여 더합니다.

DB Query

Oracle SELECT * FORM board WHERE name LIKE ‘yeon’
MySQL SELECT * FROM board WHERE name LIKE CONTACT(’yeon’, ‘woojin’)

7. 컬럼이 NULL일때 다른 문자로 표현해주는 방법이 다릅니다.

Oracle에서는 NVL함수를 사용하여 나타내지만,

MySQL에서는 IFNULL함수를 사용하여 나타냅니다.

DB Query

Oracle SELECT NVL(name, ‘X’) FORM table
MySQL SELECT IFNULL(name, ‘X’) FORM table

8. 페이징 처리 방식이 다릅니다.

Oracle에서는 ROWNUM 을 활용하여 WHERE절에서 표현했지만,

MySQL에서는 LIMIT 예약어를 사용하여 나타냅니다.

DB Query

Oracle SELECT * FROM (SELECT ROWNUM, A * FROM (SELECT * FROM DEPT) A) WHERE ROWNUM BETWEEN 0 AND 10;
   
MySQL SELECT * FROM DEPT LIMIT 0, 10;

이건 개꿀인데?


사실 이게 끝은 아닙니다….엄밀히 따지고 계속 정리하면 디지게 많아요^^

예를 들어…..

컬럼명이 예약어일때 오라클은 “컬럼명” 를 사용하여 표기했고

MySQL은 ₩컬럼명₩ 을 사용하여 표기합니다!

등등 너무 많아서 제일 많이 쓰는데 다른것들만 정리를 해봤습니다!

글을 쓰다가 알았는데 오늘 크리스마스이네요….모두들 메리크리스마스 입니다!! 🙂

728x90