본문 바로가기
IT & TECH/팁(Tip)

[DB 기초] 같은 SQL인데 왜 문법이 다를까? 오라클(Oracle) vs MS-SQL 차이점과 이유 총정리

by codenplay 2025. 12. 23.

안녕하세요. 전산실에서 근무하며 매일 데이터를 다루는 전산직입니다.

 

개발이나 DB 관리를 하다 보면 메인으로 쓰는 오라클(Oracle) 외에, 특정 솔루션 때문에 MS-SQL(SQL Server)을 만져야 할 때가 있습니다.

 

그런데 분명 둘 다 'SQL'이라는 같은 언어를 쓰는데, 막상 쿼리를 날려보면 에러가 납니다. "오라클에선 NVL이 되는데 MS-SQL은 왜 안 돼?" "날짜 포맷은 왜 또 달라?"

 

이런 의문, 한 번쯤 가져보셨을 겁니다. 오늘은 도대체 왜 두 DB의 문법이 다른지 그 근본적인 이유부터, 실무에서 가장 자주 틀리는 핵심 문법 차이까지 한 방에 정리해 드립니다.


Oracle, MS-SQL 쿼리 문법 차이 총정리
Oracle, MS-SQL 쿼리 문법 차이 총정리

1. SQL이란 무엇인가? (표준의 존재)

먼저 SQL(Structured Query Language)은 데이터베이스와 대화하기 위해 만들어진 '표준 언어'입니다. 마치 전 세계 공용어인 영어처럼요.

 

미국 국립 표준 협회(ANSI)에서는 "모든 DB는 이 문법을 따라라"라고 정해둔 규칙이 있는데, 이를 'ANSI SQL(표준 SQL)'이라고 합니다.

  • SELECT, FROM, WHERE, JOIN 같은 기본적인 뼈대는 이 표준을 따르기 때문에 어떤 DB든 똑같습니다.

❓ 그럼 왜 문법이 다를까? (방언의 탄생)

문제는 DB를 만드는 회사들(오라클, 마이크로소프트)의 경쟁 때문입니다. 표준만 지키면 기능이 너무 밋밋하니까, 각 회사가 자기들만의 '편리하고 강력한 독자 기능'을 추가하기 시작했습니다.

 

이것을 'SQL 방언(Dialect)'이라고 부릅니다. 마치 한국어(표준어)가 있지만, 제주도 사투리경상도 사투리가 서로 다른 것과 똑같습니다.

  • 오라클(Oracle): 표준 SQL에 'PL/SQL'이라는 강력한 자체 언어를 섞어서 씁니다. (예: DECODE, NVL)
  • MS-SQL(Microsoft): 표준 SQL에 'T-SQL'이라는 자체 언어를 확장해서 씁니다. (예: TOP, ISNULL)

결국 우리는 "표준어(ANSI SQL)""각 회사의 사투리"를 섞어서 쓰고 있었던 셈입니다. 우리가 헷갈리는 건 바로 이 '사투리' 부분 때문이죠.


2. 오라클 vs MS-SQL, 운영 환경의 차이 (개발자 상식)

문법 차이를 알아보기 전에, 두 DB가 주로 사용되는 환경을 알면 이해가 빠릅니다.

 

1) 오라클 (Oracle)

  • 특징: 대용량 데이터 처리에 매우 강력하며, 안정성이 뛰어납니다.
  • 주 사용처: 금융권, 대기업, 관공서, 대학병원 등 '절대 죽으면 안 되는' 핵심 시스템(Mission Critical)에서 주로 씁니다.
  • 비용: 라이선스 비용이 매우 비쌉니다. (전산실 예산의 주범이죠.)

2) MS-SQL (SQL Server)

  • 특징: 마이크로소프트가 만든 만큼 Windows OS와의 호환성이 끝판왕입니다. GUI(관리 도구)가 매우 편리해서 초보자가 접근하기 좋습니다.
  • 주 사용처: 중견기업, 웹 서비스, .NET 기반의 개발 환경에서 많이 씁니다.
  • 비용: 오라클보다는 저렴하며, 윈도우 서버와 패키지로 도입하는 경우가 많습니다.

 

3. 실무에서 가장 많이 틀리는 문법 차이 BEST 5

배경을 알았으니, 이제 실무에서 우리를 괴롭히는 결정적인 차이점들을 비교해 보겠습니다. (이 부분은 즐겨찾기 해두고 필요할 때마다 보세요!)

① NULL 처리 (NVL vs ISNULL)

데이터 조회 시 NULL 값을 0이나 공백으로 바꿀 때 쓰는 함수입니다. 가장 기본인데 가장 많이 틀립니다.

  • 오라클: NVL(컬럼, 0)
  • MS-SQL: ISNULL(컬럼, 0)
  • (참고: 표준 ANSI 문법인 COALESCE를 쓰면 둘 다 통합니다!)

② 현재 날짜와 시간 (SYSDATE vs GETDATE)

