본문 바로가기
SQL

오라클(Oracle DB) 개발 시 반드시 알아야 할 내용(MySQL, MSSQL와 차이점)

by 긴소리 2025. 3. 6.
728x90
반응형

오라클(Oracle DB) 개발 시 반드시 알아야 할 내용 정리

오라클 DB는 MySQL, MSSQL과 같은 관계형 데이터베이스(RDBMS)이지만, 몇 가지 중요한 차이점이 있어.
트랜잭션 처리, SQL 문법, 데이터 타입, 성능 최적화 방식 등이 다르기 때문에 처음 사용할 때 주의해야 해.


1️⃣ 트랜잭션 처리 방식 (AUTOCOMMIT 차이)

  • 오라클: 기본적으로 AUTOCOMMIT이 비활성화됨 → 직접 COMMIT을 실행해야 데이터가 저장됨
  • MySQL, MSSQL: AUTOCOMMIT이 활성화됨 → INSERT, UPDATE 등을 실행하면 즉시 반영됨

🔹 예제

-- 오라클에서는 COMMIT을 해야 변경 사항이 반영됨
UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10;
COMMIT;

👉 주의할 점: 오라클에서는 ROLLBACK;으로 되돌릴 수 있지만, MySQL/MSSQL에서는 AUTOCOMMIT이 기본적으로 켜져 있어 실수하면 복구가 어려울 수 있음.


2️⃣ 테이블 & 컬럼명 대소문자 구분

  • 오라클은 기본적으로 테이블, 컬럼명을 대문자로 저장함.
  • 만약 소문자로 사용하고 싶다면 더블쿼테이션(" ")을 사용해야 함.

🔹 예제

CREATE TABLE "users" ( "id" NUMBER, "name" VARCHAR2(50) );

-- 조회 시에도 정확한 대소문자 입력 필요
SELECT * FROM "users";  -- 가능
SELECT * FROM users;    -- 오류 발생 (대문자로 자동 변환됨)

👉 권장사항: 더블쿼테이션을 쓰면 관리가 어려워지므로 테이블 및 컬럼명을 대문자로 작성하는 것이 일반적임.


3️⃣ 데이터 타입 차이

오라클은 MySQL, MSSQL과 다르게 VARCHAR 대신 VARCHAR2를 사용해야 하고, 숫자와 날짜 타입도 차이가 있음.

타입 오라클(Oracle) MSSQL MySQL

문자열 VARCHAR2(50) VARCHAR(50) VARCHAR(50)
숫자형 NUMBER(10,2) DECIMAL(10,2) DECIMAL(10,2)
날짜/시간 DATE, TIMESTAMP DATETIME, DATE DATETIME, DATE

 

🔹 날짜 조회 예시 (오라클)

SELECT SYSDATE FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

 

🔹 MySQL/MSSQL

SELECT NOW(); -- MySQL
SELECT GETDATE(); -- MSSQL

 

👉 주의할 점: 오라클의 DATE 타입은 시간까지 포함하므로, DATETIME과 같은 개념이라고 보면 됨.


4️⃣ LIMIT 대신 ROWNUM / FETCH 사용

MySQL이나 MSSQL에서는 LIMIT을 사용하지만, 오라클에서는 ROWNUM 또는 FETCH FIRST를 사용해야 함.

 

🔹 MySQL / MSSQL

SELECT * FROM employees ORDER BY salary DESC LIMIT 5;

 

🔹 오라클 (ROWNUM 사용)

SELECT * FROM (SELECT * FROM employees ORDER BY salary DESC) WHERE ROWNUM <= 5;

 

🔹 오라클 (FETCH FIRST - 최신 방식)

SELECT * FROM employees ORDER BY salary DESC FETCH FIRST 5 ROWS ONLY;

👉 권장사항: 오라클 12c 이상에서는 FETCH FIRST를 사용하는 것이 더 직관적임.


5️⃣ 문자열 연결 연산자 차이

  • 오라클: || (더블 파이프) 사용
  • MSSQL / MySQL: + 또는 CONCAT() 사용

🔹 오라클 (|| 연산자)

SELECT 'Hello ' || 'World' FROM DUAL; -- 결과: Hello World

 

🔹 MySQL, MSSQL (CONCAT 함수)

SELECT CONCAT('Hello ', 'World'); -- 결과: Hello World

👉 주의할 점: 오라클에서는 + 연산자로 문자열을 연결할 수 없으며, 반드시 ||을 사용해야 함.


6️⃣ 자동 증가 값 설정 (SEQUENCE 사용)

MySQL과 MSSQL에서는 AUTO_INCREMENT나 IDENTITY를 사용하지만, 오라클에서는 SEQUENCE를 사용해야 함.

 

🔹 오라클 (SEQUENCE 활용)

CREATE SEQUENCE emp_seq START WITH 1 INCREMENT BY 1;

INSERT INTO employees (id, name) VALUES (emp_seq.NEXTVAL, 'Alice');

 

🔹 MySQL / MSSQL

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50)
);

👉 주의할 점: 오라클에서는 AUTO_INCREMENT가 없기 때문에, SEQUENCE를 만들어서 사용해야 함.


7️⃣ 서브쿼리와 JOIN 방식 차이

오라클에서는 FROM 절에 서브쿼리를 사용할 때 반드시 ALIAS(별칭)를 지정해야 함.

 

🔹 오라클 (ALIAS 필수)

SELECT a.department_id, a.salary
FROM (SELECT department_id, AVG(salary) AS salary FROM employees GROUP BY department_id) a;

 

🔹 MySQL, MSSQL (ALIAS 없이 가능)

SELECT department_id, AVG(salary) AS salary 
FROM (SELECT department_id, salary FROM employees) GROUP BY department_id;

👉 주의할 점: 오라클에서는 서브쿼리에 항상 별칭을 붙여야 실행됨.

반응형

댓글