- Oracle SQL과 ANSI SQL의 차이
⸻
✅ Oracle SQL vs ANSI SQL: 개념 차이
- 항목 설명
Oracle SQL Oracle Database에 최적화된 전용 SQL 문법 스타일입니다. ANSI SQL 국제 표준화된 SQL 문법으로, 다양한 DBMS에서 공통적으로 사용하는 방식입니다. 차이점 발생 주로 JOIN 문법, 시퀀스 사용법, 함수명 등에서 차이가 납니다.
⸻
✅ 예제 비교
▶ 1. JOIN 문법
- Oracle 스타일 (Oracle Proprietary Join)
SELECT e.EMP_NAME, d.DEPT_NAME FROM EMPLOYEE e, DEPARTMENT d WHERE e.DEPT_ID = d.DEPT_ID;
- ANSI SQL 스타일 (표준 Join)
SELECT e.EMP_NAME, d.DEPT_NAME FROM EMPLOYEE e JOIN DEPARTMENT d ON e.DEPT_ID = d.DEPT_ID;
✅ Oracle 스타일은 WHERE절에서 조인을 처리
✅ ANSI 스타일은 JOIN절을 명시적으로 사용 (가독성 좋고 유지보수 용이)
⸻
▶ 2. OUTER JOIN
- Oracle 스타일
SELECT e.EMP_NAME, d.DEPT_NAME FROM EMPLOYEE e, DEPARTMENT d WHERE e.DEPT_ID = d.DEPT_ID(+);
(+) 기호는 Oracle 전용 문법입니다 (우측 테이블 기준 OUTER JOIN)
- ANSI SQL 스타일
SELECT e.EMP_NAME, d.DEPT_NAME FROM EMPLOYEE e LEFT JOIN DEPARTMENT d ON e.DEPT_ID = d.DEPT_ID;
LEFT JOIN, RIGHT JOIN 명시적으로 사용 (ANSI)
⸻
▶ 3. 시퀀스를 사용한 INSERT
- Oracle 스타일
INSERT INTO CUSTOMER (ID, NAME) VALUES (CUSTOMER_SEQ.NEXTVAL, '홍길동');
Oracle은 시퀀스명.NEXTVAL 방식으로 고유값을 생성합니다.
- ANSI SQL 스타일
ANSI SQL에는 직접적인 NEXTVAL 문법이 없고, 일반적으로 IDENTITY 또는 AUTO_INCREMENT 사용을 다른 DBMS에서 지원합니다. (Oracle에서 표준 방식처럼 하려면 IDENTITY 컬럼 사용)
-- Oracle 12c 이상에서 ANSI 스타일 유사하게 사용하는 경우 CREATE TABLE CUSTOMER ( ID NUMBER GENERATED ALWAYS AS IDENTITY, NAME VARCHAR2(100) );
⸻
✅ Oracle SQL vs ANSI SQL 요점 정리
항목 | Oracle SQL 스타일 | ANSI SQL 스타일 |
---|---|---|
INNER JOIN |
SELECT * FROM emp e, dept d WHERE e.dept_id = d.dept_id; || SELECT * FROM emp e JOIN dept d ON e.dept_id = d.dept_id; | |
OUTER JOIN |
SELECT * FROM emp e, dept d WHERE e.dept_id = d.dept_id(+); || SELECT * FROM emp e LEFT JOIN dept d ON e.dept_id = d.dept_id; | |
시퀀스 사용 |
INSERT INTO customer (id) VALUES (customer_seq.NEXTVAL); || -- Oracle 12c 이상: GENERATED AS IDENTITY 사용 | |
조인 표현 방식 | WHERE절 중심 조인 | JOIN절 중심 명시적 조인 |
가독성 및 유지보수 | 복잡한 조인일수록 해석 어려움 | 구조적이고 읽기 쉬움 |
⸻
✅ 결론 요약
- Oracle SQL: Oracle에 특화된 문법. 속도, 유연성 좋지만 이식성이 낮음.
- ANSI SQL: 표준 SQL. 다양한 DBMS와 호환되며 유지보수가 용이함.
- 신규 개발이나 협업 환경에서는 ANSI SQL 권장.
⸻
💡