< 기본적인 차이에 대한 이해 >
- 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 = [테이블명]