컴퓨터/컴퓨터 ETC

ORACLE과 MYSQL의 비교하자. [차이점]

푸른바다23 2017. 7. 19. 16:22
반응형

ORACLE과 MYSQL의 비교하자. [차이점]


요즘에는 윈도우서버보다 리눅스서버를 많이 쓰다보니 MSSQL사용빈도가 많이 줄어들었습니다.

그로 인해 ORACLE , MYSQL 사용량을 증가하였습니다.

오늘은 ORACLE과  MYSQL의 차이점에 대해서 알아보겠습니다.

[KGON이라는 테이블이 있으며 컬럼명에는 USER_ID, REG_DATE, UDP_DATE가 있습니다.]


첫번째로 NULL값확인함수가 다릅니다. 

즉, 컬럼값에 NULL이면 다른값으로 표시해주는 함수사용법이 다릅니다. 

ORACLE에서는 NVL함수를 사용하지만 MYSQL에서는 IFNULL을 사용합니다.

ex) (ORACLE) SELECT NVL(USER_ID,'') FROM KGON

ex) (MYSQL ) SELECT IFNULL(USER_ID,'') FROM KGON


두번째로 현재날짜시간 확인하는 방법이 다릅니다.

ORACLE에서는 SYSDATE를 사용하지만 MYSQL에서는 NOW()함수를 사용합니다.

ex) (ORACLE) SELECT SYSDATE FROM DUAL;

ex) (MYSQL ) SELECT NOW() FROM DUAL;


세번째로 날짜포멧 변환방법이 다릅니다.

ORACLE에서는 날짜를 STRING으로 변경시 TO_CHAR()함수를 사용하지만 MYSQL에서는 DATE_FORMAT()함수를 사용합니다.

ex) (ORACLE) SELECT TO_CHAR(REG_DATE, 'YYYYMMDD HH24MISS') FROM DUAL;

ex) (MYSQL ) SELECT DATE_FORMAT(REG_DATE, '%Y%m%d%H%i%s') FROM DUAL;

[형식에 쓰는 영문자는 대소문자에 따라 다른값이 나올 수 있습니다.]

[%Y는 4자리년도(2017) , %y는 2자리년도(17)]


네번째로 요일변환의 숫자범위가 다릅니다.

ORACLE은 일,월,화,수,목,금,토를 1,2,3,4,5,6,7로 인식합니다. 

MYSQL은 일,월,화,수,목,금,토를 0,1,2,3,4,5,6으로 인식합니다. 

그렇기 때문에 요일 계산하는 경우 조심해야합니다. 

오늘이 수요일인경우 ORACLE에서는 4가 반환되고 MYSQL에서는 3이 반환되기 떄문에 요일변환 사용하는 부분을 잘 확인해야합니다.

[보통 JAVASCRIPT에서 일,월,화,수,목,금,토를 0,1,2,3,4,5,6으로 쓰기 때문에 ORACLE인경우 결과값을 -1해서 반환하는 경우가 많습니다.]

ex) (ORACLE) SELECT TO_CHAR(SYSDATE, 'D') FROM DUAL; [결과값: 오늘이 수요일인경우 4를 반환]

ex) (MYSQL ) SELECT DATE_FORMAT(NOW(), '%w') FROM DUAL; [결과값: 오늘이 수요일인경우 3을 반환]


다섯번째로 문자와 문자 합치는 방법이 다릅니다.

ORACLE에서는 문자와 문자를 합칠때 '||'을 사용합니다.

MYSQL에서는 문자와 문자를 합칠때 CONCAT()함수를 사용합니다.

ex) (ORACLE) SELECT USER_ID FROM KGON WHERE USER_ID LIKE '%' || 'kgon' || '%'

ex) (MYSQL ) SELECT USER_ID FROM KGON WHERE USER_ID LIKE CONCAT('%','kgon','%')


여섯번째로 형변환방법이 다릅니다.

ORACLE에서는 TO_CHAR, TO_NUMBER을 사용하여 형을 변환하지만 MYSQL에서는 CAST를 사용하여 형을 변환합니다.

ex) (ORACLE) SELECT TO_CHAR(632) FROM DUAL

ex) (MYSQL ) SELECT CAST(1234 AS CHAR) FROM DUAL


일곱번째로 페이징처리가 다릅니다. 

ORACLE은 ROWNUM을 이용하여 WHERE에서 BETWEEN으로 1~10번째자료를 나타냅니다.

MYSQL은 LIMIT를 사용하여 1~10번째자료를 나타냅니다.

ex) (ORACLE) SELECT * FROM ( SELECT ROWNUM , A.* FROM (SELECT * FROM KGON) A )WHERE ROWNUM BETWEEN 0 AND 10

ex) (MYSQL ) SELECT * FROM KGON LIMIT 0, 10


여덟번째로 시퀀스사용시 다음번호 불러오는 방법이 다릅니다.

ORACLE은 시퀀스명.NEXTVAL을 사용하지만 MYSQL은 시퀀스명.CURRVAL를 사용합니다.


이상입니다.


디비에 따라 사용하는 방법이 다르니 DB에 맞는 사용법을 숙지하여 사용하시기 바랍니다. 

MYSQL에서 ORACLE로 쿼리를 변경하거나 ORACLE에서 MYSQL로 쿼리를 변경하는 경우에도 위의 차이점을 숙지하여 적용하시면 변경에 많은 도움이 됩니다.