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은 ₩컬럼명₩ 을 사용하여 표기합니다!
등등 너무 많아서 제일 많이 쓰는데 다른것들만 정리를 해봤습니다!
글을 쓰다가 알았는데 오늘 크리스마스이네요….모두들 메리크리스마스 입니다!! 🙂
'MySQL' 카테고리의 다른 글
MySQL Replication 구현해보기 Master & Replica(Slave) (0) | 2023.02.09 |
---|---|
MySQL VS Oracle 차이점 (1) | 2023.01.13 |
MySQL Join Query (0) | 2023.01.13 |