< 기본적인 차이에 대한 이해 >

  • Oracle : Multi-process 방식
  • MySQL : Single-process, Multi-thread  방식

 

< 메타데이터 >

  • MySQL :  사용자 인증 정보, 스토어드 프로그램, 이벤트 정보, 복제 관련 정보
    예: mysql.user
  • INFORMATION_SCHEMA : 메모리 내의 메타 정보를 테이블 형태로 접근할 수 있다. 
    예: information_schema.tables, information_schema.innodb_trx
  • PERFORMANCE_SCHEMA : MySQL 서버가 쿼리 처리 시 발생하는 각종 이벤트 및 잠금 현상 등을 숫자로 기억하는 테이블 저장 공간

 

< SQL 전환 >

1. 타입

  • NUMBER -> INT
  • VARCHAR2 -> VARCHAR
  • DATE -> DATETIME (참고로 SQL Server도 DATETIME)

 

2. 함수

  • NVL -> IFNULL
  • SYSDATE -> NOW()
  • TRUNC -> CURDATE, MySQL에서 TRUNC 하면 시간이 없는 일자만 나옴.
  • DECODE -> CASE
  • TO_CHAR, TO_NUMBER -> CAST

 

3.  시퀀스

  • 지원하지 않는다. 직접 함수를 만들어 사용해야 한다.
  • 혹은 AUTO_INCREMENT 속성 컬럼 사용

 

4. 힌트

다 지운다. 있어도 무시된다.

 

5. rownum

조건에 rownum을 사용하고 있던 경우는 limit으로 대체

SELECT * FROM ${TABLE_NAME} LIMIT 4,10;

해석: 5번째 레코드부터 10개의 결과 추출, 시작이 0임에 유의하자.

 

6. 날짜 관련

  • TO_CHAR -> DATE_FORMAT()
    예: TO_CHAR(SYSDATE, 'YYYYMMDD') -> DATE_FORMAT(NOW(), '%Y%d%m')

 

7. MERGE INTO

쿼리문을 풀어서 수행한다.

 

8. START WITH CONNECT BY

WITH문을 이용한 RECURSIVE 쿼리로 변경

 

9. 서브쿼리

서브쿼리에 alias가 없다면 붙여야 한다.

 

10. DELETE

DELETE [테이블명]으로 쓰이고 있는 부분이 있다면 DELETE FROM [테이블명] 으로 수정해야 한다.

 

11. OUTER JOIN

  • (참고) OUTER JOIN은 INNER JOIN을 확장한 것으로 공통 컬럼 값이 NULL이더라도 조회 결과에 포함된다.
  • MySQL에서는 LEFT OUTER JOIN ... ON, RIGHT OUTER JOIN ... ON 과 같이 ANSI SQL 타입으로 표기해야 한다.

1) LEFT OUTER JOIN

SELECT A.*, B.* FROM A, B WHERE A.ID = B.ID(+);

다음과 같이 변경한다.

SELECT A.*, B.* FROM A LEFT OUTER JOIN B ON A.ID = B.ID;

2) RIGHT OUTER JOIN

SELECT A.*, B.* FROM A, B WHERE A.ID(+) = B.ID;

다음과 같이 변경한다.

SELECT A.*, B.* FROM A RIGHT OUTER JOIN B ON A.ID = B.ID;

 

12. 테이블 확인

Oracle은 다음과 같이 사용한다.

SELECT COUNT(*) TABLE_COUNT FROM ALL_TABLES WHERE TABLE_NAME = [테이블명]

MySQL에서는 다음과 같다.

SELECT COUNT(*) TABLE_COUNT FROM information_schema.tables 
WHERE table_schema = [DB명] AND table_name = [테이블명]