로그를 남길 때 필수인 현재 시간 함수입니다.

  • 오라클: SYSDATE (반드시 FROM DUAL이 필요함)
  • MS-SQL: GETDATE() (그냥 이것만 써도 됨)

③ 날짜 포맷 변환 (가장 복잡함!)

날짜를 'YYYY-MM-DD' 문자열로 바꿀 때입니다.

  • 오라클: TO_CHAR(SYSDATE, 'YYYY-MM-DD')
    • 직관적입니다. 포맷을 문자로 적으면 됩니다.
  • MS-SQL: CONVERT(VARCHAR, GETDATE(), 23)
    • 마이크로소프트는 고유의 '스타일 번호'를 씁니다.
    • 23: YYYY-MM-DD
    • 120: YYYY-MM-DD HH:MI:SS (제일 많이 씀)
    • MS-SQL 2012부터는 오라클의 TO_CHAR와 거의 똑같은 FORMAT(GETDATE(), 'yyyy-MM-dd') 함수가 생겼습니다.

④ 문자열 합치기 (|| vs +)

이름과 직급을 합쳐서 보여줄 때입니다.

  • 오라클: 이름 || 직급 (파이프라인 기호 2개)
  • MS-SQL: 이름 + 직급 (더하기 기호)
    • 주의: MS-SQL에서 숫자가 섞여 있으면 덧셈 연산이 될 수 있습니다.
    • 더 무서운 건 "하나라도 NULL이면 결과가 전체 NULL이 된다"는 점입니다.

⑤ 상위 N개 데이터만 조회 (ROWNUM vs TOP)

"최신 글 5개만 가져와" 같은 쿼리를 짤 때 차이가 큽니다.

  • MS-SQL: SELECT TOP 5 * FROM BOARD (아주 직관적이고 편함)
  • 오라클: SELECT * FROM BOARD WHERE ROWNUM <= 5
    • 오라클은 TOP이 없습니다. ROWNUM이라는 가상 컬럼을 써야 하는데, 정렬(ORDER BY)과 함께 쓰려면 서브쿼리를 써야 해서 꽤 복잡해집니다.
    • 과거엔 ROWNUM이 필수였지만, 최신 버전(12c 이상)부터는 FETCH FIRST 5 ROWS ONLY라는 아주 편한 문법이 생겼습니다.

4. 자주 만나는 에러 메시지 비교 (트러블 슈팅)

쿼리를 잘못 짰을 때 나오는 에러 메시지도 다릅니다. 이걸 알아두면 구글링할 때 편합니다.

  • 테이블이 없을 때:
    • Oracle: ORA-00942: table or view does not exist
    • MS-SQL: Invalid object name '테이블명'.
  • 컬럼명이 틀렸을 때:
    • Oracle: ORA-00904: invalid identifier
    • MS-SQL: Invalid column name '컬럼명'.

5. 한눈에 보는 요약표 (Cheat Sheet) 📋

바쁘신 분들은 이 표 하나만 캡처해 두시면 됩니다.

구분 오라클 (Oracle) MS-SQL (SQL Server)
언어(방언) PL/SQL T-SQL
NULL 처리 NVL ISNULL
현재 시간 SYSDATE GETDATE()
날짜 변환 TO_CHAR CONVERT
문자열 연결 || +
상위 N개 WHERE ROWNUM <= N SELECT TOP N
가상 테이블 FROM DUAL 필수 생략 가능

 


마치며: 둘 다 잘하는 개발자가 되려면?

결국 오라클과 MS-SQL은 "같은 뿌리(ANSI SQL)에서 나온 다른 형제"입니다. 처음엔 문법 차이가 짜증 나겠지만, "왜 다를까?"를 이해하고 나면 오히려 각 DB의 특징을 활용해서 더 효율적인 쿼리를 짤 수 있습니다.

 

특히 표준 문법(ANSI SQL)을 위주로 쿼리를 짜는 습관을 들이면, DB가 바뀌어도 코드 수정을 최소화할 수 있다는 점, 꼭 기억해 주세요!

 

이 글이 두 DB 사이에서 방황하는 분들에게 작은 나침반이 되길 바랍니다.

 

[함께 보면 좋은 글]

2025.11.25 - [IT & TECH/개발기록] - [프로젝트] PC 자산관리 프로그램 개발기 #1 : 엑셀 & 파워빌더(CS)를 넘어 웹(Web)으로 가는 도전

 

[프로젝트] PC 자산관리 프로그램 개발기 #1 : 엑셀 & 파워빌더(CS)를 넘어 웹(Web)으로 가는 도전

그동안 저는 사내의 수백 대가 넘는 PC와 장비들을 엑셀(Excel) 하나로 관리해 왔습니다. 물론 엑셀은 인류가 만든 가장 위대한 도구 중 하나입니다. 하지만 데이터가 쌓이고 관리해야 할 자산이

codenplay.tistory.